OILS / _devbuild / gen / value_asdl.py View on Github | oils.pub

1750 lines, 1253 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, Func, NameType, EggexFlag, BraceGroup, SourceLine, debug_frame_t, ShFunction
7 from _devbuild.gen.runtime_asdl import Cell
8
9from asdl import runtime # For runtime.NO_SPID
10from asdl.runtime import NewRecord, NewLeaf, TraversalState
11from _devbuild.gen.hnode_asdl import color_e, hnode, hnode_e, hnode_t, Field
12
13class y_lvalue_e(object):
14 Local = 67
15 Container = 2
16
17_y_lvalue_str = {
18 2: 'Container',
19 67: 'Local',
20}
21
22def y_lvalue_str(tag, dot=True):
23 # type: (int, bool) -> str
24 v = _y_lvalue_str[tag]
25 if dot:
26 return "y_lvalue.%s" % v
27 else:
28 return v
29
30class y_lvalue_t(pybase.CompoundObj):
31 def tag(self):
32 # type: () -> int
33 return self._type_tag
34
35class y_lvalue(object):
36 class Container(y_lvalue_t):
37 _type_tag = 2
38 __slots__ = ('obj', 'index')
39
40 def __init__(self, obj, index):
41 # type: (value_t, value_t) -> None
42 self.obj = obj
43 self.index = index
44
45 @staticmethod
46 def CreateNull(alloc_lists=False):
47 # type: () -> y_lvalue.Container
48 return y_lvalue.Container(cast('value_t', None), cast('value_t', None))
49
50 def PrettyTree(self, do_abbrev, trav=None):
51 # type: (bool, Optional[TraversalState]) -> hnode_t
52 trav = trav or TraversalState()
53 heap_id = id(self)
54 if heap_id in trav.seen:
55 return hnode.AlreadySeen(heap_id)
56 trav.seen[heap_id] = True
57
58 out_node = NewRecord('y_lvalue.Container')
59 L = out_node.fields
60
61 assert self.obj is not None
62 x0 = self.obj.PrettyTree(do_abbrev, trav=trav)
63 L.append(Field('obj', x0))
64
65 assert self.index is not None
66 x1 = self.index.PrettyTree(do_abbrev, trav=trav)
67 L.append(Field('index', x1))
68
69 return out_node
70
71 pass
72
73class sh_lvalue_e(object):
74 Var = 67
75 Indexed = 2
76 Keyed = 3
77
78_sh_lvalue_str = {
79 2: 'Indexed',
80 3: 'Keyed',
81 67: 'Var',
82}
83
84def sh_lvalue_str(tag, dot=True):
85 # type: (int, bool) -> str
86 v = _sh_lvalue_str[tag]
87 if dot:
88 return "sh_lvalue.%s" % v
89 else:
90 return v
91
92class sh_lvalue_t(pybase.CompoundObj):
93 def tag(self):
94 # type: () -> int
95 return self._type_tag
96
97class sh_lvalue(object):
98 class Indexed(sh_lvalue_t):
99 _type_tag = 2
100 __slots__ = ('name', 'index', 'blame_loc')
101
102 def __init__(self, name, index, blame_loc):
103 # type: (str, int, loc_t) -> None
104 self.name = name
105 self.index = index
106 self.blame_loc = blame_loc
107
108 @staticmethod
109 def CreateNull(alloc_lists=False):
110 # type: () -> sh_lvalue.Indexed
111 return sh_lvalue.Indexed('', -1, cast('loc_t', None))
112
113 def PrettyTree(self, do_abbrev, trav=None):
114 # type: (bool, Optional[TraversalState]) -> hnode_t
115 trav = trav or TraversalState()
116 heap_id = id(self)
117 if heap_id in trav.seen:
118 return hnode.AlreadySeen(heap_id)
119 trav.seen[heap_id] = True
120
121 out_node = NewRecord('sh_lvalue.Indexed')
122 L = out_node.fields
123
124 x0 = NewLeaf(self.name, color_e.StringConst)
125 L.append(Field('name', x0))
126
127 x1 = hnode.Leaf(str(self.index), color_e.OtherConst)
128 L.append(Field('index', x1))
129
130 assert self.blame_loc is not None
131 x2 = self.blame_loc.PrettyTree(do_abbrev, trav=trav)
132 L.append(Field('blame_loc', x2))
133
134 return out_node
135
136 class Keyed(sh_lvalue_t):
137 _type_tag = 3
138 __slots__ = ('name', 'key', 'blame_loc')
139
140 def __init__(self, name, key, blame_loc):
141 # type: (str, str, loc_t) -> None
142 self.name = name
143 self.key = key
144 self.blame_loc = blame_loc
145
146 @staticmethod
147 def CreateNull(alloc_lists=False):
148 # type: () -> sh_lvalue.Keyed
149 return sh_lvalue.Keyed('', '', cast('loc_t', None))
150
151 def PrettyTree(self, do_abbrev, trav=None):
152 # type: (bool, Optional[TraversalState]) -> hnode_t
153 trav = trav or TraversalState()
154 heap_id = id(self)
155 if heap_id in trav.seen:
156 return hnode.AlreadySeen(heap_id)
157 trav.seen[heap_id] = True
158
159 out_node = NewRecord('sh_lvalue.Keyed')
160 L = out_node.fields
161
162 x0 = NewLeaf(self.name, color_e.StringConst)
163 L.append(Field('name', x0))
164
165 x1 = NewLeaf(self.key, color_e.StringConst)
166 L.append(Field('key', x1))
167
168 assert self.blame_loc is not None
169 x2 = self.blame_loc.PrettyTree(do_abbrev, trav=trav)
170 L.append(Field('blame_loc', x2))
171
172 return out_node
173
174 pass
175
176class eggex_ops_e(object):
177 No = 1
178 Yes = 2
179
180_eggex_ops_str = {
181 1: 'No',
182 2: 'Yes',
183}
184
185def eggex_ops_str(tag, dot=True):
186 # type: (int, bool) -> str
187 v = _eggex_ops_str[tag]
188 if dot:
189 return "eggex_ops.%s" % v
190 else:
191 return v
192
193class eggex_ops_t(pybase.CompoundObj):
194 def tag(self):
195 # type: () -> int
196 return self._type_tag
197
198class eggex_ops__No(eggex_ops_t):
199 _type_tag = 1
200 __slots__ = ()
201
202 def __init__(self, ):
203 # type: () -> None
204 pass
205
206 def PrettyTree(self, do_abbrev, trav=None):
207 # type: (bool, Optional[TraversalState]) -> hnode_t
208 trav = trav or TraversalState()
209 heap_id = id(self)
210 if heap_id in trav.seen:
211 return hnode.AlreadySeen(heap_id)
212 trav.seen[heap_id] = True
213
214 out_node = NewRecord('eggex_ops.No')
215 L = out_node.fields
216
217 return out_node
218
219class eggex_ops(object):
220 No = eggex_ops__No()
221
222 class Yes(eggex_ops_t):
223 _type_tag = 2
224 __slots__ = ('convert_funcs', 'convert_toks', 'capture_names')
225
226 def __init__(self, convert_funcs, convert_toks, capture_names):
227 # type: (List[Optional[value_t]], List[Optional[Token]], List[Optional[str]]) -> None
228 self.convert_funcs = convert_funcs
229 self.convert_toks = convert_toks
230 self.capture_names = capture_names
231
232 @staticmethod
233 def CreateNull(alloc_lists=False):
234 # type: () -> eggex_ops.Yes
235 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))
236
237 def PrettyTree(self, do_abbrev, trav=None):
238 # type: (bool, Optional[TraversalState]) -> hnode_t
239 trav = trav or TraversalState()
240 heap_id = id(self)
241 if heap_id in trav.seen:
242 return hnode.AlreadySeen(heap_id)
243 trav.seen[heap_id] = True
244
245 out_node = NewRecord('eggex_ops.Yes')
246 L = out_node.fields
247
248 if self.convert_funcs is not None: # List
249 x0 = hnode.Array([])
250 for i0 in self.convert_funcs:
251 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
252 i0.PrettyTree(do_abbrev, trav=trav))
253 x0.children.append(h)
254 L.append(Field('convert_funcs', x0))
255
256 if self.convert_toks is not None: # List
257 x1 = hnode.Array([])
258 for i1 in self.convert_toks:
259 h = (hnode.Leaf("_", color_e.OtherConst) if i1 is None else
260 i1.PrettyTree(do_abbrev, trav=trav))
261 x1.children.append(h)
262 L.append(Field('convert_toks', x1))
263
264 if self.capture_names is not None: # List
265 x2 = hnode.Array([])
266 for i2 in self.capture_names:
267 x2.children.append(NewLeaf(i2, color_e.StringConst))
268 L.append(Field('capture_names', x2))
269
270 return out_node
271
272 pass
273
274class regex_match_e(object):
275 No = 1
276 Yes = 68
277
278_regex_match_str = {
279 1: 'No',
280 68: 'Yes',
281}
282
283def regex_match_str(tag, dot=True):
284 # type: (int, bool) -> str
285 v = _regex_match_str[tag]
286 if dot:
287 return "regex_match.%s" % v
288 else:
289 return v
290
291class regex_match_t(pybase.CompoundObj):
292 def tag(self):
293 # type: () -> int
294 return self._type_tag
295
296class regex_match__No(regex_match_t):
297 _type_tag = 1
298 __slots__ = ()
299
300 def __init__(self, ):
301 # type: () -> None
302 pass
303
304 def PrettyTree(self, do_abbrev, trav=None):
305 # type: (bool, Optional[TraversalState]) -> hnode_t
306 trav = trav or TraversalState()
307 heap_id = id(self)
308 if heap_id in trav.seen:
309 return hnode.AlreadySeen(heap_id)
310 trav.seen[heap_id] = True
311
312 out_node = NewRecord('regex_match.No')
313 L = out_node.fields
314
315 return out_node
316
317class regex_match(object):
318 No = regex_match__No()
319
320 pass
321
322class cmd_frag_e(object):
323 LiteralBlock = 69
324 Expr = 2
325
326_cmd_frag_str = {
327 2: 'Expr',
328 69: 'LiteralBlock',
329}
330
331def cmd_frag_str(tag, dot=True):
332 # type: (int, bool) -> str
333 v = _cmd_frag_str[tag]
334 if dot:
335 return "cmd_frag.%s" % v
336 else:
337 return v
338
339class cmd_frag_t(pybase.CompoundObj):
340 def tag(self):
341 # type: () -> int
342 return self._type_tag
343
344class cmd_frag(object):
345 class Expr(cmd_frag_t):
346 _type_tag = 2
347 __slots__ = ('c',)
348
349 def __init__(self, c):
350 # type: (command_t) -> None
351 self.c = c
352
353 @staticmethod
354 def CreateNull(alloc_lists=False):
355 # type: () -> cmd_frag.Expr
356 return cmd_frag.Expr(cast('command_t', None))
357
358 def PrettyTree(self, do_abbrev, trav=None):
359 # type: (bool, Optional[TraversalState]) -> hnode_t
360 trav = trav or TraversalState()
361 heap_id = id(self)
362 if heap_id in trav.seen:
363 return hnode.AlreadySeen(heap_id)
364 trav.seen[heap_id] = True
365
366 out_node = NewRecord('cmd_frag.Expr')
367 L = out_node.fields
368
369 assert self.c is not None
370 x0 = self.c.PrettyTree(do_abbrev, trav=trav)
371 L.append(Field('c', x0))
372
373 return out_node
374
375 pass
376
377class value_e(object):
378 Interrupted = 1
379 Stdin = 2
380 Slice = 3
381 Undef = 4
382 Str = 5
383 InitializerList = 6
384 InternalStringArray = 7
385 BashArray = 8
386 BashAssoc = 9
387 Null = 10
388 Bool = 11
389 Int = 12
390 Float = 13
391 List = 14
392 Dict = 15
393 Obj = 70
394 Range = 17
395 Eggex = 18
396 Match = 68
397 Place = 20
398 Frame = 21
399 DebugFrame = 22
400 BoundFunc = 23
401 BuiltinFunc = 24
402 Func = 25
403 BuiltinProc = 26
404 Proc = 27
405 Expr = 28
406 CommandFrag = 29
407 Command = 30
408
409_value_str = {
410 1: 'Interrupted',
411 2: 'Stdin',
412 3: 'Slice',
413 4: 'Undef',
414 5: 'Str',
415 6: 'InitializerList',
416 7: 'InternalStringArray',
417 8: 'BashArray',
418 9: 'BashAssoc',
419 10: 'Null',
420 11: 'Bool',
421 12: 'Int',
422 13: 'Float',
423 14: 'List',
424 15: 'Dict',
425 17: 'Range',
426 18: 'Eggex',
427 20: 'Place',
428 21: 'Frame',
429 22: 'DebugFrame',
430 23: 'BoundFunc',
431 24: 'BuiltinFunc',
432 25: 'Func',
433 26: 'BuiltinProc',
434 27: 'Proc',
435 28: 'Expr',
436 29: 'CommandFrag',
437 30: 'Command',
438 68: 'Match',
439 70: 'Obj',
440}
441
442def value_str(tag, dot=True):
443 # type: (int, bool) -> str
444 v = _value_str[tag]
445 if dot:
446 return "value.%s" % v
447 else:
448 return v
449
450class value_t(pybase.CompoundObj):
451 def tag(self):
452 # type: () -> int
453 return self._type_tag
454
455class value__Interrupted(value_t):
456 _type_tag = 1
457 __slots__ = ()
458
459 def __init__(self, ):
460 # type: () -> None
461 pass
462
463 def PrettyTree(self, do_abbrev, trav=None):
464 # type: (bool, Optional[TraversalState]) -> hnode_t
465 trav = trav or TraversalState()
466 heap_id = id(self)
467 if heap_id in trav.seen:
468 return hnode.AlreadySeen(heap_id)
469 trav.seen[heap_id] = True
470
471 out_node = NewRecord('value.Interrupted')
472 L = out_node.fields
473
474 return out_node
475
476class value__Stdin(value_t):
477 _type_tag = 2
478 __slots__ = ()
479
480 def __init__(self, ):
481 # type: () -> None
482 pass
483
484 def PrettyTree(self, do_abbrev, trav=None):
485 # type: (bool, Optional[TraversalState]) -> hnode_t
486 trav = trav or TraversalState()
487 heap_id = id(self)
488 if heap_id in trav.seen:
489 return hnode.AlreadySeen(heap_id)
490 trav.seen[heap_id] = True
491
492 out_node = NewRecord('value.Stdin')
493 L = out_node.fields
494
495 return out_node
496
497class value__Undef(value_t):
498 _type_tag = 4
499 __slots__ = ()
500
501 def __init__(self, ):
502 # type: () -> None
503 pass
504
505 def PrettyTree(self, do_abbrev, trav=None):
506 # type: (bool, Optional[TraversalState]) -> hnode_t
507 trav = trav or TraversalState()
508 heap_id = id(self)
509 if heap_id in trav.seen:
510 return hnode.AlreadySeen(heap_id)
511 trav.seen[heap_id] = True
512
513 out_node = NewRecord('value.Undef')
514 L = out_node.fields
515
516 return out_node
517
518class value__Null(value_t):
519 _type_tag = 10
520 __slots__ = ()
521
522 def __init__(self, ):
523 # type: () -> None
524 pass
525
526 def PrettyTree(self, do_abbrev, trav=None):
527 # type: (bool, Optional[TraversalState]) -> hnode_t
528 trav = trav or TraversalState()
529 heap_id = id(self)
530 if heap_id in trav.seen:
531 return hnode.AlreadySeen(heap_id)
532 trav.seen[heap_id] = True
533
534 out_node = NewRecord('value.Null')
535 L = out_node.fields
536
537 return out_node
538
539class value(object):
540 Interrupted = value__Interrupted()
541
542 Stdin = value__Stdin()
543
544 class Slice(value_t):
545 _type_tag = 3
546 __slots__ = ('lower', 'upper')
547
548 def __init__(self, lower, upper):
549 # type: (Optional[IntBox], Optional[IntBox]) -> None
550 self.lower = lower
551 self.upper = upper
552
553 @staticmethod
554 def CreateNull(alloc_lists=False):
555 # type: () -> value.Slice
556 return value.Slice(cast('Optional[IntBox]', None), cast('Optional[IntBox]', None))
557
558 def PrettyTree(self, do_abbrev, trav=None):
559 # type: (bool, Optional[TraversalState]) -> hnode_t
560 trav = trav or TraversalState()
561 heap_id = id(self)
562 if heap_id in trav.seen:
563 return hnode.AlreadySeen(heap_id)
564 trav.seen[heap_id] = True
565
566 out_node = NewRecord('value.Slice')
567 L = out_node.fields
568
569 if self.lower is not None: # Optional
570 x0 = self.lower.PrettyTree(do_abbrev, trav=trav)
571 L.append(Field('lower', x0))
572
573 if self.upper is not None: # Optional
574 x1 = self.upper.PrettyTree(do_abbrev, trav=trav)
575 L.append(Field('upper', x1))
576
577 return out_node
578
579 Undef = value__Undef()
580
581 class Str(value_t):
582 _type_tag = 5
583 __slots__ = ('s',)
584
585 def __init__(self, s):
586 # type: (str) -> None
587 self.s = s
588
589 @staticmethod
590 def CreateNull(alloc_lists=False):
591 # type: () -> value.Str
592 return value.Str('')
593
594 def PrettyTree(self, do_abbrev, trav=None):
595 # type: (bool, Optional[TraversalState]) -> hnode_t
596 trav = trav or TraversalState()
597 heap_id = id(self)
598 if heap_id in trav.seen:
599 return hnode.AlreadySeen(heap_id)
600 trav.seen[heap_id] = True
601
602 out_node = NewRecord('value.Str')
603 L = out_node.fields
604
605 x0 = NewLeaf(self.s, color_e.StringConst)
606 L.append(Field('s', x0))
607
608 return out_node
609
610 class InitializerList(value_t):
611 _type_tag = 6
612 __slots__ = ('assigns',)
613
614 def __init__(self, assigns):
615 # type: (List[InitializerValue]) -> None
616 self.assigns = assigns
617
618 @staticmethod
619 def CreateNull(alloc_lists=False):
620 # type: () -> value.InitializerList
621 return value.InitializerList([] if alloc_lists else cast('List[InitializerValue]', None))
622
623 def PrettyTree(self, do_abbrev, trav=None):
624 # type: (bool, Optional[TraversalState]) -> hnode_t
625 trav = trav or TraversalState()
626 heap_id = id(self)
627 if heap_id in trav.seen:
628 return hnode.AlreadySeen(heap_id)
629 trav.seen[heap_id] = True
630
631 out_node = NewRecord('value.InitializerList')
632 L = out_node.fields
633
634 if self.assigns is not None: # List
635 x0 = hnode.Array([])
636 for i0 in self.assigns:
637 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
638 i0.PrettyTree(do_abbrev, trav=trav))
639 x0.children.append(h)
640 L.append(Field('assigns', x0))
641
642 return out_node
643
644 class InternalStringArray(value_t):
645 _type_tag = 7
646 __slots__ = ('strs',)
647
648 def __init__(self, strs):
649 # type: (List[str]) -> None
650 self.strs = strs
651
652 @staticmethod
653 def CreateNull(alloc_lists=False):
654 # type: () -> value.InternalStringArray
655 return value.InternalStringArray([] if alloc_lists else cast('List[str]', None))
656
657 def PrettyTree(self, do_abbrev, trav=None):
658 # type: (bool, Optional[TraversalState]) -> hnode_t
659 trav = trav or TraversalState()
660 heap_id = id(self)
661 if heap_id in trav.seen:
662 return hnode.AlreadySeen(heap_id)
663 trav.seen[heap_id] = True
664
665 out_node = NewRecord('value.InternalStringArray')
666 L = out_node.fields
667
668 if self.strs is not None: # List
669 x0 = hnode.Array([])
670 for i0 in self.strs:
671 x0.children.append(NewLeaf(i0, color_e.StringConst))
672 L.append(Field('strs', x0))
673
674 return out_node
675
676 class BashArray(value_t):
677 _type_tag = 8
678 __slots__ = ('d', 'max_index')
679
680 def __init__(self, d, max_index):
681 # type: (Dict[mops.BigInt, str], mops.BigInt) -> None
682 self.d = d
683 self.max_index = max_index
684
685 @staticmethod
686 def CreateNull(alloc_lists=False):
687 # type: () -> value.BashArray
688 return value.BashArray(cast('Dict[mops.BigInt, str]', None), mops.BigInt(-1))
689
690 def PrettyTree(self, do_abbrev, trav=None):
691 # type: (bool, Optional[TraversalState]) -> hnode_t
692 trav = trav or TraversalState()
693 heap_id = id(self)
694 if heap_id in trav.seen:
695 return hnode.AlreadySeen(heap_id)
696 trav.seen[heap_id] = True
697
698 out_node = NewRecord('value.BashArray')
699 L = out_node.fields
700
701 if self.d is not None: # Dict
702 unnamed0 = [] # type: List[hnode_t]
703 x0 = hnode.Record("", "{", "}", [], unnamed0)
704 for k0, v0 in self.d.iteritems():
705 unnamed0.append(hnode.Leaf(mops.ToStr(k0), color_e.OtherConst))
706 unnamed0.append(NewLeaf(v0, color_e.StringConst))
707 L.append(Field('d', x0))
708
709 x1 = hnode.Leaf(mops.ToStr(self.max_index), color_e.OtherConst)
710 L.append(Field('max_index', x1))
711
712 return out_node
713
714 class BashAssoc(value_t):
715 _type_tag = 9
716 __slots__ = ('d',)
717
718 def __init__(self, d):
719 # type: (Dict[str, str]) -> None
720 self.d = d
721
722 @staticmethod
723 def CreateNull(alloc_lists=False):
724 # type: () -> value.BashAssoc
725 return value.BashAssoc(cast('Dict[str, str]', None))
726
727 def PrettyTree(self, do_abbrev, trav=None):
728 # type: (bool, Optional[TraversalState]) -> hnode_t
729 trav = trav or TraversalState()
730 heap_id = id(self)
731 if heap_id in trav.seen:
732 return hnode.AlreadySeen(heap_id)
733 trav.seen[heap_id] = True
734
735 out_node = NewRecord('value.BashAssoc')
736 L = out_node.fields
737
738 if self.d is not None: # Dict
739 unnamed0 = [] # type: List[hnode_t]
740 x0 = hnode.Record("", "{", "}", [], unnamed0)
741 for k0, v0 in self.d.iteritems():
742 unnamed0.append(NewLeaf(k0, color_e.StringConst))
743 unnamed0.append(NewLeaf(v0, color_e.StringConst))
744 L.append(Field('d', x0))
745
746 return out_node
747
748 Null = value__Null()
749
750 class Bool(value_t):
751 _type_tag = 11
752 __slots__ = ('b',)
753
754 def __init__(self, b):
755 # type: (bool) -> None
756 self.b = b
757
758 @staticmethod
759 def CreateNull(alloc_lists=False):
760 # type: () -> value.Bool
761 return value.Bool(False)
762
763 def PrettyTree(self, do_abbrev, trav=None):
764 # type: (bool, Optional[TraversalState]) -> hnode_t
765 trav = trav or TraversalState()
766 heap_id = id(self)
767 if heap_id in trav.seen:
768 return hnode.AlreadySeen(heap_id)
769 trav.seen[heap_id] = True
770
771 out_node = NewRecord('value.Bool')
772 L = out_node.fields
773
774 x0 = hnode.Leaf('T' if self.b else 'F', color_e.OtherConst)
775 L.append(Field('b', x0))
776
777 return out_node
778
779 class Int(value_t):
780 _type_tag = 12
781 __slots__ = ('i',)
782
783 def __init__(self, i):
784 # type: (mops.BigInt) -> None
785 self.i = i
786
787 @staticmethod
788 def CreateNull(alloc_lists=False):
789 # type: () -> value.Int
790 return value.Int(mops.BigInt(-1))
791
792 def PrettyTree(self, do_abbrev, trav=None):
793 # type: (bool, Optional[TraversalState]) -> hnode_t
794 trav = trav or TraversalState()
795 heap_id = id(self)
796 if heap_id in trav.seen:
797 return hnode.AlreadySeen(heap_id)
798 trav.seen[heap_id] = True
799
800 out_node = NewRecord('value.Int')
801 L = out_node.fields
802
803 x0 = hnode.Leaf(mops.ToStr(self.i), color_e.OtherConst)
804 L.append(Field('i', x0))
805
806 return out_node
807
808 class Float(value_t):
809 _type_tag = 13
810 __slots__ = ('f',)
811
812 def __init__(self, f):
813 # type: (float) -> None
814 self.f = f
815
816 @staticmethod
817 def CreateNull(alloc_lists=False):
818 # type: () -> value.Float
819 return value.Float(0.0)
820
821 def PrettyTree(self, do_abbrev, trav=None):
822 # type: (bool, Optional[TraversalState]) -> hnode_t
823 trav = trav or TraversalState()
824 heap_id = id(self)
825 if heap_id in trav.seen:
826 return hnode.AlreadySeen(heap_id)
827 trav.seen[heap_id] = True
828
829 out_node = NewRecord('value.Float')
830 L = out_node.fields
831
832 x0 = hnode.Leaf(str(self.f), color_e.OtherConst)
833 L.append(Field('f', x0))
834
835 return out_node
836
837 class List(value_t):
838 _type_tag = 14
839 __slots__ = ('items',)
840
841 def __init__(self, items):
842 # type: (List[value_t]) -> None
843 self.items = items
844
845 @staticmethod
846 def CreateNull(alloc_lists=False):
847 # type: () -> value.List
848 return value.List([] if alloc_lists else cast('List[value_t]', None))
849
850 def PrettyTree(self, do_abbrev, trav=None):
851 # type: (bool, Optional[TraversalState]) -> hnode_t
852 trav = trav or TraversalState()
853 heap_id = id(self)
854 if heap_id in trav.seen:
855 return hnode.AlreadySeen(heap_id)
856 trav.seen[heap_id] = True
857
858 out_node = NewRecord('value.List')
859 L = out_node.fields
860
861 if self.items is not None: # List
862 x0 = hnode.Array([])
863 for i0 in self.items:
864 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
865 i0.PrettyTree(do_abbrev, trav=trav))
866 x0.children.append(h)
867 L.append(Field('items', x0))
868
869 return out_node
870
871 class Dict(value_t):
872 _type_tag = 15
873 __slots__ = ('d',)
874
875 def __init__(self, d):
876 # type: (Dict[str, value_t]) -> None
877 self.d = d
878
879 @staticmethod
880 def CreateNull(alloc_lists=False):
881 # type: () -> value.Dict
882 return value.Dict(cast('Dict[str, value_t]', None))
883
884 def PrettyTree(self, do_abbrev, trav=None):
885 # type: (bool, Optional[TraversalState]) -> hnode_t
886 trav = trav or TraversalState()
887 heap_id = id(self)
888 if heap_id in trav.seen:
889 return hnode.AlreadySeen(heap_id)
890 trav.seen[heap_id] = True
891
892 out_node = NewRecord('value.Dict')
893 L = out_node.fields
894
895 if self.d is not None: # Dict
896 unnamed0 = [] # type: List[hnode_t]
897 x0 = hnode.Record("", "{", "}", [], unnamed0)
898 for k0, v0 in self.d.iteritems():
899 unnamed0.append(NewLeaf(k0, color_e.StringConst))
900 unnamed0.append(v0.PrettyTree(do_abbrev, trav=trav))
901 L.append(Field('d', x0))
902
903 return out_node
904
905 class Range(value_t):
906 _type_tag = 17
907 __slots__ = ('lower', 'upper')
908
909 def __init__(self, lower, upper):
910 # type: (int, int) -> None
911 self.lower = lower
912 self.upper = upper
913
914 @staticmethod
915 def CreateNull(alloc_lists=False):
916 # type: () -> value.Range
917 return value.Range(-1, -1)
918
919 def PrettyTree(self, do_abbrev, trav=None):
920 # type: (bool, Optional[TraversalState]) -> hnode_t
921 trav = trav or TraversalState()
922 heap_id = id(self)
923 if heap_id in trav.seen:
924 return hnode.AlreadySeen(heap_id)
925 trav.seen[heap_id] = True
926
927 out_node = NewRecord('value.Range')
928 L = out_node.fields
929
930 x0 = hnode.Leaf(str(self.lower), color_e.OtherConst)
931 L.append(Field('lower', x0))
932
933 x1 = hnode.Leaf(str(self.upper), color_e.OtherConst)
934 L.append(Field('upper', x1))
935
936 return out_node
937
938 class Eggex(value_t):
939 _type_tag = 18
940 __slots__ = ('spliced', 'canonical_flags', 'convert_funcs', 'convert_toks',
941 'as_ere', 'capture_names')
942
943 def __init__(self, spliced, canonical_flags, convert_funcs, convert_toks,
944 as_ere, capture_names):
945 # type: (re_t, str, List[Optional[value_t]], List[Optional[Token]], Optional[str], List[Optional[str]]) -> None
946 self.spliced = spliced
947 self.canonical_flags = canonical_flags
948 self.convert_funcs = convert_funcs
949 self.convert_toks = convert_toks
950 self.as_ere = as_ere
951 self.capture_names = capture_names
952
953 @staticmethod
954 def CreateNull(alloc_lists=False):
955 # type: () -> value.Eggex
956 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))
957
958 def PrettyTree(self, do_abbrev, trav=None):
959 # type: (bool, Optional[TraversalState]) -> hnode_t
960 trav = trav or TraversalState()
961 heap_id = id(self)
962 if heap_id in trav.seen:
963 return hnode.AlreadySeen(heap_id)
964 trav.seen[heap_id] = True
965
966 out_node = NewRecord('value.Eggex')
967 L = out_node.fields
968
969 assert self.spliced is not None
970 x0 = self.spliced.PrettyTree(do_abbrev, trav=trav)
971 L.append(Field('spliced', x0))
972
973 x1 = NewLeaf(self.canonical_flags, color_e.StringConst)
974 L.append(Field('canonical_flags', x1))
975
976 if self.convert_funcs is not None: # List
977 x2 = hnode.Array([])
978 for i2 in self.convert_funcs:
979 h = (hnode.Leaf("_", color_e.OtherConst) if i2 is None else
980 i2.PrettyTree(do_abbrev, trav=trav))
981 x2.children.append(h)
982 L.append(Field('convert_funcs', x2))
983
984 if self.convert_toks is not None: # List
985 x3 = hnode.Array([])
986 for i3 in self.convert_toks:
987 h = (hnode.Leaf("_", color_e.OtherConst) if i3 is None else
988 i3.PrettyTree(do_abbrev, trav=trav))
989 x3.children.append(h)
990 L.append(Field('convert_toks', x3))
991
992 if self.as_ere is not None: # Optional
993 x4 = NewLeaf(self.as_ere, color_e.StringConst)
994 L.append(Field('as_ere', x4))
995
996 if self.capture_names is not None: # List
997 x5 = hnode.Array([])
998 for i5 in self.capture_names:
999 x5.children.append(NewLeaf(i5, color_e.StringConst))
1000 L.append(Field('capture_names', x5))
1001
1002 return out_node
1003
1004 class Place(value_t):
1005 _type_tag = 20
1006 __slots__ = ('lval', 'frame')
1007
1008 def __init__(self, lval, frame):
1009 # type: (y_lvalue_t, Dict[str, Cell]) -> None
1010 self.lval = lval
1011 self.frame = frame
1012
1013 @staticmethod
1014 def CreateNull(alloc_lists=False):
1015 # type: () -> value.Place
1016 return value.Place(cast('y_lvalue_t', None), cast('Dict[str, Cell]', None))
1017
1018 def PrettyTree(self, do_abbrev, trav=None):
1019 # type: (bool, Optional[TraversalState]) -> hnode_t
1020 trav = trav or TraversalState()
1021 heap_id = id(self)
1022 if heap_id in trav.seen:
1023 return hnode.AlreadySeen(heap_id)
1024 trav.seen[heap_id] = True
1025
1026 out_node = NewRecord('value.Place')
1027 L = out_node.fields
1028
1029 assert self.lval is not None
1030 x0 = self.lval.PrettyTree(do_abbrev, trav=trav)
1031 L.append(Field('lval', x0))
1032
1033 if self.frame is not None: # Dict
1034 unnamed1 = [] # type: List[hnode_t]
1035 x1 = hnode.Record("", "{", "}", [], unnamed1)
1036 for k1, v1 in self.frame.iteritems():
1037 unnamed1.append(NewLeaf(k1, color_e.StringConst))
1038 unnamed1.append(v1.PrettyTree(do_abbrev, trav=trav))
1039 L.append(Field('frame', x1))
1040
1041 return out_node
1042
1043 class Frame(value_t):
1044 _type_tag = 21
1045 __slots__ = ('frame',)
1046
1047 def __init__(self, frame):
1048 # type: (Dict[str, Cell]) -> None
1049 self.frame = frame
1050
1051 @staticmethod
1052 def CreateNull(alloc_lists=False):
1053 # type: () -> value.Frame
1054 return value.Frame(cast('Dict[str, Cell]', None))
1055
1056 def PrettyTree(self, do_abbrev, trav=None):
1057 # type: (bool, Optional[TraversalState]) -> hnode_t
1058 trav = trav or TraversalState()
1059 heap_id = id(self)
1060 if heap_id in trav.seen:
1061 return hnode.AlreadySeen(heap_id)
1062 trav.seen[heap_id] = True
1063
1064 out_node = NewRecord('value.Frame')
1065 L = out_node.fields
1066
1067 if self.frame is not None: # Dict
1068 unnamed0 = [] # type: List[hnode_t]
1069 x0 = hnode.Record("", "{", "}", [], unnamed0)
1070 for k0, v0 in self.frame.iteritems():
1071 unnamed0.append(NewLeaf(k0, color_e.StringConst))
1072 unnamed0.append(v0.PrettyTree(do_abbrev, trav=trav))
1073 L.append(Field('frame', x0))
1074
1075 return out_node
1076
1077 class DebugFrame(value_t):
1078 _type_tag = 22
1079 __slots__ = ('frame',)
1080
1081 def __init__(self, frame):
1082 # type: (debug_frame_t) -> None
1083 self.frame = frame
1084
1085 @staticmethod
1086 def CreateNull(alloc_lists=False):
1087 # type: () -> value.DebugFrame
1088 return value.DebugFrame(cast('debug_frame_t', None))
1089
1090 def PrettyTree(self, do_abbrev, trav=None):
1091 # type: (bool, Optional[TraversalState]) -> hnode_t
1092 trav = trav or TraversalState()
1093 heap_id = id(self)
1094 if heap_id in trav.seen:
1095 return hnode.AlreadySeen(heap_id)
1096 trav.seen[heap_id] = True
1097
1098 out_node = NewRecord('value.DebugFrame')
1099 L = out_node.fields
1100
1101 assert self.frame is not None
1102 x0 = self.frame.PrettyTree(do_abbrev, trav=trav)
1103 L.append(Field('frame', x0))
1104
1105 return out_node
1106
1107 class BoundFunc(value_t):
1108 _type_tag = 23
1109 __slots__ = ('me', 'func')
1110
1111 def __init__(self, me, func):
1112 # type: (value_t, value_t) -> None
1113 self.me = me
1114 self.func = func
1115
1116 @staticmethod
1117 def CreateNull(alloc_lists=False):
1118 # type: () -> value.BoundFunc
1119 return value.BoundFunc(cast('value_t', None), cast('value_t', None))
1120
1121 def PrettyTree(self, do_abbrev, trav=None):
1122 # type: (bool, Optional[TraversalState]) -> hnode_t
1123 trav = trav or TraversalState()
1124 heap_id = id(self)
1125 if heap_id in trav.seen:
1126 return hnode.AlreadySeen(heap_id)
1127 trav.seen[heap_id] = True
1128
1129 out_node = NewRecord('value.BoundFunc')
1130 L = out_node.fields
1131
1132 assert self.me is not None
1133 x0 = self.me.PrettyTree(do_abbrev, trav=trav)
1134 L.append(Field('me', x0))
1135
1136 assert self.func is not None
1137 x1 = self.func.PrettyTree(do_abbrev, trav=trav)
1138 L.append(Field('func', x1))
1139
1140 return out_node
1141
1142 class BuiltinFunc(value_t):
1143 _type_tag = 24
1144 __slots__ = ('callable',)
1145
1146 def __init__(self, callable):
1147 # type: (Any) -> None
1148 self.callable = callable
1149
1150 @staticmethod
1151 def CreateNull(alloc_lists=False):
1152 # type: () -> value.BuiltinFunc
1153 return value.BuiltinFunc(cast('Any', None))
1154
1155 def PrettyTree(self, do_abbrev, trav=None):
1156 # type: (bool, Optional[TraversalState]) -> hnode_t
1157 trav = trav or TraversalState()
1158 heap_id = id(self)
1159 if heap_id in trav.seen:
1160 return hnode.AlreadySeen(heap_id)
1161 trav.seen[heap_id] = True
1162
1163 out_node = NewRecord('value.BuiltinFunc')
1164 L = out_node.fields
1165
1166 x0 = NewLeaf(str(self.callable), color_e.External)
1167 L.append(Field('callable', x0))
1168
1169 return out_node
1170
1171 class Func(value_t):
1172 _type_tag = 25
1173 __slots__ = ('name', 'parsed', 'pos_defaults', 'named_defaults',
1174 'captured_frame', 'module_frame')
1175
1176 def __init__(self, name, parsed, pos_defaults, named_defaults,
1177 captured_frame, module_frame):
1178 # type: (str, Func, List[value_t], Dict[str, value_t], Dict[str, Cell], Dict[str, Cell]) -> None
1179 self.name = name
1180 self.parsed = parsed
1181 self.pos_defaults = pos_defaults
1182 self.named_defaults = named_defaults
1183 self.captured_frame = captured_frame
1184 self.module_frame = module_frame
1185
1186 @staticmethod
1187 def CreateNull(alloc_lists=False):
1188 # type: () -> value.Func
1189 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), cast('Dict[str, Cell]', None))
1190
1191 def PrettyTree(self, do_abbrev, trav=None):
1192 # type: (bool, Optional[TraversalState]) -> hnode_t
1193 trav = trav or TraversalState()
1194 heap_id = id(self)
1195 if heap_id in trav.seen:
1196 return hnode.AlreadySeen(heap_id)
1197 trav.seen[heap_id] = True
1198
1199 out_node = NewRecord('value.Func')
1200 L = out_node.fields
1201
1202 x0 = NewLeaf(self.name, color_e.StringConst)
1203 L.append(Field('name', x0))
1204
1205 assert self.parsed is not None
1206 x1 = self.parsed.PrettyTree(do_abbrev, trav=trav)
1207 L.append(Field('parsed', x1))
1208
1209 if self.pos_defaults is not None: # List
1210 x2 = hnode.Array([])
1211 for i2 in self.pos_defaults:
1212 h = (hnode.Leaf("_", color_e.OtherConst) if i2 is None else
1213 i2.PrettyTree(do_abbrev, trav=trav))
1214 x2.children.append(h)
1215 L.append(Field('pos_defaults', x2))
1216
1217 if self.named_defaults is not None: # Dict
1218 unnamed3 = [] # type: List[hnode_t]
1219 x3 = hnode.Record("", "{", "}", [], unnamed3)
1220 for k3, v3 in self.named_defaults.iteritems():
1221 unnamed3.append(NewLeaf(k3, color_e.StringConst))
1222 unnamed3.append(v3.PrettyTree(do_abbrev, trav=trav))
1223 L.append(Field('named_defaults', x3))
1224
1225 if self.captured_frame is not None: # Dict
1226 unnamed4 = [] # type: List[hnode_t]
1227 x4 = hnode.Record("", "{", "}", [], unnamed4)
1228 for k4, v4 in self.captured_frame.iteritems():
1229 unnamed4.append(NewLeaf(k4, color_e.StringConst))
1230 unnamed4.append(v4.PrettyTree(do_abbrev, trav=trav))
1231 L.append(Field('captured_frame', x4))
1232
1233 if self.module_frame is not None: # Dict
1234 unnamed5 = [] # type: List[hnode_t]
1235 x5 = hnode.Record("", "{", "}", [], unnamed5)
1236 for k5, v5 in self.module_frame.iteritems():
1237 unnamed5.append(NewLeaf(k5, color_e.StringConst))
1238 unnamed5.append(v5.PrettyTree(do_abbrev, trav=trav))
1239 L.append(Field('module_frame', x5))
1240
1241 return out_node
1242
1243 class BuiltinProc(value_t):
1244 _type_tag = 26
1245 __slots__ = ('builtin',)
1246
1247 def __init__(self, builtin):
1248 # type: (Any) -> None
1249 self.builtin = builtin
1250
1251 @staticmethod
1252 def CreateNull(alloc_lists=False):
1253 # type: () -> value.BuiltinProc
1254 return value.BuiltinProc(cast('Any', None))
1255
1256 def PrettyTree(self, do_abbrev, trav=None):
1257 # type: (bool, Optional[TraversalState]) -> hnode_t
1258 trav = trav or TraversalState()
1259 heap_id = id(self)
1260 if heap_id in trav.seen:
1261 return hnode.AlreadySeen(heap_id)
1262 trav.seen[heap_id] = True
1263
1264 out_node = NewRecord('value.BuiltinProc')
1265 L = out_node.fields
1266
1267 x0 = NewLeaf(str(self.builtin), color_e.External)
1268 L.append(Field('builtin', x0))
1269
1270 return out_node
1271
1272 class Proc(value_t):
1273 _type_tag = 27
1274 __slots__ = ('name', 'name_tok', 'sig', 'body', 'defaults', 'sh_compat',
1275 'captured_frame', 'module_frame', 'code_str')
1276
1277 def __init__(self, name, name_tok, sig, body, defaults, sh_compat,
1278 captured_frame, module_frame, code_str):
1279 # type: (str, Token, proc_sig_t, command_t, Optional[ProcDefaults], bool, Dict[str, Cell], Dict[str, Cell], Optional[str]) -> None
1280 self.name = name
1281 self.name_tok = name_tok
1282 self.sig = sig
1283 self.body = body
1284 self.defaults = defaults
1285 self.sh_compat = sh_compat
1286 self.captured_frame = captured_frame
1287 self.module_frame = module_frame
1288 self.code_str = code_str
1289
1290 @staticmethod
1291 def CreateNull(alloc_lists=False):
1292 # type: () -> value.Proc
1293 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), cast('Dict[str, Cell]', None), cast('Optional[str]', None))
1294
1295 def PrettyTree(self, do_abbrev, trav=None):
1296 # type: (bool, Optional[TraversalState]) -> hnode_t
1297 trav = trav or TraversalState()
1298 heap_id = id(self)
1299 if heap_id in trav.seen:
1300 return hnode.AlreadySeen(heap_id)
1301 trav.seen[heap_id] = True
1302
1303 out_node = NewRecord('value.Proc')
1304 L = out_node.fields
1305
1306 x0 = NewLeaf(self.name, color_e.StringConst)
1307 L.append(Field('name', x0))
1308
1309 assert self.name_tok is not None
1310 x1 = self.name_tok.PrettyTree(do_abbrev, trav=trav)
1311 L.append(Field('name_tok', x1))
1312
1313 assert self.sig is not None
1314 x2 = self.sig.PrettyTree(do_abbrev, trav=trav)
1315 L.append(Field('sig', x2))
1316
1317 assert self.body is not None
1318 x3 = self.body.PrettyTree(do_abbrev, trav=trav)
1319 L.append(Field('body', x3))
1320
1321 if self.defaults is not None: # Optional
1322 x4 = self.defaults.PrettyTree(do_abbrev, trav=trav)
1323 L.append(Field('defaults', x4))
1324
1325 x5 = hnode.Leaf('T' if self.sh_compat else 'F', color_e.OtherConst)
1326 L.append(Field('sh_compat', x5))
1327
1328 if self.captured_frame is not None: # Dict
1329 unnamed6 = [] # type: List[hnode_t]
1330 x6 = hnode.Record("", "{", "}", [], unnamed6)
1331 for k6, v6 in self.captured_frame.iteritems():
1332 unnamed6.append(NewLeaf(k6, color_e.StringConst))
1333 unnamed6.append(v6.PrettyTree(do_abbrev, trav=trav))
1334 L.append(Field('captured_frame', x6))
1335
1336 if self.module_frame is not None: # Dict
1337 unnamed7 = [] # type: List[hnode_t]
1338 x7 = hnode.Record("", "{", "}", [], unnamed7)
1339 for k7, v7 in self.module_frame.iteritems():
1340 unnamed7.append(NewLeaf(k7, color_e.StringConst))
1341 unnamed7.append(v7.PrettyTree(do_abbrev, trav=trav))
1342 L.append(Field('module_frame', x7))
1343
1344 if self.code_str is not None: # Optional
1345 x8 = NewLeaf(self.code_str, color_e.StringConst)
1346 L.append(Field('code_str', x8))
1347
1348 return out_node
1349
1350 class Expr(value_t):
1351 _type_tag = 28
1352 __slots__ = ('e', 'captured_frame', 'module_frame')
1353
1354 def __init__(self, e, captured_frame, module_frame):
1355 # type: (expr_t, Dict[str, Cell], Dict[str, Cell]) -> None
1356 self.e = e
1357 self.captured_frame = captured_frame
1358 self.module_frame = module_frame
1359
1360 @staticmethod
1361 def CreateNull(alloc_lists=False):
1362 # type: () -> value.Expr
1363 return value.Expr(cast('expr_t', None), cast('Dict[str, Cell]', None), cast('Dict[str, Cell]', None))
1364
1365 def PrettyTree(self, do_abbrev, trav=None):
1366 # type: (bool, Optional[TraversalState]) -> hnode_t
1367 trav = trav or TraversalState()
1368 heap_id = id(self)
1369 if heap_id in trav.seen:
1370 return hnode.AlreadySeen(heap_id)
1371 trav.seen[heap_id] = True
1372
1373 out_node = NewRecord('value.Expr')
1374 L = out_node.fields
1375
1376 assert self.e is not None
1377 x0 = self.e.PrettyTree(do_abbrev, trav=trav)
1378 L.append(Field('e', x0))
1379
1380 if self.captured_frame is not None: # Dict
1381 unnamed1 = [] # type: List[hnode_t]
1382 x1 = hnode.Record("", "{", "}", [], unnamed1)
1383 for k1, v1 in self.captured_frame.iteritems():
1384 unnamed1.append(NewLeaf(k1, color_e.StringConst))
1385 unnamed1.append(v1.PrettyTree(do_abbrev, trav=trav))
1386 L.append(Field('captured_frame', x1))
1387
1388 if self.module_frame is not None: # Dict
1389 unnamed2 = [] # type: List[hnode_t]
1390 x2 = hnode.Record("", "{", "}", [], unnamed2)
1391 for k2, v2 in self.module_frame.iteritems():
1392 unnamed2.append(NewLeaf(k2, color_e.StringConst))
1393 unnamed2.append(v2.PrettyTree(do_abbrev, trav=trav))
1394 L.append(Field('module_frame', x2))
1395
1396 return out_node
1397
1398 class CommandFrag(value_t):
1399 _type_tag = 29
1400 __slots__ = ('c',)
1401
1402 def __init__(self, c):
1403 # type: (command_t) -> None
1404 self.c = c
1405
1406 @staticmethod
1407 def CreateNull(alloc_lists=False):
1408 # type: () -> value.CommandFrag
1409 return value.CommandFrag(cast('command_t', None))
1410
1411 def PrettyTree(self, do_abbrev, trav=None):
1412 # type: (bool, Optional[TraversalState]) -> hnode_t
1413 trav = trav or TraversalState()
1414 heap_id = id(self)
1415 if heap_id in trav.seen:
1416 return hnode.AlreadySeen(heap_id)
1417 trav.seen[heap_id] = True
1418
1419 out_node = NewRecord('value.CommandFrag')
1420 L = out_node.fields
1421
1422 assert self.c is not None
1423 x0 = self.c.PrettyTree(do_abbrev, trav=trav)
1424 L.append(Field('c', x0))
1425
1426 return out_node
1427
1428 class Command(value_t):
1429 _type_tag = 30
1430 __slots__ = ('frag', 'captured_frame', 'module_frame')
1431
1432 def __init__(self, frag, captured_frame, module_frame):
1433 # type: (cmd_frag_t, Dict[str, Cell], Dict[str, Cell]) -> None
1434 self.frag = frag
1435 self.captured_frame = captured_frame
1436 self.module_frame = module_frame
1437
1438 @staticmethod
1439 def CreateNull(alloc_lists=False):
1440 # type: () -> value.Command
1441 return value.Command(cast('cmd_frag_t', None), cast('Dict[str, Cell]', None), cast('Dict[str, Cell]', None))
1442
1443 def PrettyTree(self, do_abbrev, trav=None):
1444 # type: (bool, Optional[TraversalState]) -> hnode_t
1445 trav = trav or TraversalState()
1446 heap_id = id(self)
1447 if heap_id in trav.seen:
1448 return hnode.AlreadySeen(heap_id)
1449 trav.seen[heap_id] = True
1450
1451 out_node = NewRecord('value.Command')
1452 L = out_node.fields
1453
1454 assert self.frag is not None
1455 x0 = self.frag.PrettyTree(do_abbrev, trav=trav)
1456 L.append(Field('frag', x0))
1457
1458 if self.captured_frame is not None: # Dict
1459 unnamed1 = [] # type: List[hnode_t]
1460 x1 = hnode.Record("", "{", "}", [], unnamed1)
1461 for k1, v1 in self.captured_frame.iteritems():
1462 unnamed1.append(NewLeaf(k1, color_e.StringConst))
1463 unnamed1.append(v1.PrettyTree(do_abbrev, trav=trav))
1464 L.append(Field('captured_frame', x1))
1465
1466 if self.module_frame is not None: # Dict
1467 unnamed2 = [] # type: List[hnode_t]
1468 x2 = hnode.Record("", "{", "}", [], unnamed2)
1469 for k2, v2 in self.module_frame.iteritems():
1470 unnamed2.append(NewLeaf(k2, color_e.StringConst))
1471 unnamed2.append(v2.PrettyTree(do_abbrev, trav=trav))
1472 L.append(Field('module_frame', x2))
1473
1474 return out_node
1475
1476 pass
1477
1478class IntBox(pybase.CompoundObj):
1479 _type_tag = 64
1480 __slots__ = ('i',)
1481
1482 def __init__(self, i):
1483 # type: (int) -> None
1484 self.i = i
1485
1486 @staticmethod
1487 def CreateNull(alloc_lists=False):
1488 # type: () -> IntBox
1489 return IntBox(-1)
1490
1491 def PrettyTree(self, do_abbrev, trav=None):
1492 # type: (bool, Optional[TraversalState]) -> hnode_t
1493 trav = trav or TraversalState()
1494 heap_id = id(self)
1495 if heap_id in trav.seen:
1496 return hnode.AlreadySeen(heap_id)
1497 trav.seen[heap_id] = True
1498
1499 out_node = NewRecord('IntBox')
1500 L = out_node.fields
1501
1502 x0 = hnode.Leaf(str(self.i), color_e.OtherConst)
1503 L.append(Field('i', x0))
1504
1505 return out_node
1506
1507class InitializerValue(pybase.CompoundObj):
1508 _type_tag = 65
1509 __slots__ = ('key', 'rval', 'plus_eq')
1510
1511 def __init__(self, key, rval, plus_eq):
1512 # type: (Optional[str], str, bool) -> None
1513 self.key = key
1514 self.rval = rval
1515 self.plus_eq = plus_eq
1516
1517 @staticmethod
1518 def CreateNull(alloc_lists=False):
1519 # type: () -> InitializerValue
1520 return InitializerValue(cast('Optional[str]', None), '', False)
1521
1522 def PrettyTree(self, do_abbrev, trav=None):
1523 # type: (bool, Optional[TraversalState]) -> hnode_t
1524 trav = trav or TraversalState()
1525 heap_id = id(self)
1526 if heap_id in trav.seen:
1527 return hnode.AlreadySeen(heap_id)
1528 trav.seen[heap_id] = True
1529
1530 out_node = NewRecord('InitializerValue')
1531 L = out_node.fields
1532
1533 if self.key is not None: # Optional
1534 x0 = NewLeaf(self.key, color_e.StringConst)
1535 L.append(Field('key', x0))
1536
1537 x1 = NewLeaf(self.rval, color_e.StringConst)
1538 L.append(Field('rval', x1))
1539
1540 x2 = hnode.Leaf('T' if self.plus_eq else 'F', color_e.OtherConst)
1541 L.append(Field('plus_eq', x2))
1542
1543 return out_node
1544
1545class ProcDefaults(pybase.CompoundObj):
1546 _type_tag = 66
1547 __slots__ = ('for_word', 'for_typed', 'for_named', 'for_block')
1548
1549 def __init__(self, for_word, for_typed, for_named, for_block):
1550 # type: (Optional[List[value_t]], Optional[List[value_t]], Optional[Dict[str, value_t]], Optional[value_t]) -> None
1551 self.for_word = for_word
1552 self.for_typed = for_typed
1553 self.for_named = for_named
1554 self.for_block = for_block
1555
1556 @staticmethod
1557 def CreateNull(alloc_lists=False):
1558 # type: () -> ProcDefaults
1559 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))
1560
1561 def PrettyTree(self, do_abbrev, trav=None):
1562 # type: (bool, Optional[TraversalState]) -> hnode_t
1563 trav = trav or TraversalState()
1564 heap_id = id(self)
1565 if heap_id in trav.seen:
1566 return hnode.AlreadySeen(heap_id)
1567 trav.seen[heap_id] = True
1568
1569 out_node = NewRecord('ProcDefaults')
1570 L = out_node.fields
1571
1572 if self.for_word is not None: # List
1573 x0 = hnode.Array([])
1574 for i0 in self.for_word:
1575 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
1576 i0.PrettyTree(do_abbrev, trav=trav))
1577 x0.children.append(h)
1578 L.append(Field('for_word', x0))
1579
1580 if self.for_typed is not None: # List
1581 x1 = hnode.Array([])
1582 for i1 in self.for_typed:
1583 h = (hnode.Leaf("_", color_e.OtherConst) if i1 is None else
1584 i1.PrettyTree(do_abbrev, trav=trav))
1585 x1.children.append(h)
1586 L.append(Field('for_typed', x1))
1587
1588 if self.for_named is not None: # Dict
1589 unnamed2 = [] # type: List[hnode_t]
1590 x2 = hnode.Record("", "{", "}", [], unnamed2)
1591 for k2, v2 in self.for_named.iteritems():
1592 unnamed2.append(NewLeaf(k2, color_e.StringConst))
1593 unnamed2.append(v2.PrettyTree(do_abbrev, trav=trav))
1594 L.append(Field('for_named', x2))
1595
1596 if self.for_block is not None: # Optional
1597 x3 = self.for_block.PrettyTree(do_abbrev, trav=trav)
1598 L.append(Field('for_block', x3))
1599
1600 return out_node
1601
1602class LeftName(y_lvalue_t, sh_lvalue_t):
1603 _type_tag = 67
1604 __slots__ = ('name', 'blame_loc')
1605
1606 def __init__(self, name, blame_loc):
1607 # type: (str, loc_t) -> None
1608 self.name = name
1609 self.blame_loc = blame_loc
1610
1611 @staticmethod
1612 def CreateNull(alloc_lists=False):
1613 # type: () -> LeftName
1614 return LeftName('', cast('loc_t', None))
1615
1616 def PrettyTree(self, do_abbrev, trav=None):
1617 # type: (bool, Optional[TraversalState]) -> hnode_t
1618 trav = trav or TraversalState()
1619 heap_id = id(self)
1620 if heap_id in trav.seen:
1621 return hnode.AlreadySeen(heap_id)
1622 trav.seen[heap_id] = True
1623
1624 out_node = NewRecord('LeftName')
1625 L = out_node.fields
1626
1627 x0 = NewLeaf(self.name, color_e.StringConst)
1628 L.append(Field('name', x0))
1629
1630 assert self.blame_loc is not None
1631 x1 = self.blame_loc.PrettyTree(do_abbrev, trav=trav)
1632 L.append(Field('blame_loc', x1))
1633
1634 return out_node
1635
1636class RegexMatch(regex_match_t, value_t):
1637 _type_tag = 68
1638 __slots__ = ('s', 'indices', 'ops')
1639
1640 def __init__(self, s, indices, ops):
1641 # type: (str, List[int], eggex_ops_t) -> None
1642 self.s = s
1643 self.indices = indices
1644 self.ops = ops
1645
1646 @staticmethod
1647 def CreateNull(alloc_lists=False):
1648 # type: () -> RegexMatch
1649 return RegexMatch('', [] if alloc_lists else cast('List[int]', None), cast('eggex_ops_t', None))
1650
1651 def PrettyTree(self, do_abbrev, trav=None):
1652 # type: (bool, Optional[TraversalState]) -> hnode_t
1653 trav = trav or TraversalState()
1654 heap_id = id(self)
1655 if heap_id in trav.seen:
1656 return hnode.AlreadySeen(heap_id)
1657 trav.seen[heap_id] = True
1658
1659 out_node = NewRecord('RegexMatch')
1660 L = out_node.fields
1661
1662 x0 = NewLeaf(self.s, color_e.StringConst)
1663 L.append(Field('s', x0))
1664
1665 if self.indices is not None: # List
1666 x1 = hnode.Array([])
1667 for i1 in self.indices:
1668 x1.children.append(hnode.Leaf(str(i1), color_e.OtherConst))
1669 L.append(Field('indices', x1))
1670
1671 assert self.ops is not None
1672 x2 = self.ops.PrettyTree(do_abbrev, trav=trav)
1673 L.append(Field('ops', x2))
1674
1675 return out_node
1676
1677class LiteralBlock(cmd_frag_t):
1678 _type_tag = 69
1679 __slots__ = ('brace_group', 'code_str')
1680
1681 def __init__(self, brace_group, code_str):
1682 # type: (BraceGroup, Optional[str]) -> None
1683 self.brace_group = brace_group
1684 self.code_str = code_str
1685
1686 @staticmethod
1687 def CreateNull(alloc_lists=False):
1688 # type: () -> LiteralBlock
1689 return LiteralBlock(cast('BraceGroup', None), cast('Optional[str]', None))
1690
1691 def PrettyTree(self, do_abbrev, trav=None):
1692 # type: (bool, Optional[TraversalState]) -> hnode_t
1693 trav = trav or TraversalState()
1694 heap_id = id(self)
1695 if heap_id in trav.seen:
1696 return hnode.AlreadySeen(heap_id)
1697 trav.seen[heap_id] = True
1698
1699 out_node = NewRecord('LiteralBlock')
1700 L = out_node.fields
1701
1702 assert self.brace_group is not None
1703 x0 = self.brace_group.PrettyTree(do_abbrev, trav=trav)
1704 L.append(Field('brace_group', x0))
1705
1706 if self.code_str is not None: # Optional
1707 x1 = NewLeaf(self.code_str, color_e.StringConst)
1708 L.append(Field('code_str', x1))
1709
1710 return out_node
1711
1712class Obj(value_t):
1713 _type_tag = 70
1714 __slots__ = ('prototype', 'd')
1715
1716 def __init__(self, prototype, d):
1717 # type: (Optional[Obj], Dict[str, value_t]) -> None
1718 self.prototype = prototype
1719 self.d = d
1720
1721 @staticmethod
1722 def CreateNull(alloc_lists=False):
1723 # type: () -> Obj
1724 return Obj(cast('Optional[Obj]', None), cast('Dict[str, value_t]', None))
1725
1726 def PrettyTree(self, do_abbrev, trav=None):
1727 # type: (bool, Optional[TraversalState]) -> hnode_t
1728 trav = trav or TraversalState()
1729 heap_id = id(self)
1730 if heap_id in trav.seen:
1731 return hnode.AlreadySeen(heap_id)
1732 trav.seen[heap_id] = True
1733
1734 out_node = NewRecord('Obj')
1735 L = out_node.fields
1736
1737 if self.prototype is not None: # Optional
1738 x0 = self.prototype.PrettyTree(do_abbrev, trav=trav)
1739 L.append(Field('prototype', x0))
1740
1741 if self.d is not None: # Dict
1742 unnamed1 = [] # type: List[hnode_t]
1743 x1 = hnode.Record("", "{", "}", [], unnamed1)
1744 for k1, v1 in self.d.iteritems():
1745 unnamed1.append(NewLeaf(k1, color_e.StringConst))
1746 unnamed1.append(v1.PrettyTree(do_abbrev, trav=trav))
1747 L.append(Field('d', x1))
1748
1749 return out_node
1750