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

2478 lines, 1834 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 block_val_e(object):
462 Literal = 1
463 Expr = 2
464
465_block_val_str = {
466 1: 'Literal',
467 2: 'Expr',
468}
469
470def block_val_str(tag, dot=True):
471 # type: (int, bool) -> str
472 v = _block_val_str[tag]
473 if dot:
474 return "block_val.%s" % v
475 else:
476 return v
477
478class block_val_t(pybase.CompoundObj):
479 def tag(self):
480 # type: () -> int
481 return self._type_tag
482 pass
483
484class block_val(object):
485 class Literal(block_val_t):
486 _type_tag = 1
487 __slots__ = ('b',)
488
489 def __init__(self, b):
490 # type: (LiteralBlock) -> None
491 self.b = b
492
493 @staticmethod
494 def CreateNull(alloc_lists=False):
495 # type: () -> block_val.Literal
496 return block_val.Literal(cast(LiteralBlock, None))
497
498 def PrettyTree(self, trav=None):
499 # type: (Optional[TraversalState]) -> hnode_t
500 trav = trav or TraversalState()
501 heap_id = id(self)
502 if heap_id in trav.seen:
503 return hnode.AlreadySeen(heap_id)
504 trav.seen[heap_id] = True
505 out_node = NewRecord('block_val.Literal')
506 L = out_node.fields
507
508 assert self.b is not None
509 x0 = self.b.PrettyTree(trav=trav)
510 L.append(Field('b', x0))
511
512 return out_node
513
514 def _AbbreviatedTree(self, trav=None):
515 # type: (Optional[TraversalState]) -> hnode_t
516 trav = trav or TraversalState()
517 heap_id = id(self)
518 if heap_id in trav.seen:
519 return hnode.AlreadySeen(heap_id)
520 trav.seen[heap_id] = True
521 out_node = NewRecord('block_val.Literal')
522 L = out_node.fields
523 assert self.b is not None
524 x0 = self.b.AbbreviatedTree(trav=trav)
525 L.append(Field('b', x0))
526
527 return out_node
528
529 def AbbreviatedTree(self, trav=None):
530 # type: (Optional[TraversalState]) -> hnode_t
531 return self._AbbreviatedTree(trav=trav)
532
533 class Expr(block_val_t):
534 _type_tag = 2
535 __slots__ = ('c',)
536
537 def __init__(self, c):
538 # type: (command_t) -> None
539 self.c = c
540
541 @staticmethod
542 def CreateNull(alloc_lists=False):
543 # type: () -> block_val.Expr
544 return block_val.Expr(cast(command_t, None))
545
546 def PrettyTree(self, trav=None):
547 # type: (Optional[TraversalState]) -> hnode_t
548 trav = trav or TraversalState()
549 heap_id = id(self)
550 if heap_id in trav.seen:
551 return hnode.AlreadySeen(heap_id)
552 trav.seen[heap_id] = True
553 out_node = NewRecord('block_val.Expr')
554 L = out_node.fields
555
556 assert self.c is not None
557 x0 = self.c.PrettyTree(trav=trav)
558 L.append(Field('c', x0))
559
560 return out_node
561
562 def _AbbreviatedTree(self, trav=None):
563 # type: (Optional[TraversalState]) -> hnode_t
564 trav = trav or TraversalState()
565 heap_id = id(self)
566 if heap_id in trav.seen:
567 return hnode.AlreadySeen(heap_id)
568 trav.seen[heap_id] = True
569 out_node = NewRecord('block_val.Expr')
570 L = out_node.fields
571 assert self.c is not None
572 x0 = self.c.AbbreviatedTree(trav=trav)
573 L.append(Field('c', x0))
574
575 return out_node
576
577 def AbbreviatedTree(self, trav=None):
578 # type: (Optional[TraversalState]) -> hnode_t
579 return self._AbbreviatedTree(trav=trav)
580
581 pass
582
583class value_e(object):
584 Interrupted = 1
585 Stdin = 2
586 Undef = 3
587 Str = 4
588 BashArray = 5
589 SparseArray = 6
590 BashAssoc = 7
591 Null = 8
592 Bool = 9
593 Int = 10
594 Float = 11
595 List = 12
596 Dict = 13
597 Obj = 68
598 Eggex = 15
599 Match = 67
600 Expr = 17
601 Command = 18
602 Block = 19
603 Place = 20
604 Frame = 21
605 BuiltinFunc = 22
606 BoundFunc = 23
607 Func = 24
608 BuiltinProc = 25
609 Proc = 26
610 Range = 27
611 Slice = 28
612
613_value_str = {
614 1: 'Interrupted',
615 2: 'Stdin',
616 3: 'Undef',
617 4: 'Str',
618 5: 'BashArray',
619 6: 'SparseArray',
620 7: 'BashAssoc',
621 8: 'Null',
622 9: 'Bool',
623 10: 'Int',
624 11: 'Float',
625 12: 'List',
626 13: 'Dict',
627 15: 'Eggex',
628 17: 'Expr',
629 18: 'Command',
630 19: 'Block',
631 20: 'Place',
632 21: 'Frame',
633 22: 'BuiltinFunc',
634 23: 'BoundFunc',
635 24: 'Func',
636 25: 'BuiltinProc',
637 26: 'Proc',
638 27: 'Range',
639 28: 'Slice',
640 67: 'Match',
641 68: 'Obj',
642}
643
644def value_str(tag, dot=True):
645 # type: (int, bool) -> str
646 v = _value_str[tag]
647 if dot:
648 return "value.%s" % v
649 else:
650 return v
651
652class value_t(pybase.CompoundObj):
653 def tag(self):
654 # type: () -> int
655 return self._type_tag
656 pass
657
658class value__Interrupted(value_t):
659 _type_tag = 1
660 __slots__ = ()
661
662 def __init__(self, ):
663 # type: () -> None
664 pass
665
666 def PrettyTree(self, trav=None):
667 # type: (Optional[TraversalState]) -> hnode_t
668 trav = trav or TraversalState()
669 heap_id = id(self)
670 if heap_id in trav.seen:
671 return hnode.AlreadySeen(heap_id)
672 trav.seen[heap_id] = True
673 out_node = NewRecord('value__Interrupted')
674 L = out_node.fields
675
676 return out_node
677
678 def _AbbreviatedTree(self, trav=None):
679 # type: (Optional[TraversalState]) -> hnode_t
680 trav = trav or TraversalState()
681 heap_id = id(self)
682 if heap_id in trav.seen:
683 return hnode.AlreadySeen(heap_id)
684 trav.seen[heap_id] = True
685 out_node = NewRecord('value__Interrupted')
686 L = out_node.fields
687 return out_node
688
689 def AbbreviatedTree(self, trav=None):
690 # type: (Optional[TraversalState]) -> hnode_t
691 return self._AbbreviatedTree(trav=trav)
692
693class value__Stdin(value_t):
694 _type_tag = 2
695 __slots__ = ()
696
697 def __init__(self, ):
698 # type: () -> None
699 pass
700
701 def PrettyTree(self, trav=None):
702 # type: (Optional[TraversalState]) -> hnode_t
703 trav = trav or TraversalState()
704 heap_id = id(self)
705 if heap_id in trav.seen:
706 return hnode.AlreadySeen(heap_id)
707 trav.seen[heap_id] = True
708 out_node = NewRecord('value__Stdin')
709 L = out_node.fields
710
711 return out_node
712
713 def _AbbreviatedTree(self, trav=None):
714 # type: (Optional[TraversalState]) -> hnode_t
715 trav = trav or TraversalState()
716 heap_id = id(self)
717 if heap_id in trav.seen:
718 return hnode.AlreadySeen(heap_id)
719 trav.seen[heap_id] = True
720 out_node = NewRecord('value__Stdin')
721 L = out_node.fields
722 return out_node
723
724 def AbbreviatedTree(self, trav=None):
725 # type: (Optional[TraversalState]) -> hnode_t
726 return self._AbbreviatedTree(trav=trav)
727
728class value__Undef(value_t):
729 _type_tag = 3
730 __slots__ = ()
731
732 def __init__(self, ):
733 # type: () -> None
734 pass
735
736 def PrettyTree(self, trav=None):
737 # type: (Optional[TraversalState]) -> hnode_t
738 trav = trav or TraversalState()
739 heap_id = id(self)
740 if heap_id in trav.seen:
741 return hnode.AlreadySeen(heap_id)
742 trav.seen[heap_id] = True
743 out_node = NewRecord('value__Undef')
744 L = out_node.fields
745
746 return out_node
747
748 def _AbbreviatedTree(self, trav=None):
749 # type: (Optional[TraversalState]) -> hnode_t
750 trav = trav or TraversalState()
751 heap_id = id(self)
752 if heap_id in trav.seen:
753 return hnode.AlreadySeen(heap_id)
754 trav.seen[heap_id] = True
755 out_node = NewRecord('value__Undef')
756 L = out_node.fields
757 return out_node
758
759 def AbbreviatedTree(self, trav=None):
760 # type: (Optional[TraversalState]) -> hnode_t
761 return self._AbbreviatedTree(trav=trav)
762
763class value__Null(value_t):
764 _type_tag = 8
765 __slots__ = ()
766
767 def __init__(self, ):
768 # type: () -> None
769 pass
770
771 def PrettyTree(self, trav=None):
772 # type: (Optional[TraversalState]) -> hnode_t
773 trav = trav or TraversalState()
774 heap_id = id(self)
775 if heap_id in trav.seen:
776 return hnode.AlreadySeen(heap_id)
777 trav.seen[heap_id] = True
778 out_node = NewRecord('value__Null')
779 L = out_node.fields
780
781 return out_node
782
783 def _AbbreviatedTree(self, trav=None):
784 # type: (Optional[TraversalState]) -> hnode_t
785 trav = trav or TraversalState()
786 heap_id = id(self)
787 if heap_id in trav.seen:
788 return hnode.AlreadySeen(heap_id)
789 trav.seen[heap_id] = True
790 out_node = NewRecord('value__Null')
791 L = out_node.fields
792 return out_node
793
794 def AbbreviatedTree(self, trav=None):
795 # type: (Optional[TraversalState]) -> hnode_t
796 return self._AbbreviatedTree(trav=trav)
797
798class value(object):
799 Interrupted = value__Interrupted()
800
801 Stdin = value__Stdin()
802
803 Undef = value__Undef()
804
805 class Str(value_t):
806 _type_tag = 4
807 __slots__ = ('s',)
808
809 def __init__(self, s):
810 # type: (str) -> None
811 self.s = s
812
813 @staticmethod
814 def CreateNull(alloc_lists=False):
815 # type: () -> value.Str
816 return value.Str('')
817
818 def PrettyTree(self, trav=None):
819 # type: (Optional[TraversalState]) -> hnode_t
820 trav = trav or TraversalState()
821 heap_id = id(self)
822 if heap_id in trav.seen:
823 return hnode.AlreadySeen(heap_id)
824 trav.seen[heap_id] = True
825 out_node = NewRecord('value.Str')
826 L = out_node.fields
827
828 x0 = NewLeaf(self.s, color_e.StringConst)
829 L.append(Field('s', x0))
830
831 return out_node
832
833 def _AbbreviatedTree(self, trav=None):
834 # type: (Optional[TraversalState]) -> hnode_t
835 trav = trav or TraversalState()
836 heap_id = id(self)
837 if heap_id in trav.seen:
838 return hnode.AlreadySeen(heap_id)
839 trav.seen[heap_id] = True
840 out_node = NewRecord('value.Str')
841 L = out_node.fields
842 x0 = NewLeaf(self.s, color_e.StringConst)
843 L.append(Field('s', x0))
844
845 return out_node
846
847 def AbbreviatedTree(self, trav=None):
848 # type: (Optional[TraversalState]) -> hnode_t
849 return self._AbbreviatedTree(trav=trav)
850
851 class BashArray(value_t):
852 _type_tag = 5
853 __slots__ = ('strs',)
854
855 def __init__(self, strs):
856 # type: (List[str]) -> None
857 self.strs = strs
858
859 @staticmethod
860 def CreateNull(alloc_lists=False):
861 # type: () -> value.BashArray
862 return value.BashArray([] if alloc_lists else cast('List[str]', None))
863
864 def PrettyTree(self, trav=None):
865 # type: (Optional[TraversalState]) -> hnode_t
866 trav = trav or TraversalState()
867 heap_id = id(self)
868 if heap_id in trav.seen:
869 return hnode.AlreadySeen(heap_id)
870 trav.seen[heap_id] = True
871 out_node = NewRecord('value.BashArray')
872 L = out_node.fields
873
874 if self.strs is not None: # List
875 x0 = hnode.Array([])
876 for i0 in self.strs:
877 x0.children.append(NewLeaf(i0, color_e.StringConst))
878 L.append(Field('strs', x0))
879
880 return out_node
881
882 def _AbbreviatedTree(self, trav=None):
883 # type: (Optional[TraversalState]) -> hnode_t
884 trav = trav or TraversalState()
885 heap_id = id(self)
886 if heap_id in trav.seen:
887 return hnode.AlreadySeen(heap_id)
888 trav.seen[heap_id] = True
889 out_node = NewRecord('value.BashArray')
890 L = out_node.fields
891 if self.strs is not None: # List
892 x0 = hnode.Array([])
893 for i0 in self.strs:
894 x0.children.append(NewLeaf(i0, color_e.StringConst))
895 L.append(Field('strs', x0))
896
897 return out_node
898
899 def AbbreviatedTree(self, trav=None):
900 # type: (Optional[TraversalState]) -> hnode_t
901 return self._AbbreviatedTree(trav=trav)
902
903 class SparseArray(value_t):
904 _type_tag = 6
905 __slots__ = ('d', 'max_index')
906
907 def __init__(self, d, max_index):
908 # type: (Dict[mops.BigInt, str], mops.BigInt) -> None
909 self.d = d
910 self.max_index = max_index
911
912 @staticmethod
913 def CreateNull(alloc_lists=False):
914 # type: () -> value.SparseArray
915 return value.SparseArray(cast('Dict[mops.BigInt, str]', None), mops.BigInt(-1))
916
917 def PrettyTree(self, trav=None):
918 # type: (Optional[TraversalState]) -> hnode_t
919 trav = trav or TraversalState()
920 heap_id = id(self)
921 if heap_id in trav.seen:
922 return hnode.AlreadySeen(heap_id)
923 trav.seen[heap_id] = True
924 out_node = NewRecord('value.SparseArray')
925 L = out_node.fields
926
927 if self.d is not None: # Dict
928 m = hnode.Leaf("Dict", color_e.OtherConst)
929 x0 = hnode.Array([m])
930 for k0, v0 in self.d.iteritems():
931 x0.children.append(hnode.Leaf(mops.ToStr(k0), color_e.OtherConst))
932 x0.children.append(NewLeaf(v0, color_e.StringConst))
933 L.append(Field('d', x0))
934
935 x1 = hnode.Leaf(mops.ToStr(self.max_index), color_e.OtherConst)
936 L.append(Field('max_index', x1))
937
938 return out_node
939
940 def _AbbreviatedTree(self, trav=None):
941 # type: (Optional[TraversalState]) -> hnode_t
942 trav = trav or TraversalState()
943 heap_id = id(self)
944 if heap_id in trav.seen:
945 return hnode.AlreadySeen(heap_id)
946 trav.seen[heap_id] = True
947 out_node = NewRecord('value.SparseArray')
948 L = out_node.fields
949 if self.d is not None: # Dict
950 m = hnode.Leaf("Dict", color_e.OtherConst)
951 x0 = hnode.Array([m])
952 for k0, v0 in self.d.iteritems():
953 x0.children.append(hnode.Leaf(mops.ToStr(k0), color_e.OtherConst))
954 x0.children.append(NewLeaf(v0, color_e.StringConst))
955 L.append(Field('d', x0))
956
957 x1 = hnode.Leaf(mops.ToStr(self.max_index), color_e.OtherConst)
958 L.append(Field('max_index', x1))
959
960 return out_node
961
962 def AbbreviatedTree(self, trav=None):
963 # type: (Optional[TraversalState]) -> hnode_t
964 return self._AbbreviatedTree(trav=trav)
965
966 class BashAssoc(value_t):
967 _type_tag = 7
968 __slots__ = ('d',)
969
970 def __init__(self, d):
971 # type: (Dict[str, str]) -> None
972 self.d = d
973
974 @staticmethod
975 def CreateNull(alloc_lists=False):
976 # type: () -> value.BashAssoc
977 return value.BashAssoc(cast('Dict[str, str]', None))
978
979 def PrettyTree(self, trav=None):
980 # type: (Optional[TraversalState]) -> hnode_t
981 trav = trav or TraversalState()
982 heap_id = id(self)
983 if heap_id in trav.seen:
984 return hnode.AlreadySeen(heap_id)
985 trav.seen[heap_id] = True
986 out_node = NewRecord('value.BashAssoc')
987 L = out_node.fields
988
989 if self.d is not None: # Dict
990 m = hnode.Leaf("Dict", color_e.OtherConst)
991 x0 = hnode.Array([m])
992 for k0, v0 in self.d.iteritems():
993 x0.children.append(NewLeaf(k0, color_e.StringConst))
994 x0.children.append(NewLeaf(v0, color_e.StringConst))
995 L.append(Field('d', x0))
996
997 return out_node
998
999 def _AbbreviatedTree(self, trav=None):
1000 # type: (Optional[TraversalState]) -> hnode_t
1001 trav = trav or TraversalState()
1002 heap_id = id(self)
1003 if heap_id in trav.seen:
1004 return hnode.AlreadySeen(heap_id)
1005 trav.seen[heap_id] = True
1006 out_node = NewRecord('value.BashAssoc')
1007 L = out_node.fields
1008 if self.d is not None: # Dict
1009 m = hnode.Leaf("Dict", color_e.OtherConst)
1010 x0 = hnode.Array([m])
1011 for k0, v0 in self.d.iteritems():
1012 x0.children.append(NewLeaf(k0, color_e.StringConst))
1013 x0.children.append(NewLeaf(v0, color_e.StringConst))
1014 L.append(Field('d', x0))
1015
1016 return out_node
1017
1018 def AbbreviatedTree(self, trav=None):
1019 # type: (Optional[TraversalState]) -> hnode_t
1020 return self._AbbreviatedTree(trav=trav)
1021
1022 Null = value__Null()
1023
1024 class Bool(value_t):
1025 _type_tag = 9
1026 __slots__ = ('b',)
1027
1028 def __init__(self, b):
1029 # type: (bool) -> None
1030 self.b = b
1031
1032 @staticmethod
1033 def CreateNull(alloc_lists=False):
1034 # type: () -> value.Bool
1035 return value.Bool(False)
1036
1037 def PrettyTree(self, trav=None):
1038 # type: (Optional[TraversalState]) -> hnode_t
1039 trav = trav or TraversalState()
1040 heap_id = id(self)
1041 if heap_id in trav.seen:
1042 return hnode.AlreadySeen(heap_id)
1043 trav.seen[heap_id] = True
1044 out_node = NewRecord('value.Bool')
1045 L = out_node.fields
1046
1047 x0 = hnode.Leaf('T' if self.b else 'F', color_e.OtherConst)
1048 L.append(Field('b', x0))
1049
1050 return out_node
1051
1052 def _AbbreviatedTree(self, trav=None):
1053 # type: (Optional[TraversalState]) -> hnode_t
1054 trav = trav or TraversalState()
1055 heap_id = id(self)
1056 if heap_id in trav.seen:
1057 return hnode.AlreadySeen(heap_id)
1058 trav.seen[heap_id] = True
1059 out_node = NewRecord('value.Bool')
1060 L = out_node.fields
1061 x0 = hnode.Leaf('T' if self.b else 'F', color_e.OtherConst)
1062 L.append(Field('b', x0))
1063
1064 return out_node
1065
1066 def AbbreviatedTree(self, trav=None):
1067 # type: (Optional[TraversalState]) -> hnode_t
1068 return self._AbbreviatedTree(trav=trav)
1069
1070 class Int(value_t):
1071 _type_tag = 10
1072 __slots__ = ('i',)
1073
1074 def __init__(self, i):
1075 # type: (mops.BigInt) -> None
1076 self.i = i
1077
1078 @staticmethod
1079 def CreateNull(alloc_lists=False):
1080 # type: () -> value.Int
1081 return value.Int(mops.BigInt(-1))
1082
1083 def PrettyTree(self, trav=None):
1084 # type: (Optional[TraversalState]) -> hnode_t
1085 trav = trav or TraversalState()
1086 heap_id = id(self)
1087 if heap_id in trav.seen:
1088 return hnode.AlreadySeen(heap_id)
1089 trav.seen[heap_id] = True
1090 out_node = NewRecord('value.Int')
1091 L = out_node.fields
1092
1093 x0 = hnode.Leaf(mops.ToStr(self.i), color_e.OtherConst)
1094 L.append(Field('i', x0))
1095
1096 return out_node
1097
1098 def _AbbreviatedTree(self, trav=None):
1099 # type: (Optional[TraversalState]) -> hnode_t
1100 trav = trav or TraversalState()
1101 heap_id = id(self)
1102 if heap_id in trav.seen:
1103 return hnode.AlreadySeen(heap_id)
1104 trav.seen[heap_id] = True
1105 out_node = NewRecord('value.Int')
1106 L = out_node.fields
1107 x0 = hnode.Leaf(mops.ToStr(self.i), color_e.OtherConst)
1108 L.append(Field('i', x0))
1109
1110 return out_node
1111
1112 def AbbreviatedTree(self, trav=None):
1113 # type: (Optional[TraversalState]) -> hnode_t
1114 return self._AbbreviatedTree(trav=trav)
1115
1116 class Float(value_t):
1117 _type_tag = 11
1118 __slots__ = ('f',)
1119
1120 def __init__(self, f):
1121 # type: (float) -> None
1122 self.f = f
1123
1124 @staticmethod
1125 def CreateNull(alloc_lists=False):
1126 # type: () -> value.Float
1127 return value.Float(0.0)
1128
1129 def PrettyTree(self, trav=None):
1130 # type: (Optional[TraversalState]) -> hnode_t
1131 trav = trav or TraversalState()
1132 heap_id = id(self)
1133 if heap_id in trav.seen:
1134 return hnode.AlreadySeen(heap_id)
1135 trav.seen[heap_id] = True
1136 out_node = NewRecord('value.Float')
1137 L = out_node.fields
1138
1139 x0 = hnode.Leaf(str(self.f), color_e.OtherConst)
1140 L.append(Field('f', x0))
1141
1142 return out_node
1143
1144 def _AbbreviatedTree(self, trav=None):
1145 # type: (Optional[TraversalState]) -> hnode_t
1146 trav = trav or TraversalState()
1147 heap_id = id(self)
1148 if heap_id in trav.seen:
1149 return hnode.AlreadySeen(heap_id)
1150 trav.seen[heap_id] = True
1151 out_node = NewRecord('value.Float')
1152 L = out_node.fields
1153 x0 = hnode.Leaf(str(self.f), color_e.OtherConst)
1154 L.append(Field('f', x0))
1155
1156 return out_node
1157
1158 def AbbreviatedTree(self, trav=None):
1159 # type: (Optional[TraversalState]) -> hnode_t
1160 return self._AbbreviatedTree(trav=trav)
1161
1162 class List(value_t):
1163 _type_tag = 12
1164 __slots__ = ('items',)
1165
1166 def __init__(self, items):
1167 # type: (List[value_t]) -> None
1168 self.items = items
1169
1170 @staticmethod
1171 def CreateNull(alloc_lists=False):
1172 # type: () -> value.List
1173 return value.List([] if alloc_lists else cast('List[value_t]', None))
1174
1175 def PrettyTree(self, trav=None):
1176 # type: (Optional[TraversalState]) -> hnode_t
1177 trav = trav or TraversalState()
1178 heap_id = id(self)
1179 if heap_id in trav.seen:
1180 return hnode.AlreadySeen(heap_id)
1181 trav.seen[heap_id] = True
1182 out_node = NewRecord('value.List')
1183 L = out_node.fields
1184
1185 if self.items is not None: # List
1186 x0 = hnode.Array([])
1187 for i0 in self.items:
1188 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
1189 i0.PrettyTree(trav=trav))
1190 x0.children.append(h)
1191 L.append(Field('items', x0))
1192
1193 return out_node
1194
1195 def _AbbreviatedTree(self, trav=None):
1196 # type: (Optional[TraversalState]) -> hnode_t
1197 trav = trav or TraversalState()
1198 heap_id = id(self)
1199 if heap_id in trav.seen:
1200 return hnode.AlreadySeen(heap_id)
1201 trav.seen[heap_id] = True
1202 out_node = NewRecord('value.List')
1203 L = out_node.fields
1204 if self.items is not None: # List
1205 x0 = hnode.Array([])
1206 for i0 in self.items:
1207 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
1208 i0.AbbreviatedTree(trav=trav))
1209 x0.children.append(h)
1210 L.append(Field('items', x0))
1211
1212 return out_node
1213
1214 def AbbreviatedTree(self, trav=None):
1215 # type: (Optional[TraversalState]) -> hnode_t
1216 return self._AbbreviatedTree(trav=trav)
1217
1218 class Dict(value_t):
1219 _type_tag = 13
1220 __slots__ = ('d',)
1221
1222 def __init__(self, d):
1223 # type: (Dict[str, value_t]) -> None
1224 self.d = d
1225
1226 @staticmethod
1227 def CreateNull(alloc_lists=False):
1228 # type: () -> value.Dict
1229 return value.Dict(cast('Dict[str, value_t]', None))
1230
1231 def PrettyTree(self, trav=None):
1232 # type: (Optional[TraversalState]) -> hnode_t
1233 trav = trav or TraversalState()
1234 heap_id = id(self)
1235 if heap_id in trav.seen:
1236 return hnode.AlreadySeen(heap_id)
1237 trav.seen[heap_id] = True
1238 out_node = NewRecord('value.Dict')
1239 L = out_node.fields
1240
1241 if self.d is not None: # Dict
1242 m = hnode.Leaf("Dict", color_e.OtherConst)
1243 x0 = hnode.Array([m])
1244 for k0, v0 in self.d.iteritems():
1245 x0.children.append(NewLeaf(k0, color_e.StringConst))
1246 x0.children.append(v0.PrettyTree(trav=trav))
1247 L.append(Field('d', x0))
1248
1249 return out_node
1250
1251 def _AbbreviatedTree(self, trav=None):
1252 # type: (Optional[TraversalState]) -> hnode_t
1253 trav = trav or TraversalState()
1254 heap_id = id(self)
1255 if heap_id in trav.seen:
1256 return hnode.AlreadySeen(heap_id)
1257 trav.seen[heap_id] = True
1258 out_node = NewRecord('value.Dict')
1259 L = out_node.fields
1260 if self.d is not None: # Dict
1261 m = hnode.Leaf("Dict", color_e.OtherConst)
1262 x0 = hnode.Array([m])
1263 for k0, v0 in self.d.iteritems():
1264 x0.children.append(NewLeaf(k0, color_e.StringConst))
1265 x0.children.append(v0.AbbreviatedTree(trav=trav))
1266 L.append(Field('d', x0))
1267
1268 return out_node
1269
1270 def AbbreviatedTree(self, trav=None):
1271 # type: (Optional[TraversalState]) -> hnode_t
1272 return self._AbbreviatedTree(trav=trav)
1273
1274 class Eggex(value_t):
1275 _type_tag = 15
1276 __slots__ = ('spliced', 'canonical_flags', 'convert_funcs', 'convert_toks',
1277 'as_ere', 'capture_names')
1278
1279 def __init__(self, spliced, canonical_flags, convert_funcs, convert_toks,
1280 as_ere, capture_names):
1281 # type: (re_t, str, List[Optional[value_t]], List[Optional[Token]], Optional[str], List[Optional[str]]) -> None
1282 self.spliced = spliced
1283 self.canonical_flags = canonical_flags
1284 self.convert_funcs = convert_funcs
1285 self.convert_toks = convert_toks
1286 self.as_ere = as_ere
1287 self.capture_names = capture_names
1288
1289 @staticmethod
1290 def CreateNull(alloc_lists=False):
1291 # type: () -> value.Eggex
1292 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))
1293
1294 def PrettyTree(self, trav=None):
1295 # type: (Optional[TraversalState]) -> hnode_t
1296 trav = trav or TraversalState()
1297 heap_id = id(self)
1298 if heap_id in trav.seen:
1299 return hnode.AlreadySeen(heap_id)
1300 trav.seen[heap_id] = True
1301 out_node = NewRecord('value.Eggex')
1302 L = out_node.fields
1303
1304 assert self.spliced is not None
1305 x0 = self.spliced.PrettyTree(trav=trav)
1306 L.append(Field('spliced', x0))
1307
1308 x1 = NewLeaf(self.canonical_flags, color_e.StringConst)
1309 L.append(Field('canonical_flags', x1))
1310
1311 if self.convert_funcs is not None: # List
1312 x2 = hnode.Array([])
1313 for i2 in self.convert_funcs:
1314 h = (hnode.Leaf("_", color_e.OtherConst) if i2 is None else
1315 i2.PrettyTree(trav=trav))
1316 x2.children.append(h)
1317 L.append(Field('convert_funcs', x2))
1318
1319 if self.convert_toks is not None: # List
1320 x3 = hnode.Array([])
1321 for i3 in self.convert_toks:
1322 h = (hnode.Leaf("_", color_e.OtherConst) if i3 is None else
1323 i3.PrettyTree(trav=trav))
1324 x3.children.append(h)
1325 L.append(Field('convert_toks', x3))
1326
1327 if self.as_ere is not None: # Optional
1328 x4 = NewLeaf(self.as_ere, color_e.StringConst)
1329 L.append(Field('as_ere', x4))
1330
1331 if self.capture_names is not None: # List
1332 x5 = hnode.Array([])
1333 for i5 in self.capture_names:
1334 x5.children.append(NewLeaf(i5, color_e.StringConst))
1335 L.append(Field('capture_names', x5))
1336
1337 return out_node
1338
1339 def _AbbreviatedTree(self, trav=None):
1340 # type: (Optional[TraversalState]) -> hnode_t
1341 trav = trav or TraversalState()
1342 heap_id = id(self)
1343 if heap_id in trav.seen:
1344 return hnode.AlreadySeen(heap_id)
1345 trav.seen[heap_id] = True
1346 out_node = NewRecord('value.Eggex')
1347 L = out_node.fields
1348 assert self.spliced is not None
1349 x0 = self.spliced.AbbreviatedTree(trav=trav)
1350 L.append(Field('spliced', x0))
1351
1352 x1 = NewLeaf(self.canonical_flags, color_e.StringConst)
1353 L.append(Field('canonical_flags', x1))
1354
1355 if self.convert_funcs is not None: # List
1356 x2 = hnode.Array([])
1357 for i2 in self.convert_funcs:
1358 h = (hnode.Leaf("_", color_e.OtherConst) if i2 is None else
1359 i2.AbbreviatedTree(trav=trav))
1360 x2.children.append(h)
1361 L.append(Field('convert_funcs', x2))
1362
1363 if self.convert_toks is not None: # List
1364 x3 = hnode.Array([])
1365 for i3 in self.convert_toks:
1366 h = (hnode.Leaf("_", color_e.OtherConst) if i3 is None else
1367 i3.AbbreviatedTree(trav=trav))
1368 x3.children.append(h)
1369 L.append(Field('convert_toks', x3))
1370
1371 if self.as_ere is not None: # Optional
1372 x4 = NewLeaf(self.as_ere, color_e.StringConst)
1373 L.append(Field('as_ere', x4))
1374
1375 if self.capture_names is not None: # List
1376 x5 = hnode.Array([])
1377 for i5 in self.capture_names:
1378 x5.children.append(NewLeaf(i5, color_e.StringConst))
1379 L.append(Field('capture_names', x5))
1380
1381 return out_node
1382
1383 def AbbreviatedTree(self, trav=None):
1384 # type: (Optional[TraversalState]) -> hnode_t
1385 return self._AbbreviatedTree(trav=trav)
1386
1387 class Expr(value_t):
1388 _type_tag = 17
1389 __slots__ = ('e',)
1390
1391 def __init__(self, e):
1392 # type: (expr_t) -> None
1393 self.e = e
1394
1395 @staticmethod
1396 def CreateNull(alloc_lists=False):
1397 # type: () -> value.Expr
1398 return value.Expr(cast(expr_t, None))
1399
1400 def PrettyTree(self, trav=None):
1401 # type: (Optional[TraversalState]) -> hnode_t
1402 trav = trav or TraversalState()
1403 heap_id = id(self)
1404 if heap_id in trav.seen:
1405 return hnode.AlreadySeen(heap_id)
1406 trav.seen[heap_id] = True
1407 out_node = NewRecord('value.Expr')
1408 L = out_node.fields
1409
1410 assert self.e is not None
1411 x0 = self.e.PrettyTree(trav=trav)
1412 L.append(Field('e', x0))
1413
1414 return out_node
1415
1416 def _AbbreviatedTree(self, trav=None):
1417 # type: (Optional[TraversalState]) -> hnode_t
1418 trav = trav or TraversalState()
1419 heap_id = id(self)
1420 if heap_id in trav.seen:
1421 return hnode.AlreadySeen(heap_id)
1422 trav.seen[heap_id] = True
1423 out_node = NewRecord('value.Expr')
1424 L = out_node.fields
1425 assert self.e is not None
1426 x0 = self.e.AbbreviatedTree(trav=trav)
1427 L.append(Field('e', x0))
1428
1429 return out_node
1430
1431 def AbbreviatedTree(self, trav=None):
1432 # type: (Optional[TraversalState]) -> hnode_t
1433 return self._AbbreviatedTree(trav=trav)
1434
1435 class Command(value_t):
1436 _type_tag = 18
1437 __slots__ = ('c',)
1438
1439 def __init__(self, c):
1440 # type: (command_t) -> None
1441 self.c = c
1442
1443 @staticmethod
1444 def CreateNull(alloc_lists=False):
1445 # type: () -> value.Command
1446 return value.Command(cast(command_t, None))
1447
1448 def PrettyTree(self, trav=None):
1449 # type: (Optional[TraversalState]) -> hnode_t
1450 trav = trav or TraversalState()
1451 heap_id = id(self)
1452 if heap_id in trav.seen:
1453 return hnode.AlreadySeen(heap_id)
1454 trav.seen[heap_id] = True
1455 out_node = NewRecord('value.Command')
1456 L = out_node.fields
1457
1458 assert self.c is not None
1459 x0 = self.c.PrettyTree(trav=trav)
1460 L.append(Field('c', x0))
1461
1462 return out_node
1463
1464 def _AbbreviatedTree(self, trav=None):
1465 # type: (Optional[TraversalState]) -> hnode_t
1466 trav = trav or TraversalState()
1467 heap_id = id(self)
1468 if heap_id in trav.seen:
1469 return hnode.AlreadySeen(heap_id)
1470 trav.seen[heap_id] = True
1471 out_node = NewRecord('value.Command')
1472 L = out_node.fields
1473 assert self.c is not None
1474 x0 = self.c.AbbreviatedTree(trav=trav)
1475 L.append(Field('c', x0))
1476
1477 return out_node
1478
1479 def AbbreviatedTree(self, trav=None):
1480 # type: (Optional[TraversalState]) -> hnode_t
1481 return self._AbbreviatedTree(trav=trav)
1482
1483 class Block(value_t):
1484 _type_tag = 19
1485 __slots__ = ('block', 'captured_frame')
1486
1487 def __init__(self, block, captured_frame):
1488 # type: (block_val_t, Dict[str, Cell]) -> None
1489 self.block = block
1490 self.captured_frame = captured_frame
1491
1492 @staticmethod
1493 def CreateNull(alloc_lists=False):
1494 # type: () -> value.Block
1495 return value.Block(cast(block_val_t, None), cast('Dict[str, Cell]', None))
1496
1497 def PrettyTree(self, trav=None):
1498 # type: (Optional[TraversalState]) -> hnode_t
1499 trav = trav or TraversalState()
1500 heap_id = id(self)
1501 if heap_id in trav.seen:
1502 return hnode.AlreadySeen(heap_id)
1503 trav.seen[heap_id] = True
1504 out_node = NewRecord('value.Block')
1505 L = out_node.fields
1506
1507 assert self.block is not None
1508 x0 = self.block.PrettyTree(trav=trav)
1509 L.append(Field('block', x0))
1510
1511 if self.captured_frame is not None: # Dict
1512 m = hnode.Leaf("Dict", color_e.OtherConst)
1513 x1 = hnode.Array([m])
1514 for k1, v1 in self.captured_frame.iteritems():
1515 x1.children.append(NewLeaf(k1, color_e.StringConst))
1516 x1.children.append(v1.PrettyTree(trav=trav))
1517 L.append(Field('captured_frame', x1))
1518
1519 return out_node
1520
1521 def _AbbreviatedTree(self, trav=None):
1522 # type: (Optional[TraversalState]) -> hnode_t
1523 trav = trav or TraversalState()
1524 heap_id = id(self)
1525 if heap_id in trav.seen:
1526 return hnode.AlreadySeen(heap_id)
1527 trav.seen[heap_id] = True
1528 out_node = NewRecord('value.Block')
1529 L = out_node.fields
1530 assert self.block is not None
1531 x0 = self.block.AbbreviatedTree(trav=trav)
1532 L.append(Field('block', x0))
1533
1534 if self.captured_frame is not None: # Dict
1535 m = hnode.Leaf("Dict", color_e.OtherConst)
1536 x1 = hnode.Array([m])
1537 for k1, v1 in self.captured_frame.iteritems():
1538 x1.children.append(NewLeaf(k1, color_e.StringConst))
1539 x1.children.append(v1.AbbreviatedTree(trav=trav))
1540 L.append(Field('captured_frame', x1))
1541
1542 return out_node
1543
1544 def AbbreviatedTree(self, trav=None):
1545 # type: (Optional[TraversalState]) -> hnode_t
1546 return self._AbbreviatedTree(trav=trav)
1547
1548 class Place(value_t):
1549 _type_tag = 20
1550 __slots__ = ('lval', 'frame')
1551
1552 def __init__(self, lval, frame):
1553 # type: (y_lvalue_t, Dict[str, Cell]) -> None
1554 self.lval = lval
1555 self.frame = frame
1556
1557 @staticmethod
1558 def CreateNull(alloc_lists=False):
1559 # type: () -> value.Place
1560 return value.Place(cast(y_lvalue_t, None), cast('Dict[str, Cell]', None))
1561
1562 def PrettyTree(self, trav=None):
1563 # type: (Optional[TraversalState]) -> hnode_t
1564 trav = trav or TraversalState()
1565 heap_id = id(self)
1566 if heap_id in trav.seen:
1567 return hnode.AlreadySeen(heap_id)
1568 trav.seen[heap_id] = True
1569 out_node = NewRecord('value.Place')
1570 L = out_node.fields
1571
1572 assert self.lval is not None
1573 x0 = self.lval.PrettyTree(trav=trav)
1574 L.append(Field('lval', x0))
1575
1576 if self.frame is not None: # Dict
1577 m = hnode.Leaf("Dict", color_e.OtherConst)
1578 x1 = hnode.Array([m])
1579 for k1, v1 in self.frame.iteritems():
1580 x1.children.append(NewLeaf(k1, color_e.StringConst))
1581 x1.children.append(v1.PrettyTree(trav=trav))
1582 L.append(Field('frame', x1))
1583
1584 return out_node
1585
1586 def _AbbreviatedTree(self, trav=None):
1587 # type: (Optional[TraversalState]) -> hnode_t
1588 trav = trav or TraversalState()
1589 heap_id = id(self)
1590 if heap_id in trav.seen:
1591 return hnode.AlreadySeen(heap_id)
1592 trav.seen[heap_id] = True
1593 out_node = NewRecord('value.Place')
1594 L = out_node.fields
1595 assert self.lval is not None
1596 x0 = self.lval.AbbreviatedTree(trav=trav)
1597 L.append(Field('lval', x0))
1598
1599 if self.frame is not None: # Dict
1600 m = hnode.Leaf("Dict", color_e.OtherConst)
1601 x1 = hnode.Array([m])
1602 for k1, v1 in self.frame.iteritems():
1603 x1.children.append(NewLeaf(k1, color_e.StringConst))
1604 x1.children.append(v1.AbbreviatedTree(trav=trav))
1605 L.append(Field('frame', x1))
1606
1607 return out_node
1608
1609 def AbbreviatedTree(self, trav=None):
1610 # type: (Optional[TraversalState]) -> hnode_t
1611 return self._AbbreviatedTree(trav=trav)
1612
1613 class Frame(value_t):
1614 _type_tag = 21
1615 __slots__ = ('frame',)
1616
1617 def __init__(self, frame):
1618 # type: (Dict[str, Cell]) -> None
1619 self.frame = frame
1620
1621 @staticmethod
1622 def CreateNull(alloc_lists=False):
1623 # type: () -> value.Frame
1624 return value.Frame(cast('Dict[str, Cell]', None))
1625
1626 def PrettyTree(self, trav=None):
1627 # type: (Optional[TraversalState]) -> hnode_t
1628 trav = trav or TraversalState()
1629 heap_id = id(self)
1630 if heap_id in trav.seen:
1631 return hnode.AlreadySeen(heap_id)
1632 trav.seen[heap_id] = True
1633 out_node = NewRecord('value.Frame')
1634 L = out_node.fields
1635
1636 if self.frame is not None: # Dict
1637 m = hnode.Leaf("Dict", color_e.OtherConst)
1638 x0 = hnode.Array([m])
1639 for k0, v0 in self.frame.iteritems():
1640 x0.children.append(NewLeaf(k0, color_e.StringConst))
1641 x0.children.append(v0.PrettyTree(trav=trav))
1642 L.append(Field('frame', x0))
1643
1644 return out_node
1645
1646 def _AbbreviatedTree(self, trav=None):
1647 # type: (Optional[TraversalState]) -> hnode_t
1648 trav = trav or TraversalState()
1649 heap_id = id(self)
1650 if heap_id in trav.seen:
1651 return hnode.AlreadySeen(heap_id)
1652 trav.seen[heap_id] = True
1653 out_node = NewRecord('value.Frame')
1654 L = out_node.fields
1655 if self.frame is not None: # Dict
1656 m = hnode.Leaf("Dict", color_e.OtherConst)
1657 x0 = hnode.Array([m])
1658 for k0, v0 in self.frame.iteritems():
1659 x0.children.append(NewLeaf(k0, color_e.StringConst))
1660 x0.children.append(v0.AbbreviatedTree(trav=trav))
1661 L.append(Field('frame', x0))
1662
1663 return out_node
1664
1665 def AbbreviatedTree(self, trav=None):
1666 # type: (Optional[TraversalState]) -> hnode_t
1667 return self._AbbreviatedTree(trav=trav)
1668
1669 class BuiltinFunc(value_t):
1670 _type_tag = 22
1671 __slots__ = ('callable',)
1672
1673 def __init__(self, callable):
1674 # type: (Any) -> None
1675 self.callable = callable
1676
1677 @staticmethod
1678 def CreateNull(alloc_lists=False):
1679 # type: () -> value.BuiltinFunc
1680 return value.BuiltinFunc(cast(Any, None))
1681
1682 def PrettyTree(self, trav=None):
1683 # type: (Optional[TraversalState]) -> hnode_t
1684 trav = trav or TraversalState()
1685 heap_id = id(self)
1686 if heap_id in trav.seen:
1687 return hnode.AlreadySeen(heap_id)
1688 trav.seen[heap_id] = True
1689 out_node = NewRecord('value.BuiltinFunc')
1690 L = out_node.fields
1691
1692 x0 = hnode.External(self.callable)
1693 L.append(Field('callable', x0))
1694
1695 return out_node
1696
1697 def _AbbreviatedTree(self, trav=None):
1698 # type: (Optional[TraversalState]) -> hnode_t
1699 trav = trav or TraversalState()
1700 heap_id = id(self)
1701 if heap_id in trav.seen:
1702 return hnode.AlreadySeen(heap_id)
1703 trav.seen[heap_id] = True
1704 out_node = NewRecord('value.BuiltinFunc')
1705 L = out_node.fields
1706 x0 = hnode.External(self.callable)
1707 L.append(Field('callable', x0))
1708
1709 return out_node
1710
1711 def AbbreviatedTree(self, trav=None):
1712 # type: (Optional[TraversalState]) -> hnode_t
1713 return self._AbbreviatedTree(trav=trav)
1714
1715 class BoundFunc(value_t):
1716 _type_tag = 23
1717 __slots__ = ('me', 'func')
1718
1719 def __init__(self, me, func):
1720 # type: (value_t, value_t) -> None
1721 self.me = me
1722 self.func = func
1723
1724 @staticmethod
1725 def CreateNull(alloc_lists=False):
1726 # type: () -> value.BoundFunc
1727 return value.BoundFunc(cast(value_t, None), cast(value_t, None))
1728
1729 def PrettyTree(self, trav=None):
1730 # type: (Optional[TraversalState]) -> hnode_t
1731 trav = trav or TraversalState()
1732 heap_id = id(self)
1733 if heap_id in trav.seen:
1734 return hnode.AlreadySeen(heap_id)
1735 trav.seen[heap_id] = True
1736 out_node = NewRecord('value.BoundFunc')
1737 L = out_node.fields
1738
1739 assert self.me is not None
1740 x0 = self.me.PrettyTree(trav=trav)
1741 L.append(Field('me', x0))
1742
1743 assert self.func is not None
1744 x1 = self.func.PrettyTree(trav=trav)
1745 L.append(Field('func', x1))
1746
1747 return out_node
1748
1749 def _AbbreviatedTree(self, trav=None):
1750 # type: (Optional[TraversalState]) -> hnode_t
1751 trav = trav or TraversalState()
1752 heap_id = id(self)
1753 if heap_id in trav.seen:
1754 return hnode.AlreadySeen(heap_id)
1755 trav.seen[heap_id] = True
1756 out_node = NewRecord('value.BoundFunc')
1757 L = out_node.fields
1758 assert self.me is not None
1759 x0 = self.me.AbbreviatedTree(trav=trav)
1760 L.append(Field('me', x0))
1761
1762 assert self.func is not None
1763 x1 = self.func.AbbreviatedTree(trav=trav)
1764 L.append(Field('func', x1))
1765
1766 return out_node
1767
1768 def AbbreviatedTree(self, trav=None):
1769 # type: (Optional[TraversalState]) -> hnode_t
1770 return self._AbbreviatedTree(trav=trav)
1771
1772 class Func(value_t):
1773 _type_tag = 24
1774 __slots__ = ('name', 'parsed', 'pos_defaults', 'named_defaults',
1775 'module_frame')
1776
1777 def __init__(self, name, parsed, pos_defaults, named_defaults,
1778 module_frame):
1779 # type: (str, Func, List[value_t], Dict[str, value_t], Dict[str, Cell]) -> None
1780 self.name = name
1781 self.parsed = parsed
1782 self.pos_defaults = pos_defaults
1783 self.named_defaults = named_defaults
1784 self.module_frame = module_frame
1785
1786 @staticmethod
1787 def CreateNull(alloc_lists=False):
1788 # type: () -> value.Func
1789 return value.Func('', cast(Func, None), [] if alloc_lists else cast('List[value_t]', None), cast('Dict[str, value_t]', None), cast('Dict[str, Cell]', None))
1790
1791 def PrettyTree(self, trav=None):
1792 # type: (Optional[TraversalState]) -> hnode_t
1793 trav = trav or TraversalState()
1794 heap_id = id(self)
1795 if heap_id in trav.seen:
1796 return hnode.AlreadySeen(heap_id)
1797 trav.seen[heap_id] = True
1798 out_node = NewRecord('value.Func')
1799 L = out_node.fields
1800
1801 x0 = NewLeaf(self.name, color_e.StringConst)
1802 L.append(Field('name', x0))
1803
1804 assert self.parsed is not None
1805 x1 = self.parsed.PrettyTree(trav=trav)
1806 L.append(Field('parsed', x1))
1807
1808 if self.pos_defaults is not None: # List
1809 x2 = hnode.Array([])
1810 for i2 in self.pos_defaults:
1811 h = (hnode.Leaf("_", color_e.OtherConst) if i2 is None else
1812 i2.PrettyTree(trav=trav))
1813 x2.children.append(h)
1814 L.append(Field('pos_defaults', x2))
1815
1816 if self.named_defaults is not None: # Dict
1817 m = hnode.Leaf("Dict", color_e.OtherConst)
1818 x3 = hnode.Array([m])
1819 for k3, v3 in self.named_defaults.iteritems():
1820 x3.children.append(NewLeaf(k3, color_e.StringConst))
1821 x3.children.append(v3.PrettyTree(trav=trav))
1822 L.append(Field('named_defaults', x3))
1823
1824 if self.module_frame is not None: # Dict
1825 m = hnode.Leaf("Dict", color_e.OtherConst)
1826 x4 = hnode.Array([m])
1827 for k4, v4 in self.module_frame.iteritems():
1828 x4.children.append(NewLeaf(k4, color_e.StringConst))
1829 x4.children.append(v4.PrettyTree(trav=trav))
1830 L.append(Field('module_frame', x4))
1831
1832 return out_node
1833
1834 def _AbbreviatedTree(self, trav=None):
1835 # type: (Optional[TraversalState]) -> hnode_t
1836 trav = trav or TraversalState()
1837 heap_id = id(self)
1838 if heap_id in trav.seen:
1839 return hnode.AlreadySeen(heap_id)
1840 trav.seen[heap_id] = True
1841 out_node = NewRecord('value.Func')
1842 L = out_node.fields
1843 x0 = NewLeaf(self.name, color_e.StringConst)
1844 L.append(Field('name', x0))
1845
1846 assert self.parsed is not None
1847 x1 = self.parsed.AbbreviatedTree(trav=trav)
1848 L.append(Field('parsed', x1))
1849
1850 if self.pos_defaults is not None: # List
1851 x2 = hnode.Array([])
1852 for i2 in self.pos_defaults:
1853 h = (hnode.Leaf("_", color_e.OtherConst) if i2 is None else
1854 i2.AbbreviatedTree(trav=trav))
1855 x2.children.append(h)
1856 L.append(Field('pos_defaults', x2))
1857
1858 if self.named_defaults is not None: # Dict
1859 m = hnode.Leaf("Dict", color_e.OtherConst)
1860 x3 = hnode.Array([m])
1861 for k3, v3 in self.named_defaults.iteritems():
1862 x3.children.append(NewLeaf(k3, color_e.StringConst))
1863 x3.children.append(v3.AbbreviatedTree(trav=trav))
1864 L.append(Field('named_defaults', x3))
1865
1866 if self.module_frame is not None: # Dict
1867 m = hnode.Leaf("Dict", color_e.OtherConst)
1868 x4 = hnode.Array([m])
1869 for k4, v4 in self.module_frame.iteritems():
1870 x4.children.append(NewLeaf(k4, color_e.StringConst))
1871 x4.children.append(v4.AbbreviatedTree(trav=trav))
1872 L.append(Field('module_frame', x4))
1873
1874 return out_node
1875
1876 def AbbreviatedTree(self, trav=None):
1877 # type: (Optional[TraversalState]) -> hnode_t
1878 return self._AbbreviatedTree(trav=trav)
1879
1880 class BuiltinProc(value_t):
1881 _type_tag = 25
1882 __slots__ = ('builtin',)
1883
1884 def __init__(self, builtin):
1885 # type: (Any) -> None
1886 self.builtin = builtin
1887
1888 @staticmethod
1889 def CreateNull(alloc_lists=False):
1890 # type: () -> value.BuiltinProc
1891 return value.BuiltinProc(cast(Any, 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.BuiltinProc')
1901 L = out_node.fields
1902
1903 x0 = hnode.External(self.builtin)
1904 L.append(Field('builtin', x0))
1905
1906 return out_node
1907
1908 def _AbbreviatedTree(self, trav=None):
1909 # type: (Optional[TraversalState]) -> hnode_t
1910 trav = trav or TraversalState()
1911 heap_id = id(self)
1912 if heap_id in trav.seen:
1913 return hnode.AlreadySeen(heap_id)
1914 trav.seen[heap_id] = True
1915 out_node = NewRecord('value.BuiltinProc')
1916 L = out_node.fields
1917 x0 = hnode.External(self.builtin)
1918 L.append(Field('builtin', x0))
1919
1920 return out_node
1921
1922 def AbbreviatedTree(self, trav=None):
1923 # type: (Optional[TraversalState]) -> hnode_t
1924 return self._AbbreviatedTree(trav=trav)
1925
1926 class Proc(value_t):
1927 _type_tag = 26
1928 __slots__ = ('name', 'name_tok', 'sig', 'body', 'defaults', 'sh_compat',
1929 'module_frame')
1930
1931 def __init__(self, name, name_tok, sig, body, defaults, sh_compat,
1932 module_frame):
1933 # type: (str, Token, proc_sig_t, command_t, Optional[ProcDefaults], bool, Dict[str, Cell]) -> None
1934 self.name = name
1935 self.name_tok = name_tok
1936 self.sig = sig
1937 self.body = body
1938 self.defaults = defaults
1939 self.sh_compat = sh_compat
1940 self.module_frame = module_frame
1941
1942 @staticmethod
1943 def CreateNull(alloc_lists=False):
1944 # type: () -> value.Proc
1945 return value.Proc('', cast(Token, None), cast(proc_sig_t, None), cast(command_t, None), cast('Optional[ProcDefaults]', None), False, cast('Dict[str, Cell]', None))
1946
1947 def PrettyTree(self, trav=None):
1948 # type: (Optional[TraversalState]) -> hnode_t
1949 trav = trav or TraversalState()
1950 heap_id = id(self)
1951 if heap_id in trav.seen:
1952 return hnode.AlreadySeen(heap_id)
1953 trav.seen[heap_id] = True
1954 out_node = NewRecord('value.Proc')
1955 L = out_node.fields
1956
1957 x0 = NewLeaf(self.name, color_e.StringConst)
1958 L.append(Field('name', x0))
1959
1960 assert self.name_tok is not None
1961 x1 = self.name_tok.PrettyTree(trav=trav)
1962 L.append(Field('name_tok', x1))
1963
1964 assert self.sig is not None
1965 x2 = self.sig.PrettyTree(trav=trav)
1966 L.append(Field('sig', x2))
1967
1968 assert self.body is not None
1969 x3 = self.body.PrettyTree(trav=trav)
1970 L.append(Field('body', x3))
1971
1972 if self.defaults is not None: # Optional
1973 x4 = self.defaults.PrettyTree(trav=trav)
1974 L.append(Field('defaults', x4))
1975
1976 x5 = hnode.Leaf('T' if self.sh_compat else 'F', color_e.OtherConst)
1977 L.append(Field('sh_compat', x5))
1978
1979 if self.module_frame is not None: # Dict
1980 m = hnode.Leaf("Dict", color_e.OtherConst)
1981 x6 = hnode.Array([m])
1982 for k6, v6 in self.module_frame.iteritems():
1983 x6.children.append(NewLeaf(k6, color_e.StringConst))
1984 x6.children.append(v6.PrettyTree(trav=trav))
1985 L.append(Field('module_frame', x6))
1986
1987 return out_node
1988
1989 def _AbbreviatedTree(self, trav=None):
1990 # type: (Optional[TraversalState]) -> hnode_t
1991 trav = trav or TraversalState()
1992 heap_id = id(self)
1993 if heap_id in trav.seen:
1994 return hnode.AlreadySeen(heap_id)
1995 trav.seen[heap_id] = True
1996 out_node = NewRecord('value.Proc')
1997 L = out_node.fields
1998 x0 = NewLeaf(self.name, color_e.StringConst)
1999 L.append(Field('name', x0))
2000
2001 assert self.name_tok is not None
2002 x1 = self.name_tok.AbbreviatedTree(trav=trav)
2003 L.append(Field('name_tok', x1))
2004
2005 assert self.sig is not None
2006 x2 = self.sig.AbbreviatedTree(trav=trav)
2007 L.append(Field('sig', x2))
2008
2009 assert self.body is not None
2010 x3 = self.body.AbbreviatedTree(trav=trav)
2011 L.append(Field('body', x3))
2012
2013 if self.defaults is not None: # Optional
2014 x4 = self.defaults.AbbreviatedTree(trav=trav)
2015 L.append(Field('defaults', x4))
2016
2017 x5 = hnode.Leaf('T' if self.sh_compat else 'F', color_e.OtherConst)
2018 L.append(Field('sh_compat', x5))
2019
2020 if self.module_frame is not None: # Dict
2021 m = hnode.Leaf("Dict", color_e.OtherConst)
2022 x6 = hnode.Array([m])
2023 for k6, v6 in self.module_frame.iteritems():
2024 x6.children.append(NewLeaf(k6, color_e.StringConst))
2025 x6.children.append(v6.AbbreviatedTree(trav=trav))
2026 L.append(Field('module_frame', x6))
2027
2028 return out_node
2029
2030 def AbbreviatedTree(self, trav=None):
2031 # type: (Optional[TraversalState]) -> hnode_t
2032 return self._AbbreviatedTree(trav=trav)
2033
2034 class Range(value_t):
2035 _type_tag = 27
2036 __slots__ = ('lower', 'upper')
2037
2038 def __init__(self, lower, upper):
2039 # type: (int, int) -> None
2040 self.lower = lower
2041 self.upper = upper
2042
2043 @staticmethod
2044 def CreateNull(alloc_lists=False):
2045 # type: () -> value.Range
2046 return value.Range(-1, -1)
2047
2048 def PrettyTree(self, trav=None):
2049 # type: (Optional[TraversalState]) -> hnode_t
2050 trav = trav or TraversalState()
2051 heap_id = id(self)
2052 if heap_id in trav.seen:
2053 return hnode.AlreadySeen(heap_id)
2054 trav.seen[heap_id] = True
2055 out_node = NewRecord('value.Range')
2056 L = out_node.fields
2057
2058 x0 = hnode.Leaf(str(self.lower), color_e.OtherConst)
2059 L.append(Field('lower', x0))
2060
2061 x1 = hnode.Leaf(str(self.upper), color_e.OtherConst)
2062 L.append(Field('upper', x1))
2063
2064 return out_node
2065
2066 def _AbbreviatedTree(self, trav=None):
2067 # type: (Optional[TraversalState]) -> hnode_t
2068 trav = trav or TraversalState()
2069 heap_id = id(self)
2070 if heap_id in trav.seen:
2071 return hnode.AlreadySeen(heap_id)
2072 trav.seen[heap_id] = True
2073 out_node = NewRecord('value.Range')
2074 L = out_node.fields
2075 x0 = hnode.Leaf(str(self.lower), color_e.OtherConst)
2076 L.append(Field('lower', x0))
2077
2078 x1 = hnode.Leaf(str(self.upper), color_e.OtherConst)
2079 L.append(Field('upper', x1))
2080
2081 return out_node
2082
2083 def AbbreviatedTree(self, trav=None):
2084 # type: (Optional[TraversalState]) -> hnode_t
2085 return self._AbbreviatedTree(trav=trav)
2086
2087 class Slice(value_t):
2088 _type_tag = 28
2089 __slots__ = ('lower', 'upper')
2090
2091 def __init__(self, lower, upper):
2092 # type: (Optional[IntBox], Optional[IntBox]) -> None
2093 self.lower = lower
2094 self.upper = upper
2095
2096 @staticmethod
2097 def CreateNull(alloc_lists=False):
2098 # type: () -> value.Slice
2099 return value.Slice(cast('Optional[IntBox]', None), cast('Optional[IntBox]', None))
2100
2101 def PrettyTree(self, trav=None):
2102 # type: (Optional[TraversalState]) -> hnode_t
2103 trav = trav or TraversalState()
2104 heap_id = id(self)
2105 if heap_id in trav.seen:
2106 return hnode.AlreadySeen(heap_id)
2107 trav.seen[heap_id] = True
2108 out_node = NewRecord('value.Slice')
2109 L = out_node.fields
2110
2111 if self.lower is not None: # Optional
2112 x0 = self.lower.PrettyTree(trav=trav)
2113 L.append(Field('lower', x0))
2114
2115 if self.upper is not None: # Optional
2116 x1 = self.upper.PrettyTree(trav=trav)
2117 L.append(Field('upper', x1))
2118
2119 return out_node
2120
2121 def _AbbreviatedTree(self, trav=None):
2122 # type: (Optional[TraversalState]) -> hnode_t
2123 trav = trav or TraversalState()
2124 heap_id = id(self)
2125 if heap_id in trav.seen:
2126 return hnode.AlreadySeen(heap_id)
2127 trav.seen[heap_id] = True
2128 out_node = NewRecord('value.Slice')
2129 L = out_node.fields
2130 if self.lower is not None: # Optional
2131 x0 = self.lower.AbbreviatedTree(trav=trav)
2132 L.append(Field('lower', x0))
2133
2134 if self.upper is not None: # Optional
2135 x1 = self.upper.AbbreviatedTree(trav=trav)
2136 L.append(Field('upper', x1))
2137
2138 return out_node
2139
2140 def AbbreviatedTree(self, trav=None):
2141 # type: (Optional[TraversalState]) -> hnode_t
2142 return self._AbbreviatedTree(trav=trav)
2143
2144 pass
2145
2146class IntBox(pybase.CompoundObj):
2147 _type_tag = 64
2148 __slots__ = ('i',)
2149
2150 def __init__(self, i):
2151 # type: (int) -> None
2152 self.i = i
2153
2154 @staticmethod
2155 def CreateNull(alloc_lists=False):
2156 # type: () -> IntBox
2157 return IntBox(-1)
2158
2159 def PrettyTree(self, trav=None):
2160 # type: (Optional[TraversalState]) -> hnode_t
2161 trav = trav or TraversalState()
2162 heap_id = id(self)
2163 if heap_id in trav.seen:
2164 return hnode.AlreadySeen(heap_id)
2165 trav.seen[heap_id] = True
2166 out_node = NewRecord('IntBox')
2167 L = out_node.fields
2168
2169 x0 = hnode.Leaf(str(self.i), color_e.OtherConst)
2170 L.append(Field('i', x0))
2171
2172 return out_node
2173
2174 def _AbbreviatedTree(self, trav=None):
2175 # type: (Optional[TraversalState]) -> hnode_t
2176 trav = trav or TraversalState()
2177 heap_id = id(self)
2178 if heap_id in trav.seen:
2179 return hnode.AlreadySeen(heap_id)
2180 trav.seen[heap_id] = True
2181 out_node = NewRecord('IntBox')
2182 L = out_node.fields
2183 x0 = hnode.Leaf(str(self.i), color_e.OtherConst)
2184 L.append(Field('i', x0))
2185
2186 return out_node
2187
2188 def AbbreviatedTree(self, trav=None):
2189 # type: (Optional[TraversalState]) -> hnode_t
2190 return self._AbbreviatedTree(trav=trav)
2191
2192class ProcDefaults(pybase.CompoundObj):
2193 _type_tag = 65
2194 __slots__ = ('for_word', 'for_typed', 'for_named', 'for_block')
2195
2196 def __init__(self, for_word, for_typed, for_named, for_block):
2197 # type: (Optional[List[value_t]], Optional[List[value_t]], Optional[Dict[str, value_t]], Optional[value_t]) -> None
2198 self.for_word = for_word
2199 self.for_typed = for_typed
2200 self.for_named = for_named
2201 self.for_block = for_block
2202
2203 @staticmethod
2204 def CreateNull(alloc_lists=False):
2205 # type: () -> ProcDefaults
2206 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))
2207
2208 def PrettyTree(self, trav=None):
2209 # type: (Optional[TraversalState]) -> hnode_t
2210 trav = trav or TraversalState()
2211 heap_id = id(self)
2212 if heap_id in trav.seen:
2213 return hnode.AlreadySeen(heap_id)
2214 trav.seen[heap_id] = True
2215 out_node = NewRecord('ProcDefaults')
2216 L = out_node.fields
2217
2218 if self.for_word is not None: # List
2219 x0 = hnode.Array([])
2220 for i0 in self.for_word:
2221 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
2222 i0.PrettyTree(trav=trav))
2223 x0.children.append(h)
2224 L.append(Field('for_word', x0))
2225
2226 if self.for_typed is not None: # List
2227 x1 = hnode.Array([])
2228 for i1 in self.for_typed:
2229 h = (hnode.Leaf("_", color_e.OtherConst) if i1 is None else
2230 i1.PrettyTree(trav=trav))
2231 x1.children.append(h)
2232 L.append(Field('for_typed', x1))
2233
2234 if self.for_named is not None: # Dict
2235 m = hnode.Leaf("Dict", color_e.OtherConst)
2236 x2 = hnode.Array([m])
2237 for k2, v2 in self.for_named.iteritems():
2238 x2.children.append(NewLeaf(k2, color_e.StringConst))
2239 x2.children.append(v2.PrettyTree(trav=trav))
2240 L.append(Field('for_named', x2))
2241
2242 if self.for_block is not None: # Optional
2243 x3 = self.for_block.PrettyTree(trav=trav)
2244 L.append(Field('for_block', x3))
2245
2246 return out_node
2247
2248 def _AbbreviatedTree(self, trav=None):
2249 # type: (Optional[TraversalState]) -> hnode_t
2250 trav = trav or TraversalState()
2251 heap_id = id(self)
2252 if heap_id in trav.seen:
2253 return hnode.AlreadySeen(heap_id)
2254 trav.seen[heap_id] = True
2255 out_node = NewRecord('ProcDefaults')
2256 L = out_node.fields
2257 if self.for_word is not None: # List
2258 x0 = hnode.Array([])
2259 for i0 in self.for_word:
2260 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
2261 i0.AbbreviatedTree(trav=trav))
2262 x0.children.append(h)
2263 L.append(Field('for_word', x0))
2264
2265 if self.for_typed is not None: # List
2266 x1 = hnode.Array([])
2267 for i1 in self.for_typed:
2268 h = (hnode.Leaf("_", color_e.OtherConst) if i1 is None else
2269 i1.AbbreviatedTree(trav=trav))
2270 x1.children.append(h)
2271 L.append(Field('for_typed', x1))
2272
2273 if self.for_named is not None: # Dict
2274 m = hnode.Leaf("Dict", color_e.OtherConst)
2275 x2 = hnode.Array([m])
2276 for k2, v2 in self.for_named.iteritems():
2277 x2.children.append(NewLeaf(k2, color_e.StringConst))
2278 x2.children.append(v2.AbbreviatedTree(trav=trav))
2279 L.append(Field('for_named', x2))
2280
2281 if self.for_block is not None: # Optional
2282 x3 = self.for_block.AbbreviatedTree(trav=trav)
2283 L.append(Field('for_block', x3))
2284
2285 return out_node
2286
2287 def AbbreviatedTree(self, trav=None):
2288 # type: (Optional[TraversalState]) -> hnode_t
2289 return self._AbbreviatedTree(trav=trav)
2290
2291class LeftName(y_lvalue_t, sh_lvalue_t):
2292 _type_tag = 66
2293 __slots__ = ('name', 'blame_loc')
2294
2295 def __init__(self, name, blame_loc):
2296 # type: (str, loc_t) -> None
2297 self.name = name
2298 self.blame_loc = blame_loc
2299
2300 @staticmethod
2301 def CreateNull(alloc_lists=False):
2302 # type: () -> LeftName
2303 return LeftName('', cast(loc_t, None))
2304
2305 def PrettyTree(self, trav=None):
2306 # type: (Optional[TraversalState]) -> hnode_t
2307 trav = trav or TraversalState()
2308 heap_id = id(self)
2309 if heap_id in trav.seen:
2310 return hnode.AlreadySeen(heap_id)
2311 trav.seen[heap_id] = True
2312 out_node = NewRecord('LeftName')
2313 L = out_node.fields
2314
2315 x0 = NewLeaf(self.name, color_e.StringConst)
2316 L.append(Field('name', x0))
2317
2318 assert self.blame_loc is not None
2319 x1 = self.blame_loc.PrettyTree(trav=trav)
2320 L.append(Field('blame_loc', x1))
2321
2322 return out_node
2323
2324 def _AbbreviatedTree(self, trav=None):
2325 # type: (Optional[TraversalState]) -> hnode_t
2326 trav = trav or TraversalState()
2327 heap_id = id(self)
2328 if heap_id in trav.seen:
2329 return hnode.AlreadySeen(heap_id)
2330 trav.seen[heap_id] = True
2331 out_node = NewRecord('LeftName')
2332 L = out_node.fields
2333 x0 = NewLeaf(self.name, color_e.StringConst)
2334 L.append(Field('name', x0))
2335
2336 assert self.blame_loc is not None
2337 x1 = self.blame_loc.AbbreviatedTree(trav=trav)
2338 L.append(Field('blame_loc', x1))
2339
2340 return out_node
2341
2342 def AbbreviatedTree(self, trav=None):
2343 # type: (Optional[TraversalState]) -> hnode_t
2344 return self._AbbreviatedTree(trav=trav)
2345
2346class RegexMatch(regex_match_t, value_t):
2347 _type_tag = 67
2348 __slots__ = ('s', 'indices', 'ops')
2349
2350 def __init__(self, s, indices, ops):
2351 # type: (str, List[int], eggex_ops_t) -> None
2352 self.s = s
2353 self.indices = indices
2354 self.ops = ops
2355
2356 @staticmethod
2357 def CreateNull(alloc_lists=False):
2358 # type: () -> RegexMatch
2359 return RegexMatch('', [] if alloc_lists else cast('List[int]', None), cast(eggex_ops_t, None))
2360
2361 def PrettyTree(self, trav=None):
2362 # type: (Optional[TraversalState]) -> hnode_t
2363 trav = trav or TraversalState()
2364 heap_id = id(self)
2365 if heap_id in trav.seen:
2366 return hnode.AlreadySeen(heap_id)
2367 trav.seen[heap_id] = True
2368 out_node = NewRecord('RegexMatch')
2369 L = out_node.fields
2370
2371 x0 = NewLeaf(self.s, color_e.StringConst)
2372 L.append(Field('s', x0))
2373
2374 if self.indices is not None: # List
2375 x1 = hnode.Array([])
2376 for i1 in self.indices:
2377 x1.children.append(hnode.Leaf(str(i1), color_e.OtherConst))
2378 L.append(Field('indices', x1))
2379
2380 assert self.ops is not None
2381 x2 = self.ops.PrettyTree(trav=trav)
2382 L.append(Field('ops', x2))
2383
2384 return out_node
2385
2386 def _AbbreviatedTree(self, trav=None):
2387 # type: (Optional[TraversalState]) -> hnode_t
2388 trav = trav or TraversalState()
2389 heap_id = id(self)
2390 if heap_id in trav.seen:
2391 return hnode.AlreadySeen(heap_id)
2392 trav.seen[heap_id] = True
2393 out_node = NewRecord('RegexMatch')
2394 L = out_node.fields
2395 x0 = NewLeaf(self.s, color_e.StringConst)
2396 L.append(Field('s', x0))
2397
2398 if self.indices is not None: # List
2399 x1 = hnode.Array([])
2400 for i1 in self.indices:
2401 x1.children.append(hnode.Leaf(str(i1), color_e.OtherConst))
2402 L.append(Field('indices', x1))
2403
2404 assert self.ops is not None
2405 x2 = self.ops.AbbreviatedTree(trav=trav)
2406 L.append(Field('ops', x2))
2407
2408 return out_node
2409
2410 def AbbreviatedTree(self, trav=None):
2411 # type: (Optional[TraversalState]) -> hnode_t
2412 return self._AbbreviatedTree(trav=trav)
2413
2414class Obj(value_t):
2415 _type_tag = 68
2416 __slots__ = ('prototype', 'd')
2417
2418 def __init__(self, prototype, d):
2419 # type: (Optional[Obj], Dict[str, value_t]) -> None
2420 self.prototype = prototype
2421 self.d = d
2422
2423 @staticmethod
2424 def CreateNull(alloc_lists=False):
2425 # type: () -> Obj
2426 return Obj(cast('Optional[Obj]', None), cast('Dict[str, value_t]', None))
2427
2428 def PrettyTree(self, trav=None):
2429 # type: (Optional[TraversalState]) -> hnode_t
2430 trav = trav or TraversalState()
2431 heap_id = id(self)
2432 if heap_id in trav.seen:
2433 return hnode.AlreadySeen(heap_id)
2434 trav.seen[heap_id] = True
2435 out_node = NewRecord('Obj')
2436 L = out_node.fields
2437
2438 if self.prototype is not None: # Optional
2439 x0 = self.prototype.PrettyTree(trav=trav)
2440 L.append(Field('prototype', x0))
2441
2442 if self.d is not None: # Dict
2443 m = hnode.Leaf("Dict", color_e.OtherConst)
2444 x1 = hnode.Array([m])
2445 for k1, v1 in self.d.iteritems():
2446 x1.children.append(NewLeaf(k1, color_e.StringConst))
2447 x1.children.append(v1.PrettyTree(trav=trav))
2448 L.append(Field('d', x1))
2449
2450 return out_node
2451
2452 def _AbbreviatedTree(self, trav=None):
2453 # type: (Optional[TraversalState]) -> hnode_t
2454 trav = trav or TraversalState()
2455 heap_id = id(self)
2456 if heap_id in trav.seen:
2457 return hnode.AlreadySeen(heap_id)
2458 trav.seen[heap_id] = True
2459 out_node = NewRecord('Obj')
2460 L = out_node.fields
2461 if self.prototype is not None: # Optional
2462 x0 = self.prototype.AbbreviatedTree(trav=trav)
2463 L.append(Field('prototype', x0))
2464
2465 if self.d is not None: # Dict
2466 m = hnode.Leaf("Dict", color_e.OtherConst)
2467 x1 = hnode.Array([m])
2468 for k1, v1 in self.d.iteritems():
2469 x1.children.append(NewLeaf(k1, color_e.StringConst))
2470 x1.children.append(v1.AbbreviatedTree(trav=trav))
2471 L.append(Field('d', x1))
2472
2473 return out_node
2474
2475 def AbbreviatedTree(self, trav=None):
2476 # type: (Optional[TraversalState]) -> hnode_t
2477 return self._AbbreviatedTree(trav=trav)
2478