OILS / asdl / hnode.asdl View on Github | oilshell.org

47 lines, 21 significant
1# Homogeneous tree for pretty-printing ASDL schemas!
2# To avoid bootstrapping problems, it can't be pretty-printed!
3# It's generated first with a special flag.
4
5module hnode {
6
7 color =
8 TypeName
9 | StringConst
10 | OtherConst
11 | UserType # e.g. for Id
12 | External
13
14 Field = (str name, hnode val)
15
16 hnode =
17 # Used to prevent infinite loops
18 AlreadySeen(int heap_id)
19 | Record(str node_type, List[Field] fields,
20 bool abbrev, str left, str right, List[hnode] unnamed_fields)
21 | Array(List[hnode] children)
22 | Leaf(str s, color color)
23 # Used for a few value_t variants like value.BuiltinFunc, that point back
24 # to mycpp classes
25 | External(any obj)
26
27 # NIL8 pretty-printing -- see doc/pretty-printing.md
28
29 # Idea for bit flags for CreateNull(). NOT part of pretty printing / hnode.
30 # We just use a single param alloc_lists=True now
31
32 alloc_members =
33 List
34 | Dict
35 | Struct # ASDL product or sum types
36 generate [bit_set]
37 # Could also generate alloc_members_b::{None,All}
38
39 # Related:
40 # - it would be nice to have ASDL value types (pass by value),
41 # e.g. val[Token] or inline[Token]
42 # - we should be able to pack i8, i16, u8, u16, or even bitfields
43 # Point = (int x, int y)
44 # Point = (int[signed, 16] x, int[unsigned, 8] y)
45 # It's not i16 and u8 because we recognize C++ implicit int conversions.
46 # This is storage only.
47}