OILS / _devbuild / gen / value_asdl.py View on Github | oilshell.org

2270 lines, 1679 significant
1from asdl import pybase
2from mycpp import mops
3from typing import Optional, List, Tuple, Dict, Any, cast, TYPE_CHECKING
4
5if TYPE_CHECKING:
6 from _devbuild.gen.syntax_asdl import loc_t, Token, expr_t, command_t, DoubleQuoted, re_t, proc_sig_t, LiteralBlock, Func, NameType, EggexFlag
7 from _devbuild.gen.runtime_asdl import Cell
8
9
10from asdl import runtime # For runtime.NO_SPID
11from asdl.runtime import NewRecord, NewLeaf, TraversalState
12from _devbuild.gen.hnode_asdl import color_e, hnode, hnode_e, hnode_t, Field
13
14class y_lvalue_e(object):
15 Local = 66
16 Container = 2
17
18_y_lvalue_str = {
19 2: 'Container',
20 66: 'Local',
21}
22
23def y_lvalue_str(tag, dot=True):
24 # type: (int, bool) -> str
25 v = _y_lvalue_str[tag]
26 if dot:
27 return "y_lvalue.%s" % v
28 else:
29 return v
30
31class y_lvalue_t(pybase.CompoundObj):
32 def tag(self):
33 # type: () -> int
34 return self._type_tag
35 pass
36
37class y_lvalue(object):
38 class Container(y_lvalue_t):
39 _type_tag = 2
40 __slots__ = ('obj', 'index')
41
42 def __init__(self, obj, index):
43 # type: (value_t, value_t) -> None
44 self.obj = obj
45 self.index = index
46
47 @staticmethod
48 def CreateNull(alloc_lists=False):
49 # type: () -> y_lvalue.Container
50 return y_lvalue.Container(cast(value_t, None), cast(value_t, None))
51
52 def PrettyTree(self, trav=None):
53 # type: (Optional[TraversalState]) -> hnode_t
54 trav = trav or TraversalState()
55 heap_id = id(self)
56 if heap_id in trav.seen:
57 return hnode.AlreadySeen(heap_id)
58 trav.seen[heap_id] = True
59 out_node = NewRecord('y_lvalue.Container')
60 L = out_node.fields
61
62 assert self.obj is not None
63 x0 = self.obj.PrettyTree(trav=trav)
64 L.append(Field('obj', x0))
65
66 assert self.index is not None
67 x1 = self.index.PrettyTree(trav=trav)
68 L.append(Field('index', x1))
69
70 return out_node
71
72 def _AbbreviatedTree(self, trav=None):
73 # type: (Optional[TraversalState]) -> hnode_t
74 trav = trav or TraversalState()
75 heap_id = id(self)
76 if heap_id in trav.seen:
77 return hnode.AlreadySeen(heap_id)
78 trav.seen[heap_id] = True
79 out_node = NewRecord('y_lvalue.Container')
80 L = out_node.fields
81 assert self.obj is not None
82 x0 = self.obj.AbbreviatedTree(trav=trav)
83 L.append(Field('obj', x0))
84
85 assert self.index is not None
86 x1 = self.index.AbbreviatedTree(trav=trav)
87 L.append(Field('index', x1))
88
89 return out_node
90
91 def AbbreviatedTree(self, trav=None):
92 # type: (Optional[TraversalState]) -> hnode_t
93 return self._AbbreviatedTree(trav=trav)
94
95 pass
96
97class sh_lvalue_e(object):
98 Var = 66
99 Indexed = 2
100 Keyed = 3
101
102_sh_lvalue_str = {
103 2: 'Indexed',
104 3: 'Keyed',
105 66: 'Var',
106}
107
108def sh_lvalue_str(tag, dot=True):
109 # type: (int, bool) -> str
110 v = _sh_lvalue_str[tag]
111 if dot:
112 return "sh_lvalue.%s" % v
113 else:
114 return v
115
116class sh_lvalue_t(pybase.CompoundObj):
117 def tag(self):
118 # type: () -> int
119 return self._type_tag
120 pass
121
122class sh_lvalue(object):
123 class Indexed(sh_lvalue_t):
124 _type_tag = 2
125 __slots__ = ('name', 'index', 'blame_loc')
126
127 def __init__(self, name, index, blame_loc):
128 # type: (str, int, loc_t) -> None
129 self.name = name
130 self.index = index
131 self.blame_loc = blame_loc
132
133 @staticmethod
134 def CreateNull(alloc_lists=False):
135 # type: () -> sh_lvalue.Indexed
136 return sh_lvalue.Indexed('', -1, cast(loc_t, None))
137
138 def PrettyTree(self, trav=None):
139 # type: (Optional[TraversalState]) -> hnode_t
140 trav = trav or TraversalState()
141 heap_id = id(self)
142 if heap_id in trav.seen:
143 return hnode.AlreadySeen(heap_id)
144 trav.seen[heap_id] = True
145 out_node = NewRecord('sh_lvalue.Indexed')
146 L = out_node.fields
147
148 x0 = NewLeaf(self.name, color_e.StringConst)
149 L.append(Field('name', x0))
150
151 x1 = hnode.Leaf(str(self.index), color_e.OtherConst)
152 L.append(Field('index', x1))
153
154 assert self.blame_loc is not None
155 x2 = self.blame_loc.PrettyTree(trav=trav)
156 L.append(Field('blame_loc', x2))
157
158 return out_node
159
160 def _AbbreviatedTree(self, trav=None):
161 # type: (Optional[TraversalState]) -> hnode_t
162 trav = trav or TraversalState()
163 heap_id = id(self)
164 if heap_id in trav.seen:
165 return hnode.AlreadySeen(heap_id)
166 trav.seen[heap_id] = True
167 out_node = NewRecord('sh_lvalue.Indexed')
168 L = out_node.fields
169 x0 = NewLeaf(self.name, color_e.StringConst)
170 L.append(Field('name', x0))
171
172 x1 = hnode.Leaf(str(self.index), color_e.OtherConst)
173 L.append(Field('index', x1))
174
175 assert self.blame_loc is not None
176 x2 = self.blame_loc.AbbreviatedTree(trav=trav)
177 L.append(Field('blame_loc', x2))
178
179 return out_node
180
181 def AbbreviatedTree(self, trav=None):
182 # type: (Optional[TraversalState]) -> hnode_t
183 return self._AbbreviatedTree(trav=trav)
184
185 class Keyed(sh_lvalue_t):
186 _type_tag = 3
187 __slots__ = ('name', 'key', 'blame_loc')
188
189 def __init__(self, name, key, blame_loc):
190 # type: (str, str, loc_t) -> None
191 self.name = name
192 self.key = key
193 self.blame_loc = blame_loc
194
195 @staticmethod
196 def CreateNull(alloc_lists=False):
197 # type: () -> sh_lvalue.Keyed
198 return sh_lvalue.Keyed('', '', cast(loc_t, None))
199
200 def PrettyTree(self, trav=None):
201 # type: (Optional[TraversalState]) -> hnode_t
202 trav = trav or TraversalState()
203 heap_id = id(self)
204 if heap_id in trav.seen:
205 return hnode.AlreadySeen(heap_id)
206 trav.seen[heap_id] = True
207 out_node = NewRecord('sh_lvalue.Keyed')
208 L = out_node.fields
209
210 x0 = NewLeaf(self.name, color_e.StringConst)
211 L.append(Field('name', x0))
212
213 x1 = NewLeaf(self.key, color_e.StringConst)
214 L.append(Field('key', x1))
215
216 assert self.blame_loc is not None
217 x2 = self.blame_loc.PrettyTree(trav=trav)
218 L.append(Field('blame_loc', x2))
219
220 return out_node
221
222 def _AbbreviatedTree(self, trav=None):
223 # type: (Optional[TraversalState]) -> hnode_t
224 trav = trav or TraversalState()
225 heap_id = id(self)
226 if heap_id in trav.seen:
227 return hnode.AlreadySeen(heap_id)
228 trav.seen[heap_id] = True
229 out_node = NewRecord('sh_lvalue.Keyed')
230 L = out_node.fields
231 x0 = NewLeaf(self.name, color_e.StringConst)
232 L.append(Field('name', x0))
233
234 x1 = NewLeaf(self.key, color_e.StringConst)
235 L.append(Field('key', x1))
236
237 assert self.blame_loc is not None
238 x2 = self.blame_loc.AbbreviatedTree(trav=trav)
239 L.append(Field('blame_loc', x2))
240
241 return out_node
242
243 def AbbreviatedTree(self, trav=None):
244 # type: (Optional[TraversalState]) -> hnode_t
245 return self._AbbreviatedTree(trav=trav)
246
247 pass
248
249class eggex_ops_e(object):
250 No = 1
251 Yes = 2
252
253_eggex_ops_str = {
254 1: 'No',
255 2: 'Yes',
256}
257
258def eggex_ops_str(tag, dot=True):
259 # type: (int, bool) -> str
260 v = _eggex_ops_str[tag]
261 if dot:
262 return "eggex_ops.%s" % v
263 else:
264 return v
265
266class eggex_ops_t(pybase.CompoundObj):
267 def tag(self):
268 # type: () -> int
269 return self._type_tag
270 pass
271
272class eggex_ops__No(eggex_ops_t):
273 _type_tag = 1
274 __slots__ = ()
275
276 def __init__(self, ):
277 # type: () -> None
278 pass
279
280 def PrettyTree(self, trav=None):
281 # type: (Optional[TraversalState]) -> hnode_t
282 trav = trav or TraversalState()
283 heap_id = id(self)
284 if heap_id in trav.seen:
285 return hnode.AlreadySeen(heap_id)
286 trav.seen[heap_id] = True
287 out_node = NewRecord('eggex_ops__No')
288 L = out_node.fields
289
290 return out_node
291
292 def _AbbreviatedTree(self, trav=None):
293 # type: (Optional[TraversalState]) -> hnode_t
294 trav = trav or TraversalState()
295 heap_id = id(self)
296 if heap_id in trav.seen:
297 return hnode.AlreadySeen(heap_id)
298 trav.seen[heap_id] = True
299 out_node = NewRecord('eggex_ops__No')
300 L = out_node.fields
301 return out_node
302
303 def AbbreviatedTree(self, trav=None):
304 # type: (Optional[TraversalState]) -> hnode_t
305 return self._AbbreviatedTree(trav=trav)
306
307class eggex_ops(object):
308 No = eggex_ops__No()
309
310 class Yes(eggex_ops_t):
311 _type_tag = 2
312 __slots__ = ('convert_funcs', 'convert_toks', 'capture_names')
313
314 def __init__(self, convert_funcs, convert_toks, capture_names):
315 # type: (List[Optional[value_t]], List[Optional[Token]], List[Optional[str]]) -> None
316 self.convert_funcs = convert_funcs
317 self.convert_toks = convert_toks
318 self.capture_names = capture_names
319
320 @staticmethod
321 def CreateNull(alloc_lists=False):
322 # type: () -> eggex_ops.Yes
323 return eggex_ops.Yes([] if alloc_lists else cast('List[Optional[value_t]]', None), [] if alloc_lists else cast('List[Optional[Token]]', None), [] if alloc_lists else cast('List[Optional[str]]', None))
324
325 def PrettyTree(self, trav=None):
326 # type: (Optional[TraversalState]) -> hnode_t
327 trav = trav or TraversalState()
328 heap_id = id(self)
329 if heap_id in trav.seen:
330 return hnode.AlreadySeen(heap_id)
331 trav.seen[heap_id] = True
332 out_node = NewRecord('eggex_ops.Yes')
333 L = out_node.fields
334
335 if self.convert_funcs is not None: # List
336 x0 = hnode.Array([])
337 for i0 in self.convert_funcs:
338 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
339 i0.PrettyTree(trav=trav))
340 x0.children.append(h)
341 L.append(Field('convert_funcs', x0))
342
343 if self.convert_toks is not None: # List
344 x1 = hnode.Array([])
345 for i1 in self.convert_toks:
346 h = (hnode.Leaf("_", color_e.OtherConst) if i1 is None else
347 i1.PrettyTree(trav=trav))
348 x1.children.append(h)
349 L.append(Field('convert_toks', x1))
350
351 if self.capture_names is not None: # List
352 x2 = hnode.Array([])
353 for i2 in self.capture_names:
354 x2.children.append(NewLeaf(i2, color_e.StringConst))
355 L.append(Field('capture_names', x2))
356
357 return out_node
358
359 def _AbbreviatedTree(self, trav=None):
360 # type: (Optional[TraversalState]) -> hnode_t
361 trav = trav or TraversalState()
362 heap_id = id(self)
363 if heap_id in trav.seen:
364 return hnode.AlreadySeen(heap_id)
365 trav.seen[heap_id] = True
366 out_node = NewRecord('eggex_ops.Yes')
367 L = out_node.fields
368 if self.convert_funcs is not None: # List
369 x0 = hnode.Array([])
370 for i0 in self.convert_funcs:
371 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
372 i0.AbbreviatedTree(trav=trav))
373 x0.children.append(h)
374 L.append(Field('convert_funcs', x0))
375
376 if self.convert_toks is not None: # List
377 x1 = hnode.Array([])
378 for i1 in self.convert_toks:
379 h = (hnode.Leaf("_", color_e.OtherConst) if i1 is None else
380 i1.AbbreviatedTree(trav=trav))
381 x1.children.append(h)
382 L.append(Field('convert_toks', x1))
383
384 if self.capture_names is not None: # List
385 x2 = hnode.Array([])
386 for i2 in self.capture_names:
387 x2.children.append(NewLeaf(i2, color_e.StringConst))
388 L.append(Field('capture_names', x2))
389
390 return out_node
391
392 def AbbreviatedTree(self, trav=None):
393 # type: (Optional[TraversalState]) -> hnode_t
394 return self._AbbreviatedTree(trav=trav)
395
396 pass
397
398class regex_match_e(object):
399 No = 1
400 Yes = 67
401
402_regex_match_str = {
403 1: 'No',
404 67: 'Yes',
405}
406
407def regex_match_str(tag, dot=True):
408 # type: (int, bool) -> str
409 v = _regex_match_str[tag]
410 if dot:
411 return "regex_match.%s" % v
412 else:
413 return v
414
415class regex_match_t(pybase.CompoundObj):
416 def tag(self):
417 # type: () -> int
418 return self._type_tag
419 pass
420
421class regex_match__No(regex_match_t):
422 _type_tag = 1
423 __slots__ = ()
424
425 def __init__(self, ):
426 # type: () -> None
427 pass
428
429 def PrettyTree(self, trav=None):
430 # type: (Optional[TraversalState]) -> hnode_t
431 trav = trav or TraversalState()
432 heap_id = id(self)
433 if heap_id in trav.seen:
434 return hnode.AlreadySeen(heap_id)
435 trav.seen[heap_id] = True
436 out_node = NewRecord('regex_match__No')
437 L = out_node.fields
438
439 return out_node
440
441 def _AbbreviatedTree(self, trav=None):
442 # type: (Optional[TraversalState]) -> hnode_t
443 trav = trav or TraversalState()
444 heap_id = id(self)
445 if heap_id in trav.seen:
446 return hnode.AlreadySeen(heap_id)
447 trav.seen[heap_id] = True
448 out_node = NewRecord('regex_match__No')
449 L = out_node.fields
450 return out_node
451
452 def AbbreviatedTree(self, trav=None):
453 # type: (Optional[TraversalState]) -> hnode_t
454 return self._AbbreviatedTree(trav=trav)
455
456class regex_match(object):
457 No = regex_match__No()
458
459 pass
460
461class value_e(object):
462 Interrupted = 1
463 Stdin = 2
464 Undef = 3
465 Str = 4
466 BashArray = 5
467 SparseArray = 6
468 BashAssoc = 7
469 Null = 8
470 Bool = 9
471 Int = 10
472 Float = 11
473 List = 12
474 Dict = 13
475 Obj = 68
476 Eggex = 15
477 Match = 67
478 Expr = 17
479 Command = 18
480 Block = 19
481 Place = 20
482 Module = 21
483 BuiltinFunc = 22
484 BoundFunc = 23
485 Proc = 24
486 Func = 25
487 Range = 26
488 Slice = 27
489
490_value_str = {
491 1: 'Interrupted',
492 2: 'Stdin',
493 3: 'Undef',
494 4: 'Str',
495 5: 'BashArray',
496 6: 'SparseArray',
497 7: 'BashAssoc',
498 8: 'Null',
499 9: 'Bool',
500 10: 'Int',
501 11: 'Float',
502 12: 'List',
503 13: 'Dict',
504 15: 'Eggex',
505 17: 'Expr',
506 18: 'Command',
507 19: 'Block',
508 20: 'Place',
509 21: 'Module',
510 22: 'BuiltinFunc',
511 23: 'BoundFunc',
512 24: 'Proc',
513 25: 'Func',
514 26: 'Range',
515 27: 'Slice',
516 67: 'Match',
517 68: 'Obj',
518}
519
520def value_str(tag, dot=True):
521 # type: (int, bool) -> str
522 v = _value_str[tag]
523 if dot:
524 return "value.%s" % v
525 else:
526 return v
527
528class value_t(pybase.CompoundObj):
529 def tag(self):
530 # type: () -> int
531 return self._type_tag
532 pass
533
534class value__Interrupted(value_t):
535 _type_tag = 1
536 __slots__ = ()
537
538 def __init__(self, ):
539 # type: () -> None
540 pass
541
542 def PrettyTree(self, trav=None):
543 # type: (Optional[TraversalState]) -> hnode_t
544 trav = trav or TraversalState()
545 heap_id = id(self)
546 if heap_id in trav.seen:
547 return hnode.AlreadySeen(heap_id)
548 trav.seen[heap_id] = True
549 out_node = NewRecord('value__Interrupted')
550 L = out_node.fields
551
552 return out_node
553
554 def _AbbreviatedTree(self, trav=None):
555 # type: (Optional[TraversalState]) -> hnode_t
556 trav = trav or TraversalState()
557 heap_id = id(self)
558 if heap_id in trav.seen:
559 return hnode.AlreadySeen(heap_id)
560 trav.seen[heap_id] = True
561 out_node = NewRecord('value__Interrupted')
562 L = out_node.fields
563 return out_node
564
565 def AbbreviatedTree(self, trav=None):
566 # type: (Optional[TraversalState]) -> hnode_t
567 return self._AbbreviatedTree(trav=trav)
568
569class value__Stdin(value_t):
570 _type_tag = 2
571 __slots__ = ()
572
573 def __init__(self, ):
574 # type: () -> None
575 pass
576
577 def PrettyTree(self, trav=None):
578 # type: (Optional[TraversalState]) -> hnode_t
579 trav = trav or TraversalState()
580 heap_id = id(self)
581 if heap_id in trav.seen:
582 return hnode.AlreadySeen(heap_id)
583 trav.seen[heap_id] = True
584 out_node = NewRecord('value__Stdin')
585 L = out_node.fields
586
587 return out_node
588
589 def _AbbreviatedTree(self, trav=None):
590 # type: (Optional[TraversalState]) -> hnode_t
591 trav = trav or TraversalState()
592 heap_id = id(self)
593 if heap_id in trav.seen:
594 return hnode.AlreadySeen(heap_id)
595 trav.seen[heap_id] = True
596 out_node = NewRecord('value__Stdin')
597 L = out_node.fields
598 return out_node
599
600 def AbbreviatedTree(self, trav=None):
601 # type: (Optional[TraversalState]) -> hnode_t
602 return self._AbbreviatedTree(trav=trav)
603
604class value__Undef(value_t):
605 _type_tag = 3
606 __slots__ = ()
607
608 def __init__(self, ):
609 # type: () -> None
610 pass
611
612 def PrettyTree(self, trav=None):
613 # type: (Optional[TraversalState]) -> hnode_t
614 trav = trav or TraversalState()
615 heap_id = id(self)
616 if heap_id in trav.seen:
617 return hnode.AlreadySeen(heap_id)
618 trav.seen[heap_id] = True
619 out_node = NewRecord('value__Undef')
620 L = out_node.fields
621
622 return out_node
623
624 def _AbbreviatedTree(self, trav=None):
625 # type: (Optional[TraversalState]) -> hnode_t
626 trav = trav or TraversalState()
627 heap_id = id(self)
628 if heap_id in trav.seen:
629 return hnode.AlreadySeen(heap_id)
630 trav.seen[heap_id] = True
631 out_node = NewRecord('value__Undef')
632 L = out_node.fields
633 return out_node
634
635 def AbbreviatedTree(self, trav=None):
636 # type: (Optional[TraversalState]) -> hnode_t
637 return self._AbbreviatedTree(trav=trav)
638
639class value__Null(value_t):
640 _type_tag = 8
641 __slots__ = ()
642
643 def __init__(self, ):
644 # type: () -> None
645 pass
646
647 def PrettyTree(self, trav=None):
648 # type: (Optional[TraversalState]) -> hnode_t
649 trav = trav or TraversalState()
650 heap_id = id(self)
651 if heap_id in trav.seen:
652 return hnode.AlreadySeen(heap_id)
653 trav.seen[heap_id] = True
654 out_node = NewRecord('value__Null')
655 L = out_node.fields
656
657 return out_node
658
659 def _AbbreviatedTree(self, trav=None):
660 # type: (Optional[TraversalState]) -> hnode_t
661 trav = trav or TraversalState()
662 heap_id = id(self)
663 if heap_id in trav.seen:
664 return hnode.AlreadySeen(heap_id)
665 trav.seen[heap_id] = True
666 out_node = NewRecord('value__Null')
667 L = out_node.fields
668 return out_node
669
670 def AbbreviatedTree(self, trav=None):
671 # type: (Optional[TraversalState]) -> hnode_t
672 return self._AbbreviatedTree(trav=trav)
673
674class value(object):
675 Interrupted = value__Interrupted()
676
677 Stdin = value__Stdin()
678
679 Undef = value__Undef()
680
681 class Str(value_t):
682 _type_tag = 4
683 __slots__ = ('s',)
684
685 def __init__(self, s):
686 # type: (str) -> None
687 self.s = s
688
689 @staticmethod
690 def CreateNull(alloc_lists=False):
691 # type: () -> value.Str
692 return value.Str('')
693
694 def PrettyTree(self, trav=None):
695 # type: (Optional[TraversalState]) -> hnode_t
696 trav = trav or TraversalState()
697 heap_id = id(self)
698 if heap_id in trav.seen:
699 return hnode.AlreadySeen(heap_id)
700 trav.seen[heap_id] = True
701 out_node = NewRecord('value.Str')
702 L = out_node.fields
703
704 x0 = NewLeaf(self.s, color_e.StringConst)
705 L.append(Field('s', x0))
706
707 return out_node
708
709 def _AbbreviatedTree(self, trav=None):
710 # type: (Optional[TraversalState]) -> hnode_t
711 trav = trav or TraversalState()
712 heap_id = id(self)
713 if heap_id in trav.seen:
714 return hnode.AlreadySeen(heap_id)
715 trav.seen[heap_id] = True
716 out_node = NewRecord('value.Str')
717 L = out_node.fields
718 x0 = NewLeaf(self.s, color_e.StringConst)
719 L.append(Field('s', x0))
720
721 return out_node
722
723 def AbbreviatedTree(self, trav=None):
724 # type: (Optional[TraversalState]) -> hnode_t
725 return self._AbbreviatedTree(trav=trav)
726
727 class BashArray(value_t):
728 _type_tag = 5
729 __slots__ = ('strs',)
730
731 def __init__(self, strs):
732 # type: (List[str]) -> None
733 self.strs = strs
734
735 @staticmethod
736 def CreateNull(alloc_lists=False):
737 # type: () -> value.BashArray
738 return value.BashArray([] if alloc_lists else cast('List[str]', None))
739
740 def PrettyTree(self, trav=None):
741 # type: (Optional[TraversalState]) -> hnode_t
742 trav = trav or TraversalState()
743 heap_id = id(self)
744 if heap_id in trav.seen:
745 return hnode.AlreadySeen(heap_id)
746 trav.seen[heap_id] = True
747 out_node = NewRecord('value.BashArray')
748 L = out_node.fields
749
750 if self.strs is not None: # List
751 x0 = hnode.Array([])
752 for i0 in self.strs:
753 x0.children.append(NewLeaf(i0, color_e.StringConst))
754 L.append(Field('strs', x0))
755
756 return out_node
757
758 def _AbbreviatedTree(self, trav=None):
759 # type: (Optional[TraversalState]) -> hnode_t
760 trav = trav or TraversalState()
761 heap_id = id(self)
762 if heap_id in trav.seen:
763 return hnode.AlreadySeen(heap_id)
764 trav.seen[heap_id] = True
765 out_node = NewRecord('value.BashArray')
766 L = out_node.fields
767 if self.strs is not None: # List
768 x0 = hnode.Array([])
769 for i0 in self.strs:
770 x0.children.append(NewLeaf(i0, color_e.StringConst))
771 L.append(Field('strs', x0))
772
773 return out_node
774
775 def AbbreviatedTree(self, trav=None):
776 # type: (Optional[TraversalState]) -> hnode_t
777 return self._AbbreviatedTree(trav=trav)
778
779 class SparseArray(value_t):
780 _type_tag = 6
781 __slots__ = ('d', 'max_index')
782
783 def __init__(self, d, max_index):
784 # type: (Dict[mops.BigInt, str], mops.BigInt) -> None
785 self.d = d
786 self.max_index = max_index
787
788 @staticmethod
789 def CreateNull(alloc_lists=False):
790 # type: () -> value.SparseArray
791 return value.SparseArray(cast('Dict[mops.BigInt, str]', None), mops.BigInt(-1))
792
793 def PrettyTree(self, trav=None):
794 # type: (Optional[TraversalState]) -> hnode_t
795 trav = trav or TraversalState()
796 heap_id = id(self)
797 if heap_id in trav.seen:
798 return hnode.AlreadySeen(heap_id)
799 trav.seen[heap_id] = True
800 out_node = NewRecord('value.SparseArray')
801 L = out_node.fields
802
803 if self.d is not None: # Dict
804 m = hnode.Leaf("Dict", color_e.OtherConst)
805 x0 = hnode.Array([m])
806 for k0, v0 in self.d.iteritems():
807 x0.children.append(hnode.Leaf(mops.ToStr(k0), color_e.OtherConst))
808 x0.children.append(NewLeaf(v0, color_e.StringConst))
809 L.append(Field('d', x0))
810
811 x1 = hnode.Leaf(mops.ToStr(self.max_index), color_e.OtherConst)
812 L.append(Field('max_index', x1))
813
814 return out_node
815
816 def _AbbreviatedTree(self, trav=None):
817 # type: (Optional[TraversalState]) -> hnode_t
818 trav = trav or TraversalState()
819 heap_id = id(self)
820 if heap_id in trav.seen:
821 return hnode.AlreadySeen(heap_id)
822 trav.seen[heap_id] = True
823 out_node = NewRecord('value.SparseArray')
824 L = out_node.fields
825 if self.d is not None: # Dict
826 m = hnode.Leaf("Dict", color_e.OtherConst)
827 x0 = hnode.Array([m])
828 for k0, v0 in self.d.iteritems():
829 x0.children.append(hnode.Leaf(mops.ToStr(k0), color_e.OtherConst))
830 x0.children.append(NewLeaf(v0, color_e.StringConst))
831 L.append(Field('d', x0))
832
833 x1 = hnode.Leaf(mops.ToStr(self.max_index), color_e.OtherConst)
834 L.append(Field('max_index', x1))
835
836 return out_node
837
838 def AbbreviatedTree(self, trav=None):
839 # type: (Optional[TraversalState]) -> hnode_t
840 return self._AbbreviatedTree(trav=trav)
841
842 class BashAssoc(value_t):
843 _type_tag = 7
844 __slots__ = ('d',)
845
846 def __init__(self, d):
847 # type: (Dict[str, str]) -> None
848 self.d = d
849
850 @staticmethod
851 def CreateNull(alloc_lists=False):
852 # type: () -> value.BashAssoc
853 return value.BashAssoc(cast('Dict[str, str]', None))
854
855 def PrettyTree(self, trav=None):
856 # type: (Optional[TraversalState]) -> hnode_t
857 trav = trav or TraversalState()
858 heap_id = id(self)
859 if heap_id in trav.seen:
860 return hnode.AlreadySeen(heap_id)
861 trav.seen[heap_id] = True
862 out_node = NewRecord('value.BashAssoc')
863 L = out_node.fields
864
865 if self.d is not None: # Dict
866 m = hnode.Leaf("Dict", color_e.OtherConst)
867 x0 = hnode.Array([m])
868 for k0, v0 in self.d.iteritems():
869 x0.children.append(NewLeaf(k0, color_e.StringConst))
870 x0.children.append(NewLeaf(v0, color_e.StringConst))
871 L.append(Field('d', x0))
872
873 return out_node
874
875 def _AbbreviatedTree(self, trav=None):
876 # type: (Optional[TraversalState]) -> hnode_t
877 trav = trav or TraversalState()
878 heap_id = id(self)
879 if heap_id in trav.seen:
880 return hnode.AlreadySeen(heap_id)
881 trav.seen[heap_id] = True
882 out_node = NewRecord('value.BashAssoc')
883 L = out_node.fields
884 if self.d is not None: # Dict
885 m = hnode.Leaf("Dict", color_e.OtherConst)
886 x0 = hnode.Array([m])
887 for k0, v0 in self.d.iteritems():
888 x0.children.append(NewLeaf(k0, color_e.StringConst))
889 x0.children.append(NewLeaf(v0, color_e.StringConst))
890 L.append(Field('d', x0))
891
892 return out_node
893
894 def AbbreviatedTree(self, trav=None):
895 # type: (Optional[TraversalState]) -> hnode_t
896 return self._AbbreviatedTree(trav=trav)
897
898 Null = value__Null()
899
900 class Bool(value_t):
901 _type_tag = 9
902 __slots__ = ('b',)
903
904 def __init__(self, b):
905 # type: (bool) -> None
906 self.b = b
907
908 @staticmethod
909 def CreateNull(alloc_lists=False):
910 # type: () -> value.Bool
911 return value.Bool(False)
912
913 def PrettyTree(self, trav=None):
914 # type: (Optional[TraversalState]) -> hnode_t
915 trav = trav or TraversalState()
916 heap_id = id(self)
917 if heap_id in trav.seen:
918 return hnode.AlreadySeen(heap_id)
919 trav.seen[heap_id] = True
920 out_node = NewRecord('value.Bool')
921 L = out_node.fields
922
923 x0 = hnode.Leaf('T' if self.b else 'F', color_e.OtherConst)
924 L.append(Field('b', x0))
925
926 return out_node
927
928 def _AbbreviatedTree(self, trav=None):
929 # type: (Optional[TraversalState]) -> hnode_t
930 trav = trav or TraversalState()
931 heap_id = id(self)
932 if heap_id in trav.seen:
933 return hnode.AlreadySeen(heap_id)
934 trav.seen[heap_id] = True
935 out_node = NewRecord('value.Bool')
936 L = out_node.fields
937 x0 = hnode.Leaf('T' if self.b else 'F', color_e.OtherConst)
938 L.append(Field('b', x0))
939
940 return out_node
941
942 def AbbreviatedTree(self, trav=None):
943 # type: (Optional[TraversalState]) -> hnode_t
944 return self._AbbreviatedTree(trav=trav)
945
946 class Int(value_t):
947 _type_tag = 10
948 __slots__ = ('i',)
949
950 def __init__(self, i):
951 # type: (mops.BigInt) -> None
952 self.i = i
953
954 @staticmethod
955 def CreateNull(alloc_lists=False):
956 # type: () -> value.Int
957 return value.Int(mops.BigInt(-1))
958
959 def PrettyTree(self, trav=None):
960 # type: (Optional[TraversalState]) -> hnode_t
961 trav = trav or TraversalState()
962 heap_id = id(self)
963 if heap_id in trav.seen:
964 return hnode.AlreadySeen(heap_id)
965 trav.seen[heap_id] = True
966 out_node = NewRecord('value.Int')
967 L = out_node.fields
968
969 x0 = hnode.Leaf(mops.ToStr(self.i), color_e.OtherConst)
970 L.append(Field('i', x0))
971
972 return out_node
973
974 def _AbbreviatedTree(self, trav=None):
975 # type: (Optional[TraversalState]) -> hnode_t
976 trav = trav or TraversalState()
977 heap_id = id(self)
978 if heap_id in trav.seen:
979 return hnode.AlreadySeen(heap_id)
980 trav.seen[heap_id] = True
981 out_node = NewRecord('value.Int')
982 L = out_node.fields
983 x0 = hnode.Leaf(mops.ToStr(self.i), color_e.OtherConst)
984 L.append(Field('i', x0))
985
986 return out_node
987
988 def AbbreviatedTree(self, trav=None):
989 # type: (Optional[TraversalState]) -> hnode_t
990 return self._AbbreviatedTree(trav=trav)
991
992 class Float(value_t):
993 _type_tag = 11
994 __slots__ = ('f',)
995
996 def __init__(self, f):
997 # type: (float) -> None
998 self.f = f
999
1000 @staticmethod
1001 def CreateNull(alloc_lists=False):
1002 # type: () -> value.Float
1003 return value.Float(0.0)
1004
1005 def PrettyTree(self, trav=None):
1006 # type: (Optional[TraversalState]) -> hnode_t
1007 trav = trav or TraversalState()
1008 heap_id = id(self)
1009 if heap_id in trav.seen:
1010 return hnode.AlreadySeen(heap_id)
1011 trav.seen[heap_id] = True
1012 out_node = NewRecord('value.Float')
1013 L = out_node.fields
1014
1015 x0 = hnode.Leaf(str(self.f), color_e.OtherConst)
1016 L.append(Field('f', x0))
1017
1018 return out_node
1019
1020 def _AbbreviatedTree(self, trav=None):
1021 # type: (Optional[TraversalState]) -> hnode_t
1022 trav = trav or TraversalState()
1023 heap_id = id(self)
1024 if heap_id in trav.seen:
1025 return hnode.AlreadySeen(heap_id)
1026 trav.seen[heap_id] = True
1027 out_node = NewRecord('value.Float')
1028 L = out_node.fields
1029 x0 = hnode.Leaf(str(self.f), color_e.OtherConst)
1030 L.append(Field('f', x0))
1031
1032 return out_node
1033
1034 def AbbreviatedTree(self, trav=None):
1035 # type: (Optional[TraversalState]) -> hnode_t
1036 return self._AbbreviatedTree(trav=trav)
1037
1038 class List(value_t):
1039 _type_tag = 12
1040 __slots__ = ('items',)
1041
1042 def __init__(self, items):
1043 # type: (List[value_t]) -> None
1044 self.items = items
1045
1046 @staticmethod
1047 def CreateNull(alloc_lists=False):
1048 # type: () -> value.List
1049 return value.List([] if alloc_lists else cast('List[value_t]', None))
1050
1051 def PrettyTree(self, trav=None):
1052 # type: (Optional[TraversalState]) -> hnode_t
1053 trav = trav or TraversalState()
1054 heap_id = id(self)
1055 if heap_id in trav.seen:
1056 return hnode.AlreadySeen(heap_id)
1057 trav.seen[heap_id] = True
1058 out_node = NewRecord('value.List')
1059 L = out_node.fields
1060
1061 if self.items is not None: # List
1062 x0 = hnode.Array([])
1063 for i0 in self.items:
1064 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
1065 i0.PrettyTree(trav=trav))
1066 x0.children.append(h)
1067 L.append(Field('items', x0))
1068
1069 return out_node
1070
1071 def _AbbreviatedTree(self, trav=None):
1072 # type: (Optional[TraversalState]) -> hnode_t
1073 trav = trav or TraversalState()
1074 heap_id = id(self)
1075 if heap_id in trav.seen:
1076 return hnode.AlreadySeen(heap_id)
1077 trav.seen[heap_id] = True
1078 out_node = NewRecord('value.List')
1079 L = out_node.fields
1080 if self.items is not None: # List
1081 x0 = hnode.Array([])
1082 for i0 in self.items:
1083 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
1084 i0.AbbreviatedTree(trav=trav))
1085 x0.children.append(h)
1086 L.append(Field('items', x0))
1087
1088 return out_node
1089
1090 def AbbreviatedTree(self, trav=None):
1091 # type: (Optional[TraversalState]) -> hnode_t
1092 return self._AbbreviatedTree(trav=trav)
1093
1094 class Dict(value_t):
1095 _type_tag = 13
1096 __slots__ = ('d',)
1097
1098 def __init__(self, d):
1099 # type: (Dict[str, value_t]) -> None
1100 self.d = d
1101
1102 @staticmethod
1103 def CreateNull(alloc_lists=False):
1104 # type: () -> value.Dict
1105 return value.Dict(cast('Dict[str, value_t]', None))
1106
1107 def PrettyTree(self, trav=None):
1108 # type: (Optional[TraversalState]) -> hnode_t
1109 trav = trav or TraversalState()
1110 heap_id = id(self)
1111 if heap_id in trav.seen:
1112 return hnode.AlreadySeen(heap_id)
1113 trav.seen[heap_id] = True
1114 out_node = NewRecord('value.Dict')
1115 L = out_node.fields
1116
1117 if self.d is not None: # Dict
1118 m = hnode.Leaf("Dict", color_e.OtherConst)
1119 x0 = hnode.Array([m])
1120 for k0, v0 in self.d.iteritems():
1121 x0.children.append(NewLeaf(k0, color_e.StringConst))
1122 x0.children.append(v0.PrettyTree(trav=trav))
1123 L.append(Field('d', x0))
1124
1125 return out_node
1126
1127 def _AbbreviatedTree(self, trav=None):
1128 # type: (Optional[TraversalState]) -> hnode_t
1129 trav = trav or TraversalState()
1130 heap_id = id(self)
1131 if heap_id in trav.seen:
1132 return hnode.AlreadySeen(heap_id)
1133 trav.seen[heap_id] = True
1134 out_node = NewRecord('value.Dict')
1135 L = out_node.fields
1136 if self.d is not None: # Dict
1137 m = hnode.Leaf("Dict", color_e.OtherConst)
1138 x0 = hnode.Array([m])
1139 for k0, v0 in self.d.iteritems():
1140 x0.children.append(NewLeaf(k0, color_e.StringConst))
1141 x0.children.append(v0.AbbreviatedTree(trav=trav))
1142 L.append(Field('d', x0))
1143
1144 return out_node
1145
1146 def AbbreviatedTree(self, trav=None):
1147 # type: (Optional[TraversalState]) -> hnode_t
1148 return self._AbbreviatedTree(trav=trav)
1149
1150 class Eggex(value_t):
1151 _type_tag = 15
1152 __slots__ = ('spliced', 'canonical_flags', 'convert_funcs', 'convert_toks',
1153 'as_ere', 'capture_names')
1154
1155 def __init__(self, spliced, canonical_flags, convert_funcs, convert_toks,
1156 as_ere, capture_names):
1157 # type: (re_t, str, List[Optional[value_t]], List[Optional[Token]], Optional[str], List[Optional[str]]) -> None
1158 self.spliced = spliced
1159 self.canonical_flags = canonical_flags
1160 self.convert_funcs = convert_funcs
1161 self.convert_toks = convert_toks
1162 self.as_ere = as_ere
1163 self.capture_names = capture_names
1164
1165 @staticmethod
1166 def CreateNull(alloc_lists=False):
1167 # type: () -> value.Eggex
1168 return value.Eggex(cast(re_t, None), '', [] if alloc_lists else cast('List[Optional[value_t]]', None), [] if alloc_lists else cast('List[Optional[Token]]', None), cast('Optional[str]', None), [] if alloc_lists else cast('List[Optional[str]]', None))
1169
1170 def PrettyTree(self, trav=None):
1171 # type: (Optional[TraversalState]) -> hnode_t
1172 trav = trav or TraversalState()
1173 heap_id = id(self)
1174 if heap_id in trav.seen:
1175 return hnode.AlreadySeen(heap_id)
1176 trav.seen[heap_id] = True
1177 out_node = NewRecord('value.Eggex')
1178 L = out_node.fields
1179
1180 assert self.spliced is not None
1181 x0 = self.spliced.PrettyTree(trav=trav)
1182 L.append(Field('spliced', x0))
1183
1184 x1 = NewLeaf(self.canonical_flags, color_e.StringConst)
1185 L.append(Field('canonical_flags', x1))
1186
1187 if self.convert_funcs is not None: # List
1188 x2 = hnode.Array([])
1189 for i2 in self.convert_funcs:
1190 h = (hnode.Leaf("_", color_e.OtherConst) if i2 is None else
1191 i2.PrettyTree(trav=trav))
1192 x2.children.append(h)
1193 L.append(Field('convert_funcs', x2))
1194
1195 if self.convert_toks is not None: # List
1196 x3 = hnode.Array([])
1197 for i3 in self.convert_toks:
1198 h = (hnode.Leaf("_", color_e.OtherConst) if i3 is None else
1199 i3.PrettyTree(trav=trav))
1200 x3.children.append(h)
1201 L.append(Field('convert_toks', x3))
1202
1203 if self.as_ere is not None: # Optional
1204 x4 = NewLeaf(self.as_ere, color_e.StringConst)
1205 L.append(Field('as_ere', x4))
1206
1207 if self.capture_names is not None: # List
1208 x5 = hnode.Array([])
1209 for i5 in self.capture_names:
1210 x5.children.append(NewLeaf(i5, color_e.StringConst))
1211 L.append(Field('capture_names', x5))
1212
1213 return out_node
1214
1215 def _AbbreviatedTree(self, trav=None):
1216 # type: (Optional[TraversalState]) -> hnode_t
1217 trav = trav or TraversalState()
1218 heap_id = id(self)
1219 if heap_id in trav.seen:
1220 return hnode.AlreadySeen(heap_id)
1221 trav.seen[heap_id] = True
1222 out_node = NewRecord('value.Eggex')
1223 L = out_node.fields
1224 assert self.spliced is not None
1225 x0 = self.spliced.AbbreviatedTree(trav=trav)
1226 L.append(Field('spliced', x0))
1227
1228 x1 = NewLeaf(self.canonical_flags, color_e.StringConst)
1229 L.append(Field('canonical_flags', x1))
1230
1231 if self.convert_funcs is not None: # List
1232 x2 = hnode.Array([])
1233 for i2 in self.convert_funcs:
1234 h = (hnode.Leaf("_", color_e.OtherConst) if i2 is None else
1235 i2.AbbreviatedTree(trav=trav))
1236 x2.children.append(h)
1237 L.append(Field('convert_funcs', x2))
1238
1239 if self.convert_toks is not None: # List
1240 x3 = hnode.Array([])
1241 for i3 in self.convert_toks:
1242 h = (hnode.Leaf("_", color_e.OtherConst) if i3 is None else
1243 i3.AbbreviatedTree(trav=trav))
1244 x3.children.append(h)
1245 L.append(Field('convert_toks', x3))
1246
1247 if self.as_ere is not None: # Optional
1248 x4 = NewLeaf(self.as_ere, color_e.StringConst)
1249 L.append(Field('as_ere', x4))
1250
1251 if self.capture_names is not None: # List
1252 x5 = hnode.Array([])
1253 for i5 in self.capture_names:
1254 x5.children.append(NewLeaf(i5, color_e.StringConst))
1255 L.append(Field('capture_names', x5))
1256
1257 return out_node
1258
1259 def AbbreviatedTree(self, trav=None):
1260 # type: (Optional[TraversalState]) -> hnode_t
1261 return self._AbbreviatedTree(trav=trav)
1262
1263 class Expr(value_t):
1264 _type_tag = 17
1265 __slots__ = ('e',)
1266
1267 def __init__(self, e):
1268 # type: (expr_t) -> None
1269 self.e = e
1270
1271 @staticmethod
1272 def CreateNull(alloc_lists=False):
1273 # type: () -> value.Expr
1274 return value.Expr(cast(expr_t, None))
1275
1276 def PrettyTree(self, trav=None):
1277 # type: (Optional[TraversalState]) -> hnode_t
1278 trav = trav or TraversalState()
1279 heap_id = id(self)
1280 if heap_id in trav.seen:
1281 return hnode.AlreadySeen(heap_id)
1282 trav.seen[heap_id] = True
1283 out_node = NewRecord('value.Expr')
1284 L = out_node.fields
1285
1286 assert self.e is not None
1287 x0 = self.e.PrettyTree(trav=trav)
1288 L.append(Field('e', x0))
1289
1290 return out_node
1291
1292 def _AbbreviatedTree(self, trav=None):
1293 # type: (Optional[TraversalState]) -> hnode_t
1294 trav = trav or TraversalState()
1295 heap_id = id(self)
1296 if heap_id in trav.seen:
1297 return hnode.AlreadySeen(heap_id)
1298 trav.seen[heap_id] = True
1299 out_node = NewRecord('value.Expr')
1300 L = out_node.fields
1301 assert self.e is not None
1302 x0 = self.e.AbbreviatedTree(trav=trav)
1303 L.append(Field('e', x0))
1304
1305 return out_node
1306
1307 def AbbreviatedTree(self, trav=None):
1308 # type: (Optional[TraversalState]) -> hnode_t
1309 return self._AbbreviatedTree(trav=trav)
1310
1311 class Command(value_t):
1312 _type_tag = 18
1313 __slots__ = ('c',)
1314
1315 def __init__(self, c):
1316 # type: (command_t) -> None
1317 self.c = c
1318
1319 @staticmethod
1320 def CreateNull(alloc_lists=False):
1321 # type: () -> value.Command
1322 return value.Command(cast(command_t, None))
1323
1324 def PrettyTree(self, trav=None):
1325 # type: (Optional[TraversalState]) -> hnode_t
1326 trav = trav or TraversalState()
1327 heap_id = id(self)
1328 if heap_id in trav.seen:
1329 return hnode.AlreadySeen(heap_id)
1330 trav.seen[heap_id] = True
1331 out_node = NewRecord('value.Command')
1332 L = out_node.fields
1333
1334 assert self.c is not None
1335 x0 = self.c.PrettyTree(trav=trav)
1336 L.append(Field('c', x0))
1337
1338 return out_node
1339
1340 def _AbbreviatedTree(self, trav=None):
1341 # type: (Optional[TraversalState]) -> hnode_t
1342 trav = trav or TraversalState()
1343 heap_id = id(self)
1344 if heap_id in trav.seen:
1345 return hnode.AlreadySeen(heap_id)
1346 trav.seen[heap_id] = True
1347 out_node = NewRecord('value.Command')
1348 L = out_node.fields
1349 assert self.c is not None
1350 x0 = self.c.AbbreviatedTree(trav=trav)
1351 L.append(Field('c', x0))
1352
1353 return out_node
1354
1355 def AbbreviatedTree(self, trav=None):
1356 # type: (Optional[TraversalState]) -> hnode_t
1357 return self._AbbreviatedTree(trav=trav)
1358
1359 class Block(value_t):
1360 _type_tag = 19
1361 __slots__ = ('block',)
1362
1363 def __init__(self, block):
1364 # type: (LiteralBlock) -> None
1365 self.block = block
1366
1367 @staticmethod
1368 def CreateNull(alloc_lists=False):
1369 # type: () -> value.Block
1370 return value.Block(cast(LiteralBlock, None))
1371
1372 def PrettyTree(self, trav=None):
1373 # type: (Optional[TraversalState]) -> hnode_t
1374 trav = trav or TraversalState()
1375 heap_id = id(self)
1376 if heap_id in trav.seen:
1377 return hnode.AlreadySeen(heap_id)
1378 trav.seen[heap_id] = True
1379 out_node = NewRecord('value.Block')
1380 L = out_node.fields
1381
1382 assert self.block is not None
1383 x0 = self.block.PrettyTree(trav=trav)
1384 L.append(Field('block', x0))
1385
1386 return out_node
1387
1388 def _AbbreviatedTree(self, trav=None):
1389 # type: (Optional[TraversalState]) -> hnode_t
1390 trav = trav or TraversalState()
1391 heap_id = id(self)
1392 if heap_id in trav.seen:
1393 return hnode.AlreadySeen(heap_id)
1394 trav.seen[heap_id] = True
1395 out_node = NewRecord('value.Block')
1396 L = out_node.fields
1397 assert self.block is not None
1398 x0 = self.block.AbbreviatedTree(trav=trav)
1399 L.append(Field('block', x0))
1400
1401 return out_node
1402
1403 def AbbreviatedTree(self, trav=None):
1404 # type: (Optional[TraversalState]) -> hnode_t
1405 return self._AbbreviatedTree(trav=trav)
1406
1407 class Place(value_t):
1408 _type_tag = 20
1409 __slots__ = ('lval', 'frame')
1410
1411 def __init__(self, lval, frame):
1412 # type: (y_lvalue_t, Dict[str, Cell]) -> None
1413 self.lval = lval
1414 self.frame = frame
1415
1416 @staticmethod
1417 def CreateNull(alloc_lists=False):
1418 # type: () -> value.Place
1419 return value.Place(cast(y_lvalue_t, None), cast('Dict[str, Cell]', None))
1420
1421 def PrettyTree(self, trav=None):
1422 # type: (Optional[TraversalState]) -> hnode_t
1423 trav = trav or TraversalState()
1424 heap_id = id(self)
1425 if heap_id in trav.seen:
1426 return hnode.AlreadySeen(heap_id)
1427 trav.seen[heap_id] = True
1428 out_node = NewRecord('value.Place')
1429 L = out_node.fields
1430
1431 assert self.lval is not None
1432 x0 = self.lval.PrettyTree(trav=trav)
1433 L.append(Field('lval', x0))
1434
1435 if self.frame is not None: # Dict
1436 m = hnode.Leaf("Dict", color_e.OtherConst)
1437 x1 = hnode.Array([m])
1438 for k1, v1 in self.frame.iteritems():
1439 x1.children.append(NewLeaf(k1, color_e.StringConst))
1440 x1.children.append(v1.PrettyTree(trav=trav))
1441 L.append(Field('frame', x1))
1442
1443 return out_node
1444
1445 def _AbbreviatedTree(self, trav=None):
1446 # type: (Optional[TraversalState]) -> hnode_t
1447 trav = trav or TraversalState()
1448 heap_id = id(self)
1449 if heap_id in trav.seen:
1450 return hnode.AlreadySeen(heap_id)
1451 trav.seen[heap_id] = True
1452 out_node = NewRecord('value.Place')
1453 L = out_node.fields
1454 assert self.lval is not None
1455 x0 = self.lval.AbbreviatedTree(trav=trav)
1456 L.append(Field('lval', x0))
1457
1458 if self.frame is not None: # Dict
1459 m = hnode.Leaf("Dict", color_e.OtherConst)
1460 x1 = hnode.Array([m])
1461 for k1, v1 in self.frame.iteritems():
1462 x1.children.append(NewLeaf(k1, color_e.StringConst))
1463 x1.children.append(v1.AbbreviatedTree(trav=trav))
1464 L.append(Field('frame', x1))
1465
1466 return out_node
1467
1468 def AbbreviatedTree(self, trav=None):
1469 # type: (Optional[TraversalState]) -> hnode_t
1470 return self._AbbreviatedTree(trav=trav)
1471
1472 class Module(value_t):
1473 _type_tag = 21
1474 __slots__ = ('defs',)
1475
1476 def __init__(self, defs):
1477 # type: (Dict[str, value_t]) -> None
1478 self.defs = defs
1479
1480 @staticmethod
1481 def CreateNull(alloc_lists=False):
1482 # type: () -> value.Module
1483 return value.Module(cast('Dict[str, value_t]', None))
1484
1485 def PrettyTree(self, trav=None):
1486 # type: (Optional[TraversalState]) -> hnode_t
1487 trav = trav or TraversalState()
1488 heap_id = id(self)
1489 if heap_id in trav.seen:
1490 return hnode.AlreadySeen(heap_id)
1491 trav.seen[heap_id] = True
1492 out_node = NewRecord('value.Module')
1493 L = out_node.fields
1494
1495 if self.defs is not None: # Dict
1496 m = hnode.Leaf("Dict", color_e.OtherConst)
1497 x0 = hnode.Array([m])
1498 for k0, v0 in self.defs.iteritems():
1499 x0.children.append(NewLeaf(k0, color_e.StringConst))
1500 x0.children.append(v0.PrettyTree(trav=trav))
1501 L.append(Field('defs', x0))
1502
1503 return out_node
1504
1505 def _AbbreviatedTree(self, trav=None):
1506 # type: (Optional[TraversalState]) -> hnode_t
1507 trav = trav or TraversalState()
1508 heap_id = id(self)
1509 if heap_id in trav.seen:
1510 return hnode.AlreadySeen(heap_id)
1511 trav.seen[heap_id] = True
1512 out_node = NewRecord('value.Module')
1513 L = out_node.fields
1514 if self.defs is not None: # Dict
1515 m = hnode.Leaf("Dict", color_e.OtherConst)
1516 x0 = hnode.Array([m])
1517 for k0, v0 in self.defs.iteritems():
1518 x0.children.append(NewLeaf(k0, color_e.StringConst))
1519 x0.children.append(v0.AbbreviatedTree(trav=trav))
1520 L.append(Field('defs', x0))
1521
1522 return out_node
1523
1524 def AbbreviatedTree(self, trav=None):
1525 # type: (Optional[TraversalState]) -> hnode_t
1526 return self._AbbreviatedTree(trav=trav)
1527
1528 class BuiltinFunc(value_t):
1529 _type_tag = 22
1530 __slots__ = ('callable',)
1531
1532 def __init__(self, callable):
1533 # type: (Any) -> None
1534 self.callable = callable
1535
1536 @staticmethod
1537 def CreateNull(alloc_lists=False):
1538 # type: () -> value.BuiltinFunc
1539 return value.BuiltinFunc(cast(Any, None))
1540
1541 def PrettyTree(self, trav=None):
1542 # type: (Optional[TraversalState]) -> hnode_t
1543 trav = trav or TraversalState()
1544 heap_id = id(self)
1545 if heap_id in trav.seen:
1546 return hnode.AlreadySeen(heap_id)
1547 trav.seen[heap_id] = True
1548 out_node = NewRecord('value.BuiltinFunc')
1549 L = out_node.fields
1550
1551 x0 = hnode.External(self.callable)
1552 L.append(Field('callable', x0))
1553
1554 return out_node
1555
1556 def _AbbreviatedTree(self, trav=None):
1557 # type: (Optional[TraversalState]) -> hnode_t
1558 trav = trav or TraversalState()
1559 heap_id = id(self)
1560 if heap_id in trav.seen:
1561 return hnode.AlreadySeen(heap_id)
1562 trav.seen[heap_id] = True
1563 out_node = NewRecord('value.BuiltinFunc')
1564 L = out_node.fields
1565 x0 = hnode.External(self.callable)
1566 L.append(Field('callable', x0))
1567
1568 return out_node
1569
1570 def AbbreviatedTree(self, trav=None):
1571 # type: (Optional[TraversalState]) -> hnode_t
1572 return self._AbbreviatedTree(trav=trav)
1573
1574 class BoundFunc(value_t):
1575 _type_tag = 23
1576 __slots__ = ('me', 'func')
1577
1578 def __init__(self, me, func):
1579 # type: (value_t, value_t) -> None
1580 self.me = me
1581 self.func = func
1582
1583 @staticmethod
1584 def CreateNull(alloc_lists=False):
1585 # type: () -> value.BoundFunc
1586 return value.BoundFunc(cast(value_t, None), cast(value_t, None))
1587
1588 def PrettyTree(self, trav=None):
1589 # type: (Optional[TraversalState]) -> hnode_t
1590 trav = trav or TraversalState()
1591 heap_id = id(self)
1592 if heap_id in trav.seen:
1593 return hnode.AlreadySeen(heap_id)
1594 trav.seen[heap_id] = True
1595 out_node = NewRecord('value.BoundFunc')
1596 L = out_node.fields
1597
1598 assert self.me is not None
1599 x0 = self.me.PrettyTree(trav=trav)
1600 L.append(Field('me', x0))
1601
1602 assert self.func is not None
1603 x1 = self.func.PrettyTree(trav=trav)
1604 L.append(Field('func', x1))
1605
1606 return out_node
1607
1608 def _AbbreviatedTree(self, trav=None):
1609 # type: (Optional[TraversalState]) -> hnode_t
1610 trav = trav or TraversalState()
1611 heap_id = id(self)
1612 if heap_id in trav.seen:
1613 return hnode.AlreadySeen(heap_id)
1614 trav.seen[heap_id] = True
1615 out_node = NewRecord('value.BoundFunc')
1616 L = out_node.fields
1617 assert self.me is not None
1618 x0 = self.me.AbbreviatedTree(trav=trav)
1619 L.append(Field('me', x0))
1620
1621 assert self.func is not None
1622 x1 = self.func.AbbreviatedTree(trav=trav)
1623 L.append(Field('func', x1))
1624
1625 return out_node
1626
1627 def AbbreviatedTree(self, trav=None):
1628 # type: (Optional[TraversalState]) -> hnode_t
1629 return self._AbbreviatedTree(trav=trav)
1630
1631 class Proc(value_t):
1632 _type_tag = 24
1633 __slots__ = ('name', 'name_tok', 'sig', 'body', 'defaults', 'sh_compat')
1634
1635 def __init__(self, name, name_tok, sig, body, defaults, sh_compat):
1636 # type: (str, Token, proc_sig_t, command_t, Optional[ProcDefaults], bool) -> None
1637 self.name = name
1638 self.name_tok = name_tok
1639 self.sig = sig
1640 self.body = body
1641 self.defaults = defaults
1642 self.sh_compat = sh_compat
1643
1644 @staticmethod
1645 def CreateNull(alloc_lists=False):
1646 # type: () -> value.Proc
1647 return value.Proc('', cast(Token, None), cast(proc_sig_t, None), cast(command_t, None), cast('Optional[ProcDefaults]', None), False)
1648
1649 def PrettyTree(self, trav=None):
1650 # type: (Optional[TraversalState]) -> hnode_t
1651 trav = trav or TraversalState()
1652 heap_id = id(self)
1653 if heap_id in trav.seen:
1654 return hnode.AlreadySeen(heap_id)
1655 trav.seen[heap_id] = True
1656 out_node = NewRecord('value.Proc')
1657 L = out_node.fields
1658
1659 x0 = NewLeaf(self.name, color_e.StringConst)
1660 L.append(Field('name', x0))
1661
1662 assert self.name_tok is not None
1663 x1 = self.name_tok.PrettyTree(trav=trav)
1664 L.append(Field('name_tok', x1))
1665
1666 assert self.sig is not None
1667 x2 = self.sig.PrettyTree(trav=trav)
1668 L.append(Field('sig', x2))
1669
1670 assert self.body is not None
1671 x3 = self.body.PrettyTree(trav=trav)
1672 L.append(Field('body', x3))
1673
1674 if self.defaults is not None: # Optional
1675 x4 = self.defaults.PrettyTree(trav=trav)
1676 L.append(Field('defaults', x4))
1677
1678 x5 = hnode.Leaf('T' if self.sh_compat else 'F', color_e.OtherConst)
1679 L.append(Field('sh_compat', x5))
1680
1681 return out_node
1682
1683 def _AbbreviatedTree(self, trav=None):
1684 # type: (Optional[TraversalState]) -> hnode_t
1685 trav = trav or TraversalState()
1686 heap_id = id(self)
1687 if heap_id in trav.seen:
1688 return hnode.AlreadySeen(heap_id)
1689 trav.seen[heap_id] = True
1690 out_node = NewRecord('value.Proc')
1691 L = out_node.fields
1692 x0 = NewLeaf(self.name, color_e.StringConst)
1693 L.append(Field('name', x0))
1694
1695 assert self.name_tok is not None
1696 x1 = self.name_tok.AbbreviatedTree(trav=trav)
1697 L.append(Field('name_tok', x1))
1698
1699 assert self.sig is not None
1700 x2 = self.sig.AbbreviatedTree(trav=trav)
1701 L.append(Field('sig', x2))
1702
1703 assert self.body is not None
1704 x3 = self.body.AbbreviatedTree(trav=trav)
1705 L.append(Field('body', x3))
1706
1707 if self.defaults is not None: # Optional
1708 x4 = self.defaults.AbbreviatedTree(trav=trav)
1709 L.append(Field('defaults', x4))
1710
1711 x5 = hnode.Leaf('T' if self.sh_compat else 'F', color_e.OtherConst)
1712 L.append(Field('sh_compat', x5))
1713
1714 return out_node
1715
1716 def AbbreviatedTree(self, trav=None):
1717 # type: (Optional[TraversalState]) -> hnode_t
1718 return self._AbbreviatedTree(trav=trav)
1719
1720 class Func(value_t):
1721 _type_tag = 25
1722 __slots__ = ('name', 'parsed', 'pos_defaults', 'named_defaults', 'module_')
1723
1724 def __init__(self, name, parsed, pos_defaults, named_defaults, module_):
1725 # type: (str, Func, List[value_t], Dict[str, value_t], Optional[Dict[str, Cell]]) -> None
1726 self.name = name
1727 self.parsed = parsed
1728 self.pos_defaults = pos_defaults
1729 self.named_defaults = named_defaults
1730 self.module_ = module_
1731
1732 @staticmethod
1733 def CreateNull(alloc_lists=False):
1734 # type: () -> value.Func
1735 return value.Func('', cast(Func, None), [] if alloc_lists else cast('List[value_t]', None), cast('Dict[str, value_t]', None), cast('Optional[Dict[str, Cell]]', None))
1736
1737 def PrettyTree(self, trav=None):
1738 # type: (Optional[TraversalState]) -> hnode_t
1739 trav = trav or TraversalState()
1740 heap_id = id(self)
1741 if heap_id in trav.seen:
1742 return hnode.AlreadySeen(heap_id)
1743 trav.seen[heap_id] = True
1744 out_node = NewRecord('value.Func')
1745 L = out_node.fields
1746
1747 x0 = NewLeaf(self.name, color_e.StringConst)
1748 L.append(Field('name', x0))
1749
1750 assert self.parsed is not None
1751 x1 = self.parsed.PrettyTree(trav=trav)
1752 L.append(Field('parsed', x1))
1753
1754 if self.pos_defaults is not None: # List
1755 x2 = hnode.Array([])
1756 for i2 in self.pos_defaults:
1757 h = (hnode.Leaf("_", color_e.OtherConst) if i2 is None else
1758 i2.PrettyTree(trav=trav))
1759 x2.children.append(h)
1760 L.append(Field('pos_defaults', x2))
1761
1762 if self.named_defaults is not None: # Dict
1763 m = hnode.Leaf("Dict", color_e.OtherConst)
1764 x3 = hnode.Array([m])
1765 for k3, v3 in self.named_defaults.iteritems():
1766 x3.children.append(NewLeaf(k3, color_e.StringConst))
1767 x3.children.append(v3.PrettyTree(trav=trav))
1768 L.append(Field('named_defaults', x3))
1769
1770 if self.module_ is not None: # Dict
1771 m = hnode.Leaf("Dict", color_e.OtherConst)
1772 x4 = hnode.Array([m])
1773 for k4, v4 in self.module_.iteritems():
1774 x4.children.append(NewLeaf(k4, color_e.StringConst))
1775 x4.children.append(v4.PrettyTree(trav=trav))
1776 L.append(Field('module_', x4))
1777
1778 return out_node
1779
1780 def _AbbreviatedTree(self, trav=None):
1781 # type: (Optional[TraversalState]) -> hnode_t
1782 trav = trav or TraversalState()
1783 heap_id = id(self)
1784 if heap_id in trav.seen:
1785 return hnode.AlreadySeen(heap_id)
1786 trav.seen[heap_id] = True
1787 out_node = NewRecord('value.Func')
1788 L = out_node.fields
1789 x0 = NewLeaf(self.name, color_e.StringConst)
1790 L.append(Field('name', x0))
1791
1792 assert self.parsed is not None
1793 x1 = self.parsed.AbbreviatedTree(trav=trav)
1794 L.append(Field('parsed', x1))
1795
1796 if self.pos_defaults is not None: # List
1797 x2 = hnode.Array([])
1798 for i2 in self.pos_defaults:
1799 h = (hnode.Leaf("_", color_e.OtherConst) if i2 is None else
1800 i2.AbbreviatedTree(trav=trav))
1801 x2.children.append(h)
1802 L.append(Field('pos_defaults', x2))
1803
1804 if self.named_defaults is not None: # Dict
1805 m = hnode.Leaf("Dict", color_e.OtherConst)
1806 x3 = hnode.Array([m])
1807 for k3, v3 in self.named_defaults.iteritems():
1808 x3.children.append(NewLeaf(k3, color_e.StringConst))
1809 x3.children.append(v3.AbbreviatedTree(trav=trav))
1810 L.append(Field('named_defaults', x3))
1811
1812 if self.module_ is not None: # Dict
1813 m = hnode.Leaf("Dict", color_e.OtherConst)
1814 x4 = hnode.Array([m])
1815 for k4, v4 in self.module_.iteritems():
1816 x4.children.append(NewLeaf(k4, color_e.StringConst))
1817 x4.children.append(v4.AbbreviatedTree(trav=trav))
1818 L.append(Field('module_', x4))
1819
1820 return out_node
1821
1822 def AbbreviatedTree(self, trav=None):
1823 # type: (Optional[TraversalState]) -> hnode_t
1824 return self._AbbreviatedTree(trav=trav)
1825
1826 class Range(value_t):
1827 _type_tag = 26
1828 __slots__ = ('lower', 'upper')
1829
1830 def __init__(self, lower, upper):
1831 # type: (int, int) -> None
1832 self.lower = lower
1833 self.upper = upper
1834
1835 @staticmethod
1836 def CreateNull(alloc_lists=False):
1837 # type: () -> value.Range
1838 return value.Range(-1, -1)
1839
1840 def PrettyTree(self, trav=None):
1841 # type: (Optional[TraversalState]) -> hnode_t
1842 trav = trav or TraversalState()
1843 heap_id = id(self)
1844 if heap_id in trav.seen:
1845 return hnode.AlreadySeen(heap_id)
1846 trav.seen[heap_id] = True
1847 out_node = NewRecord('value.Range')
1848 L = out_node.fields
1849
1850 x0 = hnode.Leaf(str(self.lower), color_e.OtherConst)
1851 L.append(Field('lower', x0))
1852
1853 x1 = hnode.Leaf(str(self.upper), color_e.OtherConst)
1854 L.append(Field('upper', x1))
1855
1856 return out_node
1857
1858 def _AbbreviatedTree(self, trav=None):
1859 # type: (Optional[TraversalState]) -> hnode_t
1860 trav = trav or TraversalState()
1861 heap_id = id(self)
1862 if heap_id in trav.seen:
1863 return hnode.AlreadySeen(heap_id)
1864 trav.seen[heap_id] = True
1865 out_node = NewRecord('value.Range')
1866 L = out_node.fields
1867 x0 = hnode.Leaf(str(self.lower), color_e.OtherConst)
1868 L.append(Field('lower', x0))
1869
1870 x1 = hnode.Leaf(str(self.upper), color_e.OtherConst)
1871 L.append(Field('upper', x1))
1872
1873 return out_node
1874
1875 def AbbreviatedTree(self, trav=None):
1876 # type: (Optional[TraversalState]) -> hnode_t
1877 return self._AbbreviatedTree(trav=trav)
1878
1879 class Slice(value_t):
1880 _type_tag = 27
1881 __slots__ = ('lower', 'upper')
1882
1883 def __init__(self, lower, upper):
1884 # type: (Optional[IntBox], Optional[IntBox]) -> None
1885 self.lower = lower
1886 self.upper = upper
1887
1888 @staticmethod
1889 def CreateNull(alloc_lists=False):
1890 # type: () -> value.Slice
1891 return value.Slice(cast('Optional[IntBox]', None), cast('Optional[IntBox]', None))
1892
1893 def PrettyTree(self, trav=None):
1894 # type: (Optional[TraversalState]) -> hnode_t
1895 trav = trav or TraversalState()
1896 heap_id = id(self)
1897 if heap_id in trav.seen:
1898 return hnode.AlreadySeen(heap_id)
1899 trav.seen[heap_id] = True
1900 out_node = NewRecord('value.Slice')
1901 L = out_node.fields
1902
1903 if self.lower is not None: # Optional
1904 x0 = self.lower.PrettyTree(trav=trav)
1905 L.append(Field('lower', x0))
1906
1907 if self.upper is not None: # Optional
1908 x1 = self.upper.PrettyTree(trav=trav)
1909 L.append(Field('upper', x1))
1910
1911 return out_node
1912
1913 def _AbbreviatedTree(self, trav=None):
1914 # type: (Optional[TraversalState]) -> hnode_t
1915 trav = trav or TraversalState()
1916 heap_id = id(self)
1917 if heap_id in trav.seen:
1918 return hnode.AlreadySeen(heap_id)
1919 trav.seen[heap_id] = True
1920 out_node = NewRecord('value.Slice')
1921 L = out_node.fields
1922 if self.lower is not None: # Optional
1923 x0 = self.lower.AbbreviatedTree(trav=trav)
1924 L.append(Field('lower', x0))
1925
1926 if self.upper is not None: # Optional
1927 x1 = self.upper.AbbreviatedTree(trav=trav)
1928 L.append(Field('upper', x1))
1929
1930 return out_node
1931
1932 def AbbreviatedTree(self, trav=None):
1933 # type: (Optional[TraversalState]) -> hnode_t
1934 return self._AbbreviatedTree(trav=trav)
1935
1936 pass
1937
1938class IntBox(pybase.CompoundObj):
1939 _type_tag = 64
1940 __slots__ = ('i',)
1941
1942 def __init__(self, i):
1943 # type: (int) -> None
1944 self.i = i
1945
1946 @staticmethod
1947 def CreateNull(alloc_lists=False):
1948 # type: () -> IntBox
1949 return IntBox(-1)
1950
1951 def PrettyTree(self, trav=None):
1952 # type: (Optional[TraversalState]) -> hnode_t
1953 trav = trav or TraversalState()
1954 heap_id = id(self)
1955 if heap_id in trav.seen:
1956 return hnode.AlreadySeen(heap_id)
1957 trav.seen[heap_id] = True
1958 out_node = NewRecord('IntBox')
1959 L = out_node.fields
1960
1961 x0 = hnode.Leaf(str(self.i), color_e.OtherConst)
1962 L.append(Field('i', x0))
1963
1964 return out_node
1965
1966 def _AbbreviatedTree(self, trav=None):
1967 # type: (Optional[TraversalState]) -> hnode_t
1968 trav = trav or TraversalState()
1969 heap_id = id(self)
1970 if heap_id in trav.seen:
1971 return hnode.AlreadySeen(heap_id)
1972 trav.seen[heap_id] = True
1973 out_node = NewRecord('IntBox')
1974 L = out_node.fields
1975 x0 = hnode.Leaf(str(self.i), color_e.OtherConst)
1976 L.append(Field('i', x0))
1977
1978 return out_node
1979
1980 def AbbreviatedTree(self, trav=None):
1981 # type: (Optional[TraversalState]) -> hnode_t
1982 return self._AbbreviatedTree(trav=trav)
1983
1984class ProcDefaults(pybase.CompoundObj):
1985 _type_tag = 65
1986 __slots__ = ('for_word', 'for_typed', 'for_named', 'for_block')
1987
1988 def __init__(self, for_word, for_typed, for_named, for_block):
1989 # type: (Optional[List[value_t]], Optional[List[value_t]], Optional[Dict[str, value_t]], Optional[value_t]) -> None
1990 self.for_word = for_word
1991 self.for_typed = for_typed
1992 self.for_named = for_named
1993 self.for_block = for_block
1994
1995 @staticmethod
1996 def CreateNull(alloc_lists=False):
1997 # type: () -> ProcDefaults
1998 return ProcDefaults(cast('Optional[List[value_t]]', None), cast('Optional[List[value_t]]', None), cast('Optional[Dict[str, value_t]]', None), cast('Optional[value_t]', None))
1999
2000 def PrettyTree(self, trav=None):
2001 # type: (Optional[TraversalState]) -> hnode_t
2002 trav = trav or TraversalState()
2003 heap_id = id(self)
2004 if heap_id in trav.seen:
2005 return hnode.AlreadySeen(heap_id)
2006 trav.seen[heap_id] = True
2007 out_node = NewRecord('ProcDefaults')
2008 L = out_node.fields
2009
2010 if self.for_word is not None: # List
2011 x0 = hnode.Array([])
2012 for i0 in self.for_word:
2013 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
2014 i0.PrettyTree(trav=trav))
2015 x0.children.append(h)
2016 L.append(Field('for_word', x0))
2017
2018 if self.for_typed is not None: # List
2019 x1 = hnode.Array([])
2020 for i1 in self.for_typed:
2021 h = (hnode.Leaf("_", color_e.OtherConst) if i1 is None else
2022 i1.PrettyTree(trav=trav))
2023 x1.children.append(h)
2024 L.append(Field('for_typed', x1))
2025
2026 if self.for_named is not None: # Dict
2027 m = hnode.Leaf("Dict", color_e.OtherConst)
2028 x2 = hnode.Array([m])
2029 for k2, v2 in self.for_named.iteritems():
2030 x2.children.append(NewLeaf(k2, color_e.StringConst))
2031 x2.children.append(v2.PrettyTree(trav=trav))
2032 L.append(Field('for_named', x2))
2033
2034 if self.for_block is not None: # Optional
2035 x3 = self.for_block.PrettyTree(trav=trav)
2036 L.append(Field('for_block', x3))
2037
2038 return out_node
2039
2040 def _AbbreviatedTree(self, trav=None):
2041 # type: (Optional[TraversalState]) -> hnode_t
2042 trav = trav or TraversalState()
2043 heap_id = id(self)
2044 if heap_id in trav.seen:
2045 return hnode.AlreadySeen(heap_id)
2046 trav.seen[heap_id] = True
2047 out_node = NewRecord('ProcDefaults')
2048 L = out_node.fields
2049 if self.for_word is not None: # List
2050 x0 = hnode.Array([])
2051 for i0 in self.for_word:
2052 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
2053 i0.AbbreviatedTree(trav=trav))
2054 x0.children.append(h)
2055 L.append(Field('for_word', x0))
2056
2057 if self.for_typed is not None: # List
2058 x1 = hnode.Array([])
2059 for i1 in self.for_typed:
2060 h = (hnode.Leaf("_", color_e.OtherConst) if i1 is None else
2061 i1.AbbreviatedTree(trav=trav))
2062 x1.children.append(h)
2063 L.append(Field('for_typed', x1))
2064
2065 if self.for_named is not None: # Dict
2066 m = hnode.Leaf("Dict", color_e.OtherConst)
2067 x2 = hnode.Array([m])
2068 for k2, v2 in self.for_named.iteritems():
2069 x2.children.append(NewLeaf(k2, color_e.StringConst))
2070 x2.children.append(v2.AbbreviatedTree(trav=trav))
2071 L.append(Field('for_named', x2))
2072
2073 if self.for_block is not None: # Optional
2074 x3 = self.for_block.AbbreviatedTree(trav=trav)
2075 L.append(Field('for_block', x3))
2076
2077 return out_node
2078
2079 def AbbreviatedTree(self, trav=None):
2080 # type: (Optional[TraversalState]) -> hnode_t
2081 return self._AbbreviatedTree(trav=trav)
2082
2083class LeftName(y_lvalue_t, sh_lvalue_t):
2084 _type_tag = 66
2085 __slots__ = ('name', 'blame_loc')
2086
2087 def __init__(self, name, blame_loc):
2088 # type: (str, loc_t) -> None
2089 self.name = name
2090 self.blame_loc = blame_loc
2091
2092 @staticmethod
2093 def CreateNull(alloc_lists=False):
2094 # type: () -> LeftName
2095 return LeftName('', cast(loc_t, None))
2096
2097 def PrettyTree(self, trav=None):
2098 # type: (Optional[TraversalState]) -> hnode_t
2099 trav = trav or TraversalState()
2100 heap_id = id(self)
2101 if heap_id in trav.seen:
2102 return hnode.AlreadySeen(heap_id)
2103 trav.seen[heap_id] = True
2104 out_node = NewRecord('LeftName')
2105 L = out_node.fields
2106
2107 x0 = NewLeaf(self.name, color_e.StringConst)
2108 L.append(Field('name', x0))
2109
2110 assert self.blame_loc is not None
2111 x1 = self.blame_loc.PrettyTree(trav=trav)
2112 L.append(Field('blame_loc', x1))
2113
2114 return out_node
2115
2116 def _AbbreviatedTree(self, trav=None):
2117 # type: (Optional[TraversalState]) -> hnode_t
2118 trav = trav or TraversalState()
2119 heap_id = id(self)
2120 if heap_id in trav.seen:
2121 return hnode.AlreadySeen(heap_id)
2122 trav.seen[heap_id] = True
2123 out_node = NewRecord('LeftName')
2124 L = out_node.fields
2125 x0 = NewLeaf(self.name, color_e.StringConst)
2126 L.append(Field('name', x0))
2127
2128 assert self.blame_loc is not None
2129 x1 = self.blame_loc.AbbreviatedTree(trav=trav)
2130 L.append(Field('blame_loc', x1))
2131
2132 return out_node
2133
2134 def AbbreviatedTree(self, trav=None):
2135 # type: (Optional[TraversalState]) -> hnode_t
2136 return self._AbbreviatedTree(trav=trav)
2137
2138class RegexMatch(regex_match_t, value_t):
2139 _type_tag = 67
2140 __slots__ = ('s', 'indices', 'ops')
2141
2142 def __init__(self, s, indices, ops):
2143 # type: (str, List[int], eggex_ops_t) -> None
2144 self.s = s
2145 self.indices = indices
2146 self.ops = ops
2147
2148 @staticmethod
2149 def CreateNull(alloc_lists=False):
2150 # type: () -> RegexMatch
2151 return RegexMatch('', [] if alloc_lists else cast('List[int]', None), cast(eggex_ops_t, None))
2152
2153 def PrettyTree(self, trav=None):
2154 # type: (Optional[TraversalState]) -> hnode_t
2155 trav = trav or TraversalState()
2156 heap_id = id(self)
2157 if heap_id in trav.seen:
2158 return hnode.AlreadySeen(heap_id)
2159 trav.seen[heap_id] = True
2160 out_node = NewRecord('RegexMatch')
2161 L = out_node.fields
2162
2163 x0 = NewLeaf(self.s, color_e.StringConst)
2164 L.append(Field('s', x0))
2165
2166 if self.indices is not None: # List
2167 x1 = hnode.Array([])
2168 for i1 in self.indices:
2169 x1.children.append(hnode.Leaf(str(i1), color_e.OtherConst))
2170 L.append(Field('indices', x1))
2171
2172 assert self.ops is not None
2173 x2 = self.ops.PrettyTree(trav=trav)
2174 L.append(Field('ops', x2))
2175
2176 return out_node
2177
2178 def _AbbreviatedTree(self, trav=None):
2179 # type: (Optional[TraversalState]) -> hnode_t
2180 trav = trav or TraversalState()
2181 heap_id = id(self)
2182 if heap_id in trav.seen:
2183 return hnode.AlreadySeen(heap_id)
2184 trav.seen[heap_id] = True
2185 out_node = NewRecord('RegexMatch')
2186 L = out_node.fields
2187 x0 = NewLeaf(self.s, color_e.StringConst)
2188 L.append(Field('s', x0))
2189
2190 if self.indices is not None: # List
2191 x1 = hnode.Array([])
2192 for i1 in self.indices:
2193 x1.children.append(hnode.Leaf(str(i1), color_e.OtherConst))
2194 L.append(Field('indices', x1))
2195
2196 assert self.ops is not None
2197 x2 = self.ops.AbbreviatedTree(trav=trav)
2198 L.append(Field('ops', x2))
2199
2200 return out_node
2201
2202 def AbbreviatedTree(self, trav=None):
2203 # type: (Optional[TraversalState]) -> hnode_t
2204 return self._AbbreviatedTree(trav=trav)
2205
2206class Obj(value_t):
2207 _type_tag = 68
2208 __slots__ = ('prototype', 'd')
2209
2210 def __init__(self, prototype, d):
2211 # type: (Optional[Obj], Dict[str, value_t]) -> None
2212 self.prototype = prototype
2213 self.d = d
2214
2215 @staticmethod
2216 def CreateNull(alloc_lists=False):
2217 # type: () -> Obj
2218 return Obj(cast('Optional[Obj]', None), cast('Dict[str, value_t]', None))
2219
2220 def PrettyTree(self, trav=None):
2221 # type: (Optional[TraversalState]) -> hnode_t
2222 trav = trav or TraversalState()
2223 heap_id = id(self)
2224 if heap_id in trav.seen:
2225 return hnode.AlreadySeen(heap_id)
2226 trav.seen[heap_id] = True
2227 out_node = NewRecord('Obj')
2228 L = out_node.fields
2229
2230 if self.prototype is not None: # Optional
2231 x0 = self.prototype.PrettyTree(trav=trav)
2232 L.append(Field('prototype', x0))
2233
2234 if self.d is not None: # Dict
2235 m = hnode.Leaf("Dict", color_e.OtherConst)
2236 x1 = hnode.Array([m])
2237 for k1, v1 in self.d.iteritems():
2238 x1.children.append(NewLeaf(k1, color_e.StringConst))
2239 x1.children.append(v1.PrettyTree(trav=trav))
2240 L.append(Field('d', x1))
2241
2242 return out_node
2243
2244 def _AbbreviatedTree(self, trav=None):
2245 # type: (Optional[TraversalState]) -> hnode_t
2246 trav = trav or TraversalState()
2247 heap_id = id(self)
2248 if heap_id in trav.seen:
2249 return hnode.AlreadySeen(heap_id)
2250 trav.seen[heap_id] = True
2251 out_node = NewRecord('Obj')
2252 L = out_node.fields
2253 if self.prototype is not None: # Optional
2254 x0 = self.prototype.AbbreviatedTree(trav=trav)
2255 L.append(Field('prototype', x0))
2256
2257 if self.d is not None: # Dict
2258 m = hnode.Leaf("Dict", color_e.OtherConst)
2259 x1 = hnode.Array([m])
2260 for k1, v1 in self.d.iteritems():
2261 x1.children.append(NewLeaf(k1, color_e.StringConst))
2262 x1.children.append(v1.AbbreviatedTree(trav=trav))
2263 L.append(Field('d', x1))
2264
2265 return out_node
2266
2267 def AbbreviatedTree(self, trav=None):
2268 # type: (Optional[TraversalState]) -> hnode_t
2269 return self._AbbreviatedTree(trav=trav)
2270