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

1657 lines, 1185 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
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 = 66
15 Container = 2
16
17_y_lvalue_str = {
18 2: 'Container',
19 66: '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 = 66
75 Indexed = 2
76 Keyed = 3
77
78_sh_lvalue_str = {
79 2: 'Indexed',
80 3: 'Keyed',
81 66: '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 = 67
277
278_regex_match_str = {
279 1: 'No',
280 67: '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 = 68
324 Expr = 2
325
326_cmd_frag_str = {
327 2: 'Expr',
328 68: '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 BashArray = 6
384 SparseArray = 7
385 BashAssoc = 8
386 Null = 9
387 Bool = 10
388 Int = 11
389 Float = 12
390 List = 13
391 Dict = 14
392 Obj = 69
393 Range = 16
394 Eggex = 17
395 Match = 67
396 Place = 19
397 Frame = 20
398 DebugFrame = 21
399 BoundFunc = 22
400 BuiltinFunc = 23
401 Func = 24
402 BuiltinProc = 25
403 Proc = 26
404 Expr = 27
405 CommandFrag = 28
406 Command = 29
407
408_value_str = {
409 1: 'Interrupted',
410 2: 'Stdin',
411 3: 'Slice',
412 4: 'Undef',
413 5: 'Str',
414 6: 'BashArray',
415 7: 'SparseArray',
416 8: 'BashAssoc',
417 9: 'Null',
418 10: 'Bool',
419 11: 'Int',
420 12: 'Float',
421 13: 'List',
422 14: 'Dict',
423 16: 'Range',
424 17: 'Eggex',
425 19: 'Place',
426 20: 'Frame',
427 21: 'DebugFrame',
428 22: 'BoundFunc',
429 23: 'BuiltinFunc',
430 24: 'Func',
431 25: 'BuiltinProc',
432 26: 'Proc',
433 27: 'Expr',
434 28: 'CommandFrag',
435 29: 'Command',
436 67: 'Match',
437 69: 'Obj',
438}
439
440def value_str(tag, dot=True):
441 # type: (int, bool) -> str
442 v = _value_str[tag]
443 if dot:
444 return "value.%s" % v
445 else:
446 return v
447
448class value_t(pybase.CompoundObj):
449 def tag(self):
450 # type: () -> int
451 return self._type_tag
452
453class value__Interrupted(value_t):
454 _type_tag = 1
455 __slots__ = ()
456
457 def __init__(self, ):
458 # type: () -> None
459 pass
460
461 def PrettyTree(self, do_abbrev, trav=None):
462 # type: (bool, Optional[TraversalState]) -> hnode_t
463 trav = trav or TraversalState()
464 heap_id = id(self)
465 if heap_id in trav.seen:
466 return hnode.AlreadySeen(heap_id)
467 trav.seen[heap_id] = True
468
469 out_node = NewRecord('value.Interrupted')
470 L = out_node.fields
471
472 return out_node
473
474class value__Stdin(value_t):
475 _type_tag = 2
476 __slots__ = ()
477
478 def __init__(self, ):
479 # type: () -> None
480 pass
481
482 def PrettyTree(self, do_abbrev, trav=None):
483 # type: (bool, Optional[TraversalState]) -> hnode_t
484 trav = trav or TraversalState()
485 heap_id = id(self)
486 if heap_id in trav.seen:
487 return hnode.AlreadySeen(heap_id)
488 trav.seen[heap_id] = True
489
490 out_node = NewRecord('value.Stdin')
491 L = out_node.fields
492
493 return out_node
494
495class value__Undef(value_t):
496 _type_tag = 4
497 __slots__ = ()
498
499 def __init__(self, ):
500 # type: () -> None
501 pass
502
503 def PrettyTree(self, do_abbrev, trav=None):
504 # type: (bool, Optional[TraversalState]) -> hnode_t
505 trav = trav or TraversalState()
506 heap_id = id(self)
507 if heap_id in trav.seen:
508 return hnode.AlreadySeen(heap_id)
509 trav.seen[heap_id] = True
510
511 out_node = NewRecord('value.Undef')
512 L = out_node.fields
513
514 return out_node
515
516class value__Null(value_t):
517 _type_tag = 9
518 __slots__ = ()
519
520 def __init__(self, ):
521 # type: () -> None
522 pass
523
524 def PrettyTree(self, do_abbrev, trav=None):
525 # type: (bool, Optional[TraversalState]) -> hnode_t
526 trav = trav or TraversalState()
527 heap_id = id(self)
528 if heap_id in trav.seen:
529 return hnode.AlreadySeen(heap_id)
530 trav.seen[heap_id] = True
531
532 out_node = NewRecord('value.Null')
533 L = out_node.fields
534
535 return out_node
536
537class value(object):
538 Interrupted = value__Interrupted()
539
540 Stdin = value__Stdin()
541
542 class Slice(value_t):
543 _type_tag = 3
544 __slots__ = ('lower', 'upper')
545
546 def __init__(self, lower, upper):
547 # type: (Optional[IntBox], Optional[IntBox]) -> None
548 self.lower = lower
549 self.upper = upper
550
551 @staticmethod
552 def CreateNull(alloc_lists=False):
553 # type: () -> value.Slice
554 return value.Slice(cast('Optional[IntBox]', None), cast('Optional[IntBox]', None))
555
556 def PrettyTree(self, do_abbrev, trav=None):
557 # type: (bool, Optional[TraversalState]) -> hnode_t
558 trav = trav or TraversalState()
559 heap_id = id(self)
560 if heap_id in trav.seen:
561 return hnode.AlreadySeen(heap_id)
562 trav.seen[heap_id] = True
563
564 out_node = NewRecord('value.Slice')
565 L = out_node.fields
566
567 if self.lower is not None: # Optional
568 x0 = self.lower.PrettyTree(do_abbrev, trav=trav)
569 L.append(Field('lower', x0))
570
571 if self.upper is not None: # Optional
572 x1 = self.upper.PrettyTree(do_abbrev, trav=trav)
573 L.append(Field('upper', x1))
574
575 return out_node
576
577 Undef = value__Undef()
578
579 class Str(value_t):
580 _type_tag = 5
581 __slots__ = ('s',)
582
583 def __init__(self, s):
584 # type: (str) -> None
585 self.s = s
586
587 @staticmethod
588 def CreateNull(alloc_lists=False):
589 # type: () -> value.Str
590 return value.Str('')
591
592 def PrettyTree(self, do_abbrev, trav=None):
593 # type: (bool, Optional[TraversalState]) -> hnode_t
594 trav = trav or TraversalState()
595 heap_id = id(self)
596 if heap_id in trav.seen:
597 return hnode.AlreadySeen(heap_id)
598 trav.seen[heap_id] = True
599
600 out_node = NewRecord('value.Str')
601 L = out_node.fields
602
603 x0 = NewLeaf(self.s, color_e.StringConst)
604 L.append(Field('s', x0))
605
606 return out_node
607
608 class BashArray(value_t):
609 _type_tag = 6
610 __slots__ = ('strs',)
611
612 def __init__(self, strs):
613 # type: (List[str]) -> None
614 self.strs = strs
615
616 @staticmethod
617 def CreateNull(alloc_lists=False):
618 # type: () -> value.BashArray
619 return value.BashArray([] if alloc_lists else cast('List[str]', None))
620
621 def PrettyTree(self, do_abbrev, trav=None):
622 # type: (bool, Optional[TraversalState]) -> hnode_t
623 trav = trav or TraversalState()
624 heap_id = id(self)
625 if heap_id in trav.seen:
626 return hnode.AlreadySeen(heap_id)
627 trav.seen[heap_id] = True
628
629 out_node = NewRecord('value.BashArray')
630 L = out_node.fields
631
632 if self.strs is not None: # List
633 x0 = hnode.Array([])
634 for i0 in self.strs:
635 x0.children.append(NewLeaf(i0, color_e.StringConst))
636 L.append(Field('strs', x0))
637
638 return out_node
639
640 class SparseArray(value_t):
641 _type_tag = 7
642 __slots__ = ('d', 'max_index')
643
644 def __init__(self, d, max_index):
645 # type: (Dict[mops.BigInt, str], mops.BigInt) -> None
646 self.d = d
647 self.max_index = max_index
648
649 @staticmethod
650 def CreateNull(alloc_lists=False):
651 # type: () -> value.SparseArray
652 return value.SparseArray(cast('Dict[mops.BigInt, str]', None), mops.BigInt(-1))
653
654 def PrettyTree(self, do_abbrev, trav=None):
655 # type: (bool, Optional[TraversalState]) -> hnode_t
656 trav = trav or TraversalState()
657 heap_id = id(self)
658 if heap_id in trav.seen:
659 return hnode.AlreadySeen(heap_id)
660 trav.seen[heap_id] = True
661
662 out_node = NewRecord('value.SparseArray')
663 L = out_node.fields
664
665 if self.d is not None: # Dict
666 unnamed0 = [] # type: List[hnode_t]
667 x0 = hnode.Record("", "{", "}", [], unnamed0)
668 for k0, v0 in self.d.iteritems():
669 unnamed0.append(hnode.Leaf(mops.ToStr(k0), color_e.OtherConst))
670 unnamed0.append(NewLeaf(v0, color_e.StringConst))
671 L.append(Field('d', x0))
672
673 x1 = hnode.Leaf(mops.ToStr(self.max_index), color_e.OtherConst)
674 L.append(Field('max_index', x1))
675
676 return out_node
677
678 class BashAssoc(value_t):
679 _type_tag = 8
680 __slots__ = ('d',)
681
682 def __init__(self, d):
683 # type: (Dict[str, str]) -> None
684 self.d = d
685
686 @staticmethod
687 def CreateNull(alloc_lists=False):
688 # type: () -> value.BashAssoc
689 return value.BashAssoc(cast('Dict[str, str]', None))
690
691 def PrettyTree(self, do_abbrev, trav=None):
692 # type: (bool, Optional[TraversalState]) -> hnode_t
693 trav = trav or TraversalState()
694 heap_id = id(self)
695 if heap_id in trav.seen:
696 return hnode.AlreadySeen(heap_id)
697 trav.seen[heap_id] = True
698
699 out_node = NewRecord('value.BashAssoc')
700 L = out_node.fields
701
702 if self.d is not None: # Dict
703 unnamed0 = [] # type: List[hnode_t]
704 x0 = hnode.Record("", "{", "}", [], unnamed0)
705 for k0, v0 in self.d.iteritems():
706 unnamed0.append(NewLeaf(k0, color_e.StringConst))
707 unnamed0.append(NewLeaf(v0, color_e.StringConst))
708 L.append(Field('d', x0))
709
710 return out_node
711
712 Null = value__Null()
713
714 class Bool(value_t):
715 _type_tag = 10
716 __slots__ = ('b',)
717
718 def __init__(self, b):
719 # type: (bool) -> None
720 self.b = b
721
722 @staticmethod
723 def CreateNull(alloc_lists=False):
724 # type: () -> value.Bool
725 return value.Bool(False)
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.Bool')
736 L = out_node.fields
737
738 x0 = hnode.Leaf('T' if self.b else 'F', color_e.OtherConst)
739 L.append(Field('b', x0))
740
741 return out_node
742
743 class Int(value_t):
744 _type_tag = 11
745 __slots__ = ('i',)
746
747 def __init__(self, i):
748 # type: (mops.BigInt) -> None
749 self.i = i
750
751 @staticmethod
752 def CreateNull(alloc_lists=False):
753 # type: () -> value.Int
754 return value.Int(mops.BigInt(-1))
755
756 def PrettyTree(self, do_abbrev, trav=None):
757 # type: (bool, Optional[TraversalState]) -> hnode_t
758 trav = trav or TraversalState()
759 heap_id = id(self)
760 if heap_id in trav.seen:
761 return hnode.AlreadySeen(heap_id)
762 trav.seen[heap_id] = True
763
764 out_node = NewRecord('value.Int')
765 L = out_node.fields
766
767 x0 = hnode.Leaf(mops.ToStr(self.i), color_e.OtherConst)
768 L.append(Field('i', x0))
769
770 return out_node
771
772 class Float(value_t):
773 _type_tag = 12
774 __slots__ = ('f',)
775
776 def __init__(self, f):
777 # type: (float) -> None
778 self.f = f
779
780 @staticmethod
781 def CreateNull(alloc_lists=False):
782 # type: () -> value.Float
783 return value.Float(0.0)
784
785 def PrettyTree(self, do_abbrev, trav=None):
786 # type: (bool, Optional[TraversalState]) -> hnode_t
787 trav = trav or TraversalState()
788 heap_id = id(self)
789 if heap_id in trav.seen:
790 return hnode.AlreadySeen(heap_id)
791 trav.seen[heap_id] = True
792
793 out_node = NewRecord('value.Float')
794 L = out_node.fields
795
796 x0 = hnode.Leaf(str(self.f), color_e.OtherConst)
797 L.append(Field('f', x0))
798
799 return out_node
800
801 class List(value_t):
802 _type_tag = 13
803 __slots__ = ('items',)
804
805 def __init__(self, items):
806 # type: (List[value_t]) -> None
807 self.items = items
808
809 @staticmethod
810 def CreateNull(alloc_lists=False):
811 # type: () -> value.List
812 return value.List([] if alloc_lists else cast('List[value_t]', None))
813
814 def PrettyTree(self, do_abbrev, trav=None):
815 # type: (bool, Optional[TraversalState]) -> hnode_t
816 trav = trav or TraversalState()
817 heap_id = id(self)
818 if heap_id in trav.seen:
819 return hnode.AlreadySeen(heap_id)
820 trav.seen[heap_id] = True
821
822 out_node = NewRecord('value.List')
823 L = out_node.fields
824
825 if self.items is not None: # List
826 x0 = hnode.Array([])
827 for i0 in self.items:
828 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
829 i0.PrettyTree(do_abbrev, trav=trav))
830 x0.children.append(h)
831 L.append(Field('items', x0))
832
833 return out_node
834
835 class Dict(value_t):
836 _type_tag = 14
837 __slots__ = ('d',)
838
839 def __init__(self, d):
840 # type: (Dict[str, value_t]) -> None
841 self.d = d
842
843 @staticmethod
844 def CreateNull(alloc_lists=False):
845 # type: () -> value.Dict
846 return value.Dict(cast('Dict[str, value_t]', None))
847
848 def PrettyTree(self, do_abbrev, trav=None):
849 # type: (bool, Optional[TraversalState]) -> hnode_t
850 trav = trav or TraversalState()
851 heap_id = id(self)
852 if heap_id in trav.seen:
853 return hnode.AlreadySeen(heap_id)
854 trav.seen[heap_id] = True
855
856 out_node = NewRecord('value.Dict')
857 L = out_node.fields
858
859 if self.d is not None: # Dict
860 unnamed0 = [] # type: List[hnode_t]
861 x0 = hnode.Record("", "{", "}", [], unnamed0)
862 for k0, v0 in self.d.iteritems():
863 unnamed0.append(NewLeaf(k0, color_e.StringConst))
864 unnamed0.append(v0.PrettyTree(do_abbrev, trav=trav))
865 L.append(Field('d', x0))
866
867 return out_node
868
869 class Range(value_t):
870 _type_tag = 16
871 __slots__ = ('lower', 'upper')
872
873 def __init__(self, lower, upper):
874 # type: (int, int) -> None
875 self.lower = lower
876 self.upper = upper
877
878 @staticmethod
879 def CreateNull(alloc_lists=False):
880 # type: () -> value.Range
881 return value.Range(-1, -1)
882
883 def PrettyTree(self, do_abbrev, trav=None):
884 # type: (bool, Optional[TraversalState]) -> hnode_t
885 trav = trav or TraversalState()
886 heap_id = id(self)
887 if heap_id in trav.seen:
888 return hnode.AlreadySeen(heap_id)
889 trav.seen[heap_id] = True
890
891 out_node = NewRecord('value.Range')
892 L = out_node.fields
893
894 x0 = hnode.Leaf(str(self.lower), color_e.OtherConst)
895 L.append(Field('lower', x0))
896
897 x1 = hnode.Leaf(str(self.upper), color_e.OtherConst)
898 L.append(Field('upper', x1))
899
900 return out_node
901
902 class Eggex(value_t):
903 _type_tag = 17
904 __slots__ = ('spliced', 'canonical_flags', 'convert_funcs', 'convert_toks',
905 'as_ere', 'capture_names')
906
907 def __init__(self, spliced, canonical_flags, convert_funcs, convert_toks,
908 as_ere, capture_names):
909 # type: (re_t, str, List[Optional[value_t]], List[Optional[Token]], Optional[str], List[Optional[str]]) -> None
910 self.spliced = spliced
911 self.canonical_flags = canonical_flags
912 self.convert_funcs = convert_funcs
913 self.convert_toks = convert_toks
914 self.as_ere = as_ere
915 self.capture_names = capture_names
916
917 @staticmethod
918 def CreateNull(alloc_lists=False):
919 # type: () -> value.Eggex
920 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))
921
922 def PrettyTree(self, do_abbrev, trav=None):
923 # type: (bool, Optional[TraversalState]) -> hnode_t
924 trav = trav or TraversalState()
925 heap_id = id(self)
926 if heap_id in trav.seen:
927 return hnode.AlreadySeen(heap_id)
928 trav.seen[heap_id] = True
929
930 out_node = NewRecord('value.Eggex')
931 L = out_node.fields
932
933 assert self.spliced is not None
934 x0 = self.spliced.PrettyTree(do_abbrev, trav=trav)
935 L.append(Field('spliced', x0))
936
937 x1 = NewLeaf(self.canonical_flags, color_e.StringConst)
938 L.append(Field('canonical_flags', x1))
939
940 if self.convert_funcs is not None: # List
941 x2 = hnode.Array([])
942 for i2 in self.convert_funcs:
943 h = (hnode.Leaf("_", color_e.OtherConst) if i2 is None else
944 i2.PrettyTree(do_abbrev, trav=trav))
945 x2.children.append(h)
946 L.append(Field('convert_funcs', x2))
947
948 if self.convert_toks is not None: # List
949 x3 = hnode.Array([])
950 for i3 in self.convert_toks:
951 h = (hnode.Leaf("_", color_e.OtherConst) if i3 is None else
952 i3.PrettyTree(do_abbrev, trav=trav))
953 x3.children.append(h)
954 L.append(Field('convert_toks', x3))
955
956 if self.as_ere is not None: # Optional
957 x4 = NewLeaf(self.as_ere, color_e.StringConst)
958 L.append(Field('as_ere', x4))
959
960 if self.capture_names is not None: # List
961 x5 = hnode.Array([])
962 for i5 in self.capture_names:
963 x5.children.append(NewLeaf(i5, color_e.StringConst))
964 L.append(Field('capture_names', x5))
965
966 return out_node
967
968 class Place(value_t):
969 _type_tag = 19
970 __slots__ = ('lval', 'frame')
971
972 def __init__(self, lval, frame):
973 # type: (y_lvalue_t, Dict[str, Cell]) -> None
974 self.lval = lval
975 self.frame = frame
976
977 @staticmethod
978 def CreateNull(alloc_lists=False):
979 # type: () -> value.Place
980 return value.Place(cast('y_lvalue_t', None), cast('Dict[str, Cell]', None))
981
982 def PrettyTree(self, do_abbrev, trav=None):
983 # type: (bool, Optional[TraversalState]) -> hnode_t
984 trav = trav or TraversalState()
985 heap_id = id(self)
986 if heap_id in trav.seen:
987 return hnode.AlreadySeen(heap_id)
988 trav.seen[heap_id] = True
989
990 out_node = NewRecord('value.Place')
991 L = out_node.fields
992
993 assert self.lval is not None
994 x0 = self.lval.PrettyTree(do_abbrev, trav=trav)
995 L.append(Field('lval', x0))
996
997 if self.frame is not None: # Dict
998 unnamed1 = [] # type: List[hnode_t]
999 x1 = hnode.Record("", "{", "}", [], unnamed1)
1000 for k1, v1 in self.frame.iteritems():
1001 unnamed1.append(NewLeaf(k1, color_e.StringConst))
1002 unnamed1.append(v1.PrettyTree(do_abbrev, trav=trav))
1003 L.append(Field('frame', x1))
1004
1005 return out_node
1006
1007 class Frame(value_t):
1008 _type_tag = 20
1009 __slots__ = ('frame',)
1010
1011 def __init__(self, frame):
1012 # type: (Dict[str, Cell]) -> None
1013 self.frame = frame
1014
1015 @staticmethod
1016 def CreateNull(alloc_lists=False):
1017 # type: () -> value.Frame
1018 return value.Frame(cast('Dict[str, Cell]', None))
1019
1020 def PrettyTree(self, do_abbrev, trav=None):
1021 # type: (bool, Optional[TraversalState]) -> hnode_t
1022 trav = trav or TraversalState()
1023 heap_id = id(self)
1024 if heap_id in trav.seen:
1025 return hnode.AlreadySeen(heap_id)
1026 trav.seen[heap_id] = True
1027
1028 out_node = NewRecord('value.Frame')
1029 L = out_node.fields
1030
1031 if self.frame is not None: # Dict
1032 unnamed0 = [] # type: List[hnode_t]
1033 x0 = hnode.Record("", "{", "}", [], unnamed0)
1034 for k0, v0 in self.frame.iteritems():
1035 unnamed0.append(NewLeaf(k0, color_e.StringConst))
1036 unnamed0.append(v0.PrettyTree(do_abbrev, trav=trav))
1037 L.append(Field('frame', x0))
1038
1039 return out_node
1040
1041 class DebugFrame(value_t):
1042 _type_tag = 21
1043 __slots__ = ('frame',)
1044
1045 def __init__(self, frame):
1046 # type: (debug_frame_t) -> None
1047 self.frame = frame
1048
1049 @staticmethod
1050 def CreateNull(alloc_lists=False):
1051 # type: () -> value.DebugFrame
1052 return value.DebugFrame(cast('debug_frame_t', None))
1053
1054 def PrettyTree(self, do_abbrev, trav=None):
1055 # type: (bool, Optional[TraversalState]) -> hnode_t
1056 trav = trav or TraversalState()
1057 heap_id = id(self)
1058 if heap_id in trav.seen:
1059 return hnode.AlreadySeen(heap_id)
1060 trav.seen[heap_id] = True
1061
1062 out_node = NewRecord('value.DebugFrame')
1063 L = out_node.fields
1064
1065 assert self.frame is not None
1066 x0 = self.frame.PrettyTree(do_abbrev, trav=trav)
1067 L.append(Field('frame', x0))
1068
1069 return out_node
1070
1071 class BoundFunc(value_t):
1072 _type_tag = 22
1073 __slots__ = ('me', 'func')
1074
1075 def __init__(self, me, func):
1076 # type: (value_t, value_t) -> None
1077 self.me = me
1078 self.func = func
1079
1080 @staticmethod
1081 def CreateNull(alloc_lists=False):
1082 # type: () -> value.BoundFunc
1083 return value.BoundFunc(cast('value_t', None), cast('value_t', None))
1084
1085 def PrettyTree(self, do_abbrev, trav=None):
1086 # type: (bool, Optional[TraversalState]) -> hnode_t
1087 trav = trav or TraversalState()
1088 heap_id = id(self)
1089 if heap_id in trav.seen:
1090 return hnode.AlreadySeen(heap_id)
1091 trav.seen[heap_id] = True
1092
1093 out_node = NewRecord('value.BoundFunc')
1094 L = out_node.fields
1095
1096 assert self.me is not None
1097 x0 = self.me.PrettyTree(do_abbrev, trav=trav)
1098 L.append(Field('me', x0))
1099
1100 assert self.func is not None
1101 x1 = self.func.PrettyTree(do_abbrev, trav=trav)
1102 L.append(Field('func', x1))
1103
1104 return out_node
1105
1106 class BuiltinFunc(value_t):
1107 _type_tag = 23
1108 __slots__ = ('callable',)
1109
1110 def __init__(self, callable):
1111 # type: (Any) -> None
1112 self.callable = callable
1113
1114 @staticmethod
1115 def CreateNull(alloc_lists=False):
1116 # type: () -> value.BuiltinFunc
1117 return value.BuiltinFunc(cast('Any', None))
1118
1119 def PrettyTree(self, do_abbrev, trav=None):
1120 # type: (bool, Optional[TraversalState]) -> hnode_t
1121 trav = trav or TraversalState()
1122 heap_id = id(self)
1123 if heap_id in trav.seen:
1124 return hnode.AlreadySeen(heap_id)
1125 trav.seen[heap_id] = True
1126
1127 out_node = NewRecord('value.BuiltinFunc')
1128 L = out_node.fields
1129
1130 x0 = NewLeaf(str(self.callable), color_e.External)
1131 L.append(Field('callable', x0))
1132
1133 return out_node
1134
1135 class Func(value_t):
1136 _type_tag = 24
1137 __slots__ = ('name', 'parsed', 'pos_defaults', 'named_defaults',
1138 'module_frame')
1139
1140 def __init__(self, name, parsed, pos_defaults, named_defaults,
1141 module_frame):
1142 # type: (str, Func, List[value_t], Dict[str, value_t], Dict[str, Cell]) -> None
1143 self.name = name
1144 self.parsed = parsed
1145 self.pos_defaults = pos_defaults
1146 self.named_defaults = named_defaults
1147 self.module_frame = module_frame
1148
1149 @staticmethod
1150 def CreateNull(alloc_lists=False):
1151 # type: () -> value.Func
1152 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))
1153
1154 def PrettyTree(self, do_abbrev, trav=None):
1155 # type: (bool, Optional[TraversalState]) -> hnode_t
1156 trav = trav or TraversalState()
1157 heap_id = id(self)
1158 if heap_id in trav.seen:
1159 return hnode.AlreadySeen(heap_id)
1160 trav.seen[heap_id] = True
1161
1162 out_node = NewRecord('value.Func')
1163 L = out_node.fields
1164
1165 x0 = NewLeaf(self.name, color_e.StringConst)
1166 L.append(Field('name', x0))
1167
1168 assert self.parsed is not None
1169 x1 = self.parsed.PrettyTree(do_abbrev, trav=trav)
1170 L.append(Field('parsed', x1))
1171
1172 if self.pos_defaults is not None: # List
1173 x2 = hnode.Array([])
1174 for i2 in self.pos_defaults:
1175 h = (hnode.Leaf("_", color_e.OtherConst) if i2 is None else
1176 i2.PrettyTree(do_abbrev, trav=trav))
1177 x2.children.append(h)
1178 L.append(Field('pos_defaults', x2))
1179
1180 if self.named_defaults is not None: # Dict
1181 unnamed3 = [] # type: List[hnode_t]
1182 x3 = hnode.Record("", "{", "}", [], unnamed3)
1183 for k3, v3 in self.named_defaults.iteritems():
1184 unnamed3.append(NewLeaf(k3, color_e.StringConst))
1185 unnamed3.append(v3.PrettyTree(do_abbrev, trav=trav))
1186 L.append(Field('named_defaults', x3))
1187
1188 if self.module_frame is not None: # Dict
1189 unnamed4 = [] # type: List[hnode_t]
1190 x4 = hnode.Record("", "{", "}", [], unnamed4)
1191 for k4, v4 in self.module_frame.iteritems():
1192 unnamed4.append(NewLeaf(k4, color_e.StringConst))
1193 unnamed4.append(v4.PrettyTree(do_abbrev, trav=trav))
1194 L.append(Field('module_frame', x4))
1195
1196 return out_node
1197
1198 class BuiltinProc(value_t):
1199 _type_tag = 25
1200 __slots__ = ('builtin',)
1201
1202 def __init__(self, builtin):
1203 # type: (Any) -> None
1204 self.builtin = builtin
1205
1206 @staticmethod
1207 def CreateNull(alloc_lists=False):
1208 # type: () -> value.BuiltinProc
1209 return value.BuiltinProc(cast('Any', None))
1210
1211 def PrettyTree(self, do_abbrev, trav=None):
1212 # type: (bool, Optional[TraversalState]) -> hnode_t
1213 trav = trav or TraversalState()
1214 heap_id = id(self)
1215 if heap_id in trav.seen:
1216 return hnode.AlreadySeen(heap_id)
1217 trav.seen[heap_id] = True
1218
1219 out_node = NewRecord('value.BuiltinProc')
1220 L = out_node.fields
1221
1222 x0 = NewLeaf(str(self.builtin), color_e.External)
1223 L.append(Field('builtin', x0))
1224
1225 return out_node
1226
1227 class Proc(value_t):
1228 _type_tag = 26
1229 __slots__ = ('name', 'name_tok', 'sig', 'body', 'defaults', 'sh_compat',
1230 'module_frame')
1231
1232 def __init__(self, name, name_tok, sig, body, defaults, sh_compat,
1233 module_frame):
1234 # type: (str, Token, proc_sig_t, command_t, Optional[ProcDefaults], bool, Dict[str, Cell]) -> None
1235 self.name = name
1236 self.name_tok = name_tok
1237 self.sig = sig
1238 self.body = body
1239 self.defaults = defaults
1240 self.sh_compat = sh_compat
1241 self.module_frame = module_frame
1242
1243 @staticmethod
1244 def CreateNull(alloc_lists=False):
1245 # type: () -> value.Proc
1246 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))
1247
1248 def PrettyTree(self, do_abbrev, trav=None):
1249 # type: (bool, Optional[TraversalState]) -> hnode_t
1250 trav = trav or TraversalState()
1251 heap_id = id(self)
1252 if heap_id in trav.seen:
1253 return hnode.AlreadySeen(heap_id)
1254 trav.seen[heap_id] = True
1255
1256 out_node = NewRecord('value.Proc')
1257 L = out_node.fields
1258
1259 x0 = NewLeaf(self.name, color_e.StringConst)
1260 L.append(Field('name', x0))
1261
1262 assert self.name_tok is not None
1263 x1 = self.name_tok.PrettyTree(do_abbrev, trav=trav)
1264 L.append(Field('name_tok', x1))
1265
1266 assert self.sig is not None
1267 x2 = self.sig.PrettyTree(do_abbrev, trav=trav)
1268 L.append(Field('sig', x2))
1269
1270 assert self.body is not None
1271 x3 = self.body.PrettyTree(do_abbrev, trav=trav)
1272 L.append(Field('body', x3))
1273
1274 if self.defaults is not None: # Optional
1275 x4 = self.defaults.PrettyTree(do_abbrev, trav=trav)
1276 L.append(Field('defaults', x4))
1277
1278 x5 = hnode.Leaf('T' if self.sh_compat else 'F', color_e.OtherConst)
1279 L.append(Field('sh_compat', x5))
1280
1281 if self.module_frame is not None: # Dict
1282 unnamed6 = [] # type: List[hnode_t]
1283 x6 = hnode.Record("", "{", "}", [], unnamed6)
1284 for k6, v6 in self.module_frame.iteritems():
1285 unnamed6.append(NewLeaf(k6, color_e.StringConst))
1286 unnamed6.append(v6.PrettyTree(do_abbrev, trav=trav))
1287 L.append(Field('module_frame', x6))
1288
1289 return out_node
1290
1291 class Expr(value_t):
1292 _type_tag = 27
1293 __slots__ = ('e', 'captured_frame', 'module_frame')
1294
1295 def __init__(self, e, captured_frame, module_frame):
1296 # type: (expr_t, Dict[str, Cell], Dict[str, Cell]) -> None
1297 self.e = e
1298 self.captured_frame = captured_frame
1299 self.module_frame = module_frame
1300
1301 @staticmethod
1302 def CreateNull(alloc_lists=False):
1303 # type: () -> value.Expr
1304 return value.Expr(cast('expr_t', None), cast('Dict[str, Cell]', None), cast('Dict[str, Cell]', None))
1305
1306 def PrettyTree(self, do_abbrev, trav=None):
1307 # type: (bool, Optional[TraversalState]) -> hnode_t
1308 trav = trav or TraversalState()
1309 heap_id = id(self)
1310 if heap_id in trav.seen:
1311 return hnode.AlreadySeen(heap_id)
1312 trav.seen[heap_id] = True
1313
1314 out_node = NewRecord('value.Expr')
1315 L = out_node.fields
1316
1317 assert self.e is not None
1318 x0 = self.e.PrettyTree(do_abbrev, trav=trav)
1319 L.append(Field('e', x0))
1320
1321 if self.captured_frame is not None: # Dict
1322 unnamed1 = [] # type: List[hnode_t]
1323 x1 = hnode.Record("", "{", "}", [], unnamed1)
1324 for k1, v1 in self.captured_frame.iteritems():
1325 unnamed1.append(NewLeaf(k1, color_e.StringConst))
1326 unnamed1.append(v1.PrettyTree(do_abbrev, trav=trav))
1327 L.append(Field('captured_frame', x1))
1328
1329 if self.module_frame is not None: # Dict
1330 unnamed2 = [] # type: List[hnode_t]
1331 x2 = hnode.Record("", "{", "}", [], unnamed2)
1332 for k2, v2 in self.module_frame.iteritems():
1333 unnamed2.append(NewLeaf(k2, color_e.StringConst))
1334 unnamed2.append(v2.PrettyTree(do_abbrev, trav=trav))
1335 L.append(Field('module_frame', x2))
1336
1337 return out_node
1338
1339 class CommandFrag(value_t):
1340 _type_tag = 28
1341 __slots__ = ('c',)
1342
1343 def __init__(self, c):
1344 # type: (command_t) -> None
1345 self.c = c
1346
1347 @staticmethod
1348 def CreateNull(alloc_lists=False):
1349 # type: () -> value.CommandFrag
1350 return value.CommandFrag(cast('command_t', None))
1351
1352 def PrettyTree(self, do_abbrev, trav=None):
1353 # type: (bool, Optional[TraversalState]) -> hnode_t
1354 trav = trav or TraversalState()
1355 heap_id = id(self)
1356 if heap_id in trav.seen:
1357 return hnode.AlreadySeen(heap_id)
1358 trav.seen[heap_id] = True
1359
1360 out_node = NewRecord('value.CommandFrag')
1361 L = out_node.fields
1362
1363 assert self.c is not None
1364 x0 = self.c.PrettyTree(do_abbrev, trav=trav)
1365 L.append(Field('c', x0))
1366
1367 return out_node
1368
1369 class Command(value_t):
1370 _type_tag = 29
1371 __slots__ = ('frag', 'captured_frame', 'module_frame')
1372
1373 def __init__(self, frag, captured_frame, module_frame):
1374 # type: (cmd_frag_t, Dict[str, Cell], Dict[str, Cell]) -> None
1375 self.frag = frag
1376 self.captured_frame = captured_frame
1377 self.module_frame = module_frame
1378
1379 @staticmethod
1380 def CreateNull(alloc_lists=False):
1381 # type: () -> value.Command
1382 return value.Command(cast('cmd_frag_t', None), cast('Dict[str, Cell]', None), cast('Dict[str, Cell]', None))
1383
1384 def PrettyTree(self, do_abbrev, trav=None):
1385 # type: (bool, Optional[TraversalState]) -> hnode_t
1386 trav = trav or TraversalState()
1387 heap_id = id(self)
1388 if heap_id in trav.seen:
1389 return hnode.AlreadySeen(heap_id)
1390 trav.seen[heap_id] = True
1391
1392 out_node = NewRecord('value.Command')
1393 L = out_node.fields
1394
1395 assert self.frag is not None
1396 x0 = self.frag.PrettyTree(do_abbrev, trav=trav)
1397 L.append(Field('frag', x0))
1398
1399 if self.captured_frame is not None: # Dict
1400 unnamed1 = [] # type: List[hnode_t]
1401 x1 = hnode.Record("", "{", "}", [], unnamed1)
1402 for k1, v1 in self.captured_frame.iteritems():
1403 unnamed1.append(NewLeaf(k1, color_e.StringConst))
1404 unnamed1.append(v1.PrettyTree(do_abbrev, trav=trav))
1405 L.append(Field('captured_frame', x1))
1406
1407 if self.module_frame is not None: # Dict
1408 unnamed2 = [] # type: List[hnode_t]
1409 x2 = hnode.Record("", "{", "}", [], unnamed2)
1410 for k2, v2 in self.module_frame.iteritems():
1411 unnamed2.append(NewLeaf(k2, color_e.StringConst))
1412 unnamed2.append(v2.PrettyTree(do_abbrev, trav=trav))
1413 L.append(Field('module_frame', x2))
1414
1415 return out_node
1416
1417 pass
1418
1419class IntBox(pybase.CompoundObj):
1420 _type_tag = 64
1421 __slots__ = ('i',)
1422
1423 def __init__(self, i):
1424 # type: (int) -> None
1425 self.i = i
1426
1427 @staticmethod
1428 def CreateNull(alloc_lists=False):
1429 # type: () -> IntBox
1430 return IntBox(-1)
1431
1432 def PrettyTree(self, do_abbrev, trav=None):
1433 # type: (bool, Optional[TraversalState]) -> hnode_t
1434 trav = trav or TraversalState()
1435 heap_id = id(self)
1436 if heap_id in trav.seen:
1437 return hnode.AlreadySeen(heap_id)
1438 trav.seen[heap_id] = True
1439
1440 out_node = NewRecord('IntBox')
1441 L = out_node.fields
1442
1443 x0 = hnode.Leaf(str(self.i), color_e.OtherConst)
1444 L.append(Field('i', x0))
1445
1446 return out_node
1447
1448class ProcDefaults(pybase.CompoundObj):
1449 _type_tag = 65
1450 __slots__ = ('for_word', 'for_typed', 'for_named', 'for_block')
1451
1452 def __init__(self, for_word, for_typed, for_named, for_block):
1453 # type: (Optional[List[value_t]], Optional[List[value_t]], Optional[Dict[str, value_t]], Optional[value_t]) -> None
1454 self.for_word = for_word
1455 self.for_typed = for_typed
1456 self.for_named = for_named
1457 self.for_block = for_block
1458
1459 @staticmethod
1460 def CreateNull(alloc_lists=False):
1461 # type: () -> ProcDefaults
1462 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))
1463
1464 def PrettyTree(self, do_abbrev, trav=None):
1465 # type: (bool, 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
1472 out_node = NewRecord('ProcDefaults')
1473 L = out_node.fields
1474
1475 if self.for_word is not None: # List
1476 x0 = hnode.Array([])
1477 for i0 in self.for_word:
1478 h = (hnode.Leaf("_", color_e.OtherConst) if i0 is None else
1479 i0.PrettyTree(do_abbrev, trav=trav))
1480 x0.children.append(h)
1481 L.append(Field('for_word', x0))
1482
1483 if self.for_typed is not None: # List
1484 x1 = hnode.Array([])
1485 for i1 in self.for_typed:
1486 h = (hnode.Leaf("_", color_e.OtherConst) if i1 is None else
1487 i1.PrettyTree(do_abbrev, trav=trav))
1488 x1.children.append(h)
1489 L.append(Field('for_typed', x1))
1490
1491 if self.for_named is not None: # Dict
1492 unnamed2 = [] # type: List[hnode_t]
1493 x2 = hnode.Record("", "{", "}", [], unnamed2)
1494 for k2, v2 in self.for_named.iteritems():
1495 unnamed2.append(NewLeaf(k2, color_e.StringConst))
1496 unnamed2.append(v2.PrettyTree(do_abbrev, trav=trav))
1497 L.append(Field('for_named', x2))
1498
1499 if self.for_block is not None: # Optional
1500 x3 = self.for_block.PrettyTree(do_abbrev, trav=trav)
1501 L.append(Field('for_block', x3))
1502
1503 return out_node
1504
1505class LeftName(y_lvalue_t, sh_lvalue_t):
1506 _type_tag = 66
1507 __slots__ = ('name', 'blame_loc')
1508
1509 def __init__(self, name, blame_loc):
1510 # type: (str, loc_t) -> None
1511 self.name = name
1512 self.blame_loc = blame_loc
1513
1514 @staticmethod
1515 def CreateNull(alloc_lists=False):
1516 # type: () -> LeftName
1517 return LeftName('', cast('loc_t', None))
1518
1519 def PrettyTree(self, do_abbrev, trav=None):
1520 # type: (bool, Optional[TraversalState]) -> hnode_t
1521 trav = trav or TraversalState()
1522 heap_id = id(self)
1523 if heap_id in trav.seen:
1524 return hnode.AlreadySeen(heap_id)
1525 trav.seen[heap_id] = True
1526
1527 out_node = NewRecord('LeftName')
1528 L = out_node.fields
1529
1530 x0 = NewLeaf(self.name, color_e.StringConst)
1531 L.append(Field('name', x0))
1532
1533 assert self.blame_loc is not None
1534 x1 = self.blame_loc.PrettyTree(do_abbrev, trav=trav)
1535 L.append(Field('blame_loc', x1))
1536
1537 return out_node
1538
1539class RegexMatch(regex_match_t, value_t):
1540 _type_tag = 67
1541 __slots__ = ('s', 'indices', 'ops')
1542
1543 def __init__(self, s, indices, ops):
1544 # type: (str, List[int], eggex_ops_t) -> None
1545 self.s = s
1546 self.indices = indices
1547 self.ops = ops
1548
1549 @staticmethod
1550 def CreateNull(alloc_lists=False):
1551 # type: () -> RegexMatch
1552 return RegexMatch('', [] if alloc_lists else cast('List[int]', None), cast('eggex_ops_t', None))
1553
1554 def PrettyTree(self, do_abbrev, trav=None):
1555 # type: (bool, Optional[TraversalState]) -> hnode_t
1556 trav = trav or TraversalState()
1557 heap_id = id(self)
1558 if heap_id in trav.seen:
1559 return hnode.AlreadySeen(heap_id)
1560 trav.seen[heap_id] = True
1561
1562 out_node = NewRecord('RegexMatch')
1563 L = out_node.fields
1564
1565 x0 = NewLeaf(self.s, color_e.StringConst)
1566 L.append(Field('s', x0))
1567
1568 if self.indices is not None: # List
1569 x1 = hnode.Array([])
1570 for i1 in self.indices:
1571 x1.children.append(hnode.Leaf(str(i1), color_e.OtherConst))
1572 L.append(Field('indices', x1))
1573
1574 assert self.ops is not None
1575 x2 = self.ops.PrettyTree(do_abbrev, trav=trav)
1576 L.append(Field('ops', x2))
1577
1578 return out_node
1579
1580class LiteralBlock(cmd_frag_t):
1581 _type_tag = 68
1582 __slots__ = ('brace_group', 'lines')
1583
1584 def __init__(self, brace_group, lines):
1585 # type: (BraceGroup, List[SourceLine]) -> None
1586 self.brace_group = brace_group
1587 self.lines = lines
1588
1589 @staticmethod
1590 def CreateNull(alloc_lists=False):
1591 # type: () -> LiteralBlock
1592 return LiteralBlock(cast('BraceGroup', None), [] if alloc_lists else cast('List[SourceLine]', None))
1593
1594 def PrettyTree(self, do_abbrev, trav=None):
1595 # type: (bool, Optional[TraversalState]) -> hnode_t
1596 trav = trav or TraversalState()
1597 heap_id = id(self)
1598 if heap_id in trav.seen:
1599 return hnode.AlreadySeen(heap_id)
1600 trav.seen[heap_id] = True
1601
1602 out_node = NewRecord('LiteralBlock')
1603 L = out_node.fields
1604
1605 assert self.brace_group is not None
1606 x0 = self.brace_group.PrettyTree(do_abbrev, trav=trav)
1607 L.append(Field('brace_group', x0))
1608
1609 if self.lines is not None: # List
1610 x1 = hnode.Array([])
1611 for i1 in self.lines:
1612 h = (hnode.Leaf("_", color_e.OtherConst) if i1 is None else
1613 i1.PrettyTree(do_abbrev, trav=trav))
1614 x1.children.append(h)
1615 L.append(Field('lines', x1))
1616
1617 return out_node
1618
1619class Obj(value_t):
1620 _type_tag = 69
1621 __slots__ = ('prototype', 'd')
1622
1623 def __init__(self, prototype, d):
1624 # type: (Optional[Obj], Dict[str, value_t]) -> None
1625 self.prototype = prototype
1626 self.d = d
1627
1628 @staticmethod
1629 def CreateNull(alloc_lists=False):
1630 # type: () -> Obj
1631 return Obj(cast('Optional[Obj]', None), cast('Dict[str, value_t]', None))
1632
1633 def PrettyTree(self, do_abbrev, trav=None):
1634 # type: (bool, Optional[TraversalState]) -> hnode_t
1635 trav = trav or TraversalState()
1636 heap_id = id(self)
1637 if heap_id in trav.seen:
1638 return hnode.AlreadySeen(heap_id)
1639 trav.seen[heap_id] = True
1640
1641 out_node = NewRecord('Obj')
1642 L = out_node.fields
1643
1644 if self.prototype is not None: # Optional
1645 x0 = self.prototype.PrettyTree(do_abbrev, trav=trav)
1646 L.append(Field('prototype', x0))
1647
1648 if self.d is not None: # Dict
1649 unnamed1 = [] # type: List[hnode_t]
1650 x1 = hnode.Record("", "{", "}", [], unnamed1)
1651 for k1, v1 in self.d.iteritems():
1652 unnamed1.append(NewLeaf(k1, color_e.StringConst))
1653 unnamed1.append(v1.PrettyTree(do_abbrev, trav=trav))
1654 L.append(Field('d', x1))
1655
1656 return out_node
1657