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

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