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

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