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

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