summaryrefslogtreecommitdiff
path: root/tnslc
diff options
context:
space:
mode:
authorCircleShift <kgunger12@gmail.com>2025-03-05 07:26:58 -0500
committerCircleShift <kgunger12@gmail.com>2025-03-05 07:26:58 -0500
commitd4fe9e6e27f2013a6e1f6be94daba91ec53fa5c3 (patch)
treebc30806a177f62c15e991d9ebcd5d2034a786183 /tnslc
parent61e1e5ce377719c8e9e437e5ba79ba06fc1de4ba (diff)
[tnslc] Rework compile layout
Diffstat (limited to 'tnslc')
-rw-r--r--tnslc/breakdown.pngbin0 -> 168313 bytes
-rw-r--r--tnslc/compile/codegen.tnsl4
-rw-r--r--tnslc/compile/compbuf.tnsl45
-rw-r--r--tnslc/compile/compile.tnsl10
-rw-r--r--tnslc/compile/function.tnsl36
-rw-r--r--tnslc/compile/generate.tnsl22
-rw-r--r--tnslc/compile/module.tnsl68
-rw-r--r--tnslc/compile/outbuf.tnsl31
-rw-r--r--tnslc/compile/scope.tnsl14
-rw-r--r--tnslc/compile/struct.tnsl46
-rw-r--r--tnslc/compile/type.tnsl588
-rw-r--r--tnslc/compile/var.tnsl33
-rw-r--r--tnslc/layout_generator.pngbin0 -> 338881 bytes
-rw-r--r--tnslc/out.log42244
-rw-r--r--tnslc/vec_test.tnsl47
15 files changed, 42544 insertions, 644 deletions
diff --git a/tnslc/breakdown.png b/tnslc/breakdown.png
new file mode 100644
index 0000000..dc5ce77
--- /dev/null
+++ b/tnslc/breakdown.png
Binary files differ
diff --git a/tnslc/compile/codegen.tnsl b/tnslc/compile/codegen.tnsl
new file mode 100644
index 0000000..165fe12
--- /dev/null
+++ b/tnslc/compile/codegen.tnsl
@@ -0,0 +1,4 @@
+
+/; generate (~utils.File fin, fout)
+;/
+
diff --git a/tnslc/compile/compbuf.tnsl b/tnslc/compile/compbuf.tnsl
new file mode 100644
index 0000000..b4ce261
--- /dev/null
+++ b/tnslc/compile/compbuf.tnsl
@@ -0,0 +1,45 @@
+
+struct CompBuf {
+ utils.Vector
+ sec_head,
+ sec_data,
+ sec_code
+}
+
+/; method CompBuf
+ /; init
+ self.sec_head.init(1)
+ self.sec_data.init(1)
+ self.sec_code.init(1)
+ ;/
+
+ /; add_h(~uint8 text)
+ self.sec_head.push_cstr(text)
+ ;/
+
+ /; add_d(~uint8 text)
+ self.sec_data.push_cstr(text)
+ ;/
+
+ /; add_c(~uint8 text)
+ self.sec_code.push_cstr(text)
+ ;/
+
+ /; write_to(~utils.File fout)
+ fout`.write_cstr("BITS 64\0\n")
+ fout`.write_cstr(self.sec_head.as_cstr())
+
+ fout`.write_cstr("\nsection .data\0\n\n")
+ fout`.write_cstr(self.sec_data.as_cstr())
+
+ fout`.write_cstr("\nsection .text\0\n\n")
+ fout`.write_cstr(self.sec_code.as_cstr())
+ ;/
+
+ /; end
+ self.sec_head.end()
+ self.sec_data.end()
+ self.sec_code.end()
+ ;/
+;/
+
diff --git a/tnslc/compile/compile.tnsl b/tnslc/compile/compile.tnsl
index b980b62..338e28d 100644
--- a/tnslc/compile/compile.tnsl
+++ b/tnslc/compile/compile.tnsl
@@ -1,5 +1,9 @@
/; module compile
- :import "type.tnsl"
- :import "outbuf.tnsl"
- :import "generate.tnsl"
+ :import "compbuf.tnsl"
+ :import "struct.tnsl"
+ :import "var.tnsl"
+ :import "function.tnsl"
+ :import "module.tnsl"
+ :import "codegen.tnsl"
;/
+
diff --git a/tnslc/compile/function.tnsl b/tnslc/compile/function.tnsl
new file mode 100644
index 0000000..cf42db1
--- /dev/null
+++ b/tnslc/compile/function.tnsl
@@ -0,0 +1,36 @@
+
+struct Function {
+ ~uint8 name,
+ utils.Vector
+ inputs,
+ outputs,
+ ~parse.Node body
+}
+
+/; method Function
+ /; init (~uint8 name)
+ self.name = name
+ Var v
+ self.inputs.init(len v)
+ self.outputs.init(len v)
+ ;/
+
+ /; end
+ _delete(self.name)
+ self.body`.end()
+
+ ~Var v
+ /; loop (int i = 0; i < self.inputs.count) [i++]
+ v = self.inputs.get(i)
+ v`.end()
+ ;/
+ self.inputs.end()
+
+ /; loop (int i = 0; i < self.outputs.count) [i++]
+ v = self.outputs.get(i)
+ v`.end()
+ ;/
+ self.outputs.end()
+ ;/
+;/
+
diff --git a/tnslc/compile/generate.tnsl b/tnslc/compile/generate.tnsl
deleted file mode 100644
index c05a304..0000000
--- a/tnslc/compile/generate.tnsl
+++ /dev/null
@@ -1,22 +0,0 @@
-/; generate_module (~OutBuf buf, ~Module mod)
-;/
-
-/; generate (~utils.File fin, fout)
- parse.Node n = parse.generate_ast(fin)
- n.update_children()
- parse.print_ast(~n)
-
- OutBuf buf
- buf.init()
-
- Module mod = transform_tree(~n, ~buf)
- mod.print(0)
-
-
- generate_module(~buf, ~mod)
- buf.write_to_file(fout)
-
- mod.end()
- buf.end()
- n.end()
-;/
diff --git a/tnslc/compile/module.tnsl b/tnslc/compile/module.tnsl
new file mode 100644
index 0000000..6dbef6c
--- /dev/null
+++ b/tnslc/compile/module.tnsl
@@ -0,0 +1,68 @@
+
+struct Module {
+ # Text name of module
+ ~uint8 name,
+
+ # Various contained elements
+ utils.Vector
+ vars,
+ structs,
+ funcs,
+ subs,
+
+ # Whether we export or not
+ bool e
+}
+
+/; method Module
+
+ /; init (~uint8 name, bool exp)
+ Var v
+ Struct s
+ Function f
+ Module m
+
+ self.vars.init(len v)
+ self.structs.init(len s)
+ self.funcs.init(len f)
+ self.subs.init(len m)
+
+ self.name = name
+ self.e = exp
+ ;/
+
+ /; end
+ _delete(self.name)
+
+ ~Var v
+ /; loop (int i = 0; i < self.vars.count) [i++]
+ v = self.vars.get(i)
+ v`.end()
+ ;/
+ self.vars.end()
+
+ ~Struct s
+ /; loop (int i = 0; i < self.structs.count) [i++]
+ s = self.structs.get(i)
+ s`.end()
+ ;/
+ self.structs.end()
+
+ ~Function f
+ /; loop (int i = 0; i < self.funcs.count) [i++]
+ f = self.funcs.get(i)
+ f`.end()
+ ;/
+ self.funcs.end()
+
+ ~Module m
+ /; loop (int i = 0; i < self.subs.count) [i++]
+ m = self.subs.get(i)
+ m`.end()
+ ;/
+ self.subs.end()
+
+ ;/
+
+;/
+
diff --git a/tnslc/compile/outbuf.tnsl b/tnslc/compile/outbuf.tnsl
deleted file mode 100644
index 7394feb..0000000
--- a/tnslc/compile/outbuf.tnsl
+++ /dev/null
@@ -1,31 +0,0 @@
-struct OutBuf {
- utils.Vector
- hsec,
- dsec,
- csec
-}
-
-/; method OutBuf
- /; init
- self.hsec.init(1)
- self.dsec.init(1)
- self.csec.init(1)
- ;/
-
- /; write_to_file (~utils.File fout)
- fout`.open()
- fout`.write_cstr("bits 64\n\0")
- fout`.write_cstr(self.hsec.as_cstr())
- fout`.write_cstr("\nsection .data\n\0")
- fout`.write_cstr(self.dsec.as_cstr())
- fout`.write_cstr("\nsection .text\n\0")
- fout`.write_cstr(self.csec.as_cstr())
- fout`.close()
- ;/
-
- /; end
- self.hsec.end()
- self.dsec.end()
- self.csec.end()
- ;/
-;/
diff --git a/tnslc/compile/scope.tnsl b/tnslc/compile/scope.tnsl
new file mode 100644
index 0000000..f95d0fd
--- /dev/null
+++ b/tnslc/compile/scope.tnsl
@@ -0,0 +1,14 @@
+
+struct Scope {
+ ~uint8 name,
+ utils.Vector
+ reg_vars,
+ stack_vars,
+ int
+ c_const,
+ c_sub
+}
+
+/; method Scope
+;/
+
diff --git a/tnslc/compile/struct.tnsl b/tnslc/compile/struct.tnsl
new file mode 100644
index 0000000..d175aef
--- /dev/null
+++ b/tnslc/compile/struct.tnsl
@@ -0,0 +1,46 @@
+
+struct Struct {
+ ~uint8 name,
+ ~Module methods,
+ utils.Vector members,
+ int size
+}
+
+/; method Struct
+
+ /; init (~uint8 name)
+ self.name = name
+ Var v
+ self.members.init(len v)
+ ;/
+
+ /; add_member(~Var v)
+ self.members.push(v)
+ ;/
+
+ /; get_member(~uint8 name) [~Var]
+ ~Var out = NULL
+
+ ~Var v
+ /; loop (int i = 0; i < self.members.count) [i++]
+ v = self.members.get(i)
+ /; if (utils.strcmp(v`.name, name) == true)
+ return v
+ ;/
+ ;/
+
+ return out
+ ;/
+
+ /; end
+ _delete(self.name)
+ ~Var v
+ /; loop (int i = 0; i < self.members.count) [i++]
+ v = self.members.get(i)
+ v`.end()
+ ;/
+ self.members.end()
+ ;/
+
+;/
+
diff --git a/tnslc/compile/type.tnsl b/tnslc/compile/type.tnsl
deleted file mode 100644
index 28813ce..0000000
--- a/tnslc/compile/type.tnsl
+++ /dev/null
@@ -1,588 +0,0 @@
-/; _indent (int indent)
- /; loop (int i = 0; i < indent) [i++]
- _printf(" \0")
- ;/
-;/
-
-struct Variable {
- ~uint8 name,
- ~Type _type,
- utils.Vector ptr
-}
-
-/; method Variable
- /; init (~uint8 name)
- self.name = name
- self.ptr.init(8)
- ;/
-
- /; add_ptr(uint ptp)
- self.ptr.push(~ptp)
- ;/
-
- /; get_ptr [uint]
- /; if (self.ptr.count == 0)
- return 0
- ;/
- ~uint p = self.ptr.get(self.ptr.count - 1)
- return p`
- ;/
-
- /; pop_ptr [uint]
- /; if (self.ptr.count == 0)
- return 0
- ;/
- ~uint p = self.ptr.get(self.ptr.count - 1)
- uint out = p`
- self.ptr.pop()
- return out
- ;/
-
- /; end
- _delete(self.name)
- self.ptr.end()
- ;/
-
- /; _prnt(int indent)
- _printf(self.name)
-
- # todo: types and such
-
- _indent(indent)
- _printf("}\n\0")
- ;/
-
- /; print (int indent)
- _indent(indent)
- _printf("{ Variable: \0")
- _prnt(indent)
- ;/
-
- /; print_mem (int indent)
- _indent(indent)
- _printf("{ Member: \0")
- _prnt(indent)
- ;/
-;/
-
-struct Type {
- ~uint8 name,
- uint size,
- utils.Vector vars,
- ~Module methods,
-}
-
-/; method Type
- /; init(~uint8 name)
- self.name = name
- Variable tmp
- self.vars.init(len tmp)
- ;/
-
- /; add_var (~Variable v)
- self.vars.push(v)
- ;/
-
- /; end
- _delete(self.name)
- /; loop (int i = 0; i < self.vars.count) [i++]
- ~Variable v = self.vars.get(i)
- v`.end()
- ;/
- self.vars.end()
- ;/
-
- /; print (int indent)
- _indent(indent)
- _printf("{ Type: \0")
- _printf(self.name)
- _print_num(" { size: %d }\n\0", self.size)
-
- /; loop (int i = 0; i < self.vars.count) [i++]
- ~Variable v = self.vars.get(i)
- v`.print_mem(indent + 1)
- ;/
-
- _indent(indent)
- _printf("}\n\0")
- ;/
-;/
-
-struct Function {
- ~uint8
- name,
- ~parse.Node
- body,
- utils.Vector
- inputs,
- outputs
-}
-
-/; method Function
- /; init (~uint8 name)
- self.name = name
- Variable vtmp
- ~uint i
- self.inputs.init(len vtmp)
- self.outputs.init(len i)
- ;/
-
- /; add_input (~Variable v)
- self.inputs.push(v)
- ;/
-
- /; add_output (~Type t)
- self.outputs.push(~t)
- ;/
-
- /; end
- _delete(self.name)
-
- /; loop (int i = 0; i < self.inputs.count) [i++]
- ~Variable v = self.inputs.get(i)
- v`.end()
- ;/
- self.inputs.end()
-
- self.outputs.end()
- ;/
-;/
-
-struct Enum {
- ~uint8 name,
- ~Type _type,
- utils.Vector vals
-}
-
-/; method Enum
- /; init (~uint8 name)
- self.name = name
- Variable vtmp
- self.vals.init(len vtmp)
- ;/
-
- /; end
- _delete(self.name)
- /; loop (int i = 0; i < self.vals.count) [i++]
- ~Variable v = self.vals.get(i)
- v`.end()
- ;/
- self.vals.end()
- ;/
-
- /; print (int indent)
- _indent(indent)
- _printf("{ Enum: \0")
- _printf(self.name)
- _printf("\n\0")
-
- /; loop (int i = 0; i < self.vals.count) [i++]
- ~Variable v = self.vals.get(i)
- v`.print(indent + 1)
- ;/
-
- _indent(indent)
- _printf("}\n\0")
- ;/
-;/
-
-struct Module {
- ~uint8 name,
- ~Module parent,
- bool exp, mth,
- utils.Vector
- sub,
- vars,
- types,
- funcs,
- enums
-
-}
-
-uint8 MOD_FIND_SUB = 0
-uint8 MOD_FIND_VAR = 1
-uint8 MOD_FIND_TYP = 2
-uint8 MOD_FIND_FUN = 3
-uint8 MOD_FIND_ENM = 4
-
-/; method Module
- /; init (~uint8 name)
- self.name = name
- Module mtmp
- Variable vtmp
- Type ttmp
- Function ftmp
- Enum etmp
- self.sub.init(len mtmp)
- self.vars.init(len vtmp)
- self.types.init(len ttmp)
- self.funcs.init(len ftmp)
- self.enums.init(len etmp)
- ;/
-
- /; update_children
- /; loop (int i = 0; i < self.sub.count) [i++]
- ~Module s = self.sub.get(i)
- s`.parent = ~self
- ;/
- ;/
-
- /; add_sub(~Module m) [~Module]
- self.sub.push(m)
- /; loop (int i = 0; i < self.sub.count) [i++]
- ~Module s = self.sub.get(i)
- s`.update_children()
- ;/
- ~Module out = self.sub.get(self.sub.count - 1)
- out`.parent = ~self
- return out
- ;/
-
- /; add_var (~Variable v)
- self.vars.push(v)
- ;/
-
- /; add_type (~Type t)
- self.types.push(t)
- ;/
-
- /; add_funcs (~Function f)
- self.funcs.push(f)
- ;/
-
- /; add_enum (~Enum e)
- self.enums.push(e)
- ;/
-
- /; _find_rec (utils.Artifact pth, uint8 typ, int sub) [~void]
- /; if (sub !< pth.count)
- return NULL
- ;; else if ((sub + 1) < pth.count)
- /; loop (int i = 0; i < self.sub.count) [i++]
- ~Module m = self.sub.get(i)
- /; if (utils.strcmp(pth.get(sub), m`.name) == true && m`.mth == false)
- return _find_rec(pth, typ, sub + 1)
- ;/
- ;/
- ;; else
- /; if (typ == MOD_FIND_SUB)
- /; loop (int i = 0; i < self.sub.count) [i++]
- ~Module m = self.sub.get(i)
- /; if (utils.strcmp(pth.get(sub), m`.name) == true && m`.mth == false)
- return self.sub.get(i)
- ;/
- ;/
- ;; else if (typ == MOD_FIND_VAR)
- /; loop (int i = 0; i < self.vars.count) [i++]
- ~Variable v = self.vars.get(i)
- /; if (utils.strcmp(pth.get(sub), v`.name) == true)
- return self.vars.get(i)
- ;/
- ;/
- ;; else if (typ == MOD_FIND_TYP)
- /; loop (int i = 0; i < self.types.count) [i++]
- ~Type t = self.types.get(i)
- /; if (utils.strcmp(pth.get(sub), t`.name) == true)
- return self.types.get(i)
- ;/
- ;/
- ;; else if (typ == MOD_FIND_FUN)
- /; loop (int i = 0; i < self.funcs.count) [i++]
- ~Function f = self.funcs.get(i)
- /; if (utils.strcmp(pth.get(sub), f`.name) == true)
- return self.funcs.get(i)
- ;/
- ;/
- ;; else if (typ == MOD_FIND_ENM)
- /; loop (int i = 0; i < self.enums.count) [i++]
- ~Enum e = self.enums.get(i)
- /; if (utils.strcmp(pth.get(sub), e`.name) == true)
- return self.enums.get(i)
- ;/
- ;/
- ;/
- ;/
-
- /; if (self.parent == NULL || sub !== 0)
- return NULL
- ;/
-
- return self.parent._find_rec(pth, typ, 0)
- ;/
-
- /; find (utils.Artifact pth, uint8 typ) [~void]
- return _find_rec(pth, typ, 0)
- ;/
-
- /; end
- _delete(self.name)
-
- /; loop (int i = 0; i < self.sub.count) [i++]
- ~Module m = self.sub.get(i)
- m`.end()
- ;/
- self.sub.end()
-
- /; loop (int i = 0; i < self.vars.count) [i++]
- ~Variable v = self.vars.get(i)
- v`.end()
- ;/
- self.vars.end()
-
- /; loop (int i = 0; i < self.types.count) [i++]
- ~Type t = self.types.get(i)
- t`.end()
- ;/
- self.types.end()
-
- /; loop (int i = 0; i < self.funcs.count) [i++]
- ~Function f = self.funcs.get(i)
- f`.end()
- ;/
- self.funcs.end()
-
- /; loop (int i = 0; i < self.enums.count) [i++]
- ~Enum e = self.enums.get(i)
- e`.end()
- ;/
- self.enums.end()
- ;/
-
- /; print (int indent)
- _indent(indent)
- /; if (self.mth == true)
- _printf("{ Method: \0")
- ;; else
- _printf("{ Module: \0")
- ;/
- _printf(self.name)
- _printf("\n\0")
-
-
- /; loop (int i = 0; i < self.sub.count) [i++]
- ~Module s = self.sub.get(i)
- s`.print(indent + 1)
- ;/
-
- /; loop (int i = 0; i < self.types.count) [i++]
- ~Type s = self.types.get(i)
- s`.print(indent + 1)
- ;/
-
- /; loop (int i = 0; i < self.enums.count) [i++]
- ~Enum s = self.enums.get(i)
- s`.print(indent + 1)
- ;/
-
- _indent(indent)
- _printf("}\n\0")
- ;/
-;/
-
-{}~uint8 GEN_VAR_NAMES = { "int\0", "int8\0", "int16\0", "int32\0", "int64\0", "uint\0", "uint8\0", "uint16\0", "uint32\0", "uint64\0", "float\0", "float32\0", "float64\0", "vect\0", "bool\0", "void\0" }
-
-{}uint GEN_VAR_SIZES = { 8, 1, 2, 4, 8, 8, 1, 2, 4, 8, 8, 4, 8, 0, 1, 8}
-
-/; find_type(utils.Artifact a, ~parse.Node n) [~parse.Node]
- return NULL
-;/
-
-/; transform_struct(~parse.Node n, ~Module m)
-;/
-
-/; transform_enum(~parse.Node n, ~OutBuf b, ~Module m)
-;/
-
-/; _tfn_mod_loop (~parse.Node n, ~OutBuf b, ~Module m)
- /; loop (int i = 0; i < n`.sub.count) [i++]
- ~parse.Node s = n`.sub.get(i)
- /; if (s`._type == parse.NTYPE_MODULE || s`._type == parse.NTYPE_EXPORT)
- transform_module(s, b, m)
- ;; else if (s`._type == parse.NTYPE_STRUCT)
- transform_struct(s, m)
- ;; else if (s`._type == parse.NTYPE_ENUM)
- transform_enum(s, b, m)
- ;/
- ;/
-;/
-
-/; transform_module (~parse.Node n, ~OutBuf b, ~Module parent)
- ~Module s = NULL
-
- /; loop (int i = 0; i < parent`.sub.count) [i++]
- ~Module tmp = parent`.sub.get(i)
- /; if (utils.strcmp(n`.data, tmp`.name) == true)
- s = tmp
- ;/
- ;/
-
- ~int cmp = s
- /; if (cmp == NULL)
- Module out
- out.init(utils.strcpy(n`.data))
-
- /; if (n`._type == parse.NTYPE_EXPORT)
- out.exp = true
- ;; else
- out.exp = false
- ;/
-
- s = parent`.add_sub(~out)
- ;/
-
- _tfn_mod_loop(n, b, s)
-;/
-
-#
-# GEN DEFAULT TYPES
-#
-
-/; _tfn_gen_default_types (~Module m)
- Module d
- d.init(utils.strcpy("#\0"))
- ~Module dp = m`.add_sub(~d)
- /; loop (int i = 0; i < len GEN_VAR_NAMES) [i++]
- Type t
- t.init(utils.strcpy(GEN_VAR_NAMES{i}))
- t.size = GEN_VAR_SIZES{i}
- t.methods = dp
- m`.add_type(~t)
- ;/
-;/
-
-#
-# GEN TYPES & ENUMS FIRST PASS
-#
-
-/; _tfn_gen_types_mod(~parse.Node n, ~Module m)
- ~Module s = NULL
-
- /; loop (int i = 0; i < m`.sub.count) [i++]
- ~Module tmp = m`.sub.get(i)
- /; if (utils.strcmp(n`.data, tmp`.name) == true)
- s = tmp
- ;/
- ;/
-
- ~int cmp = s
- /; if (cmp == NULL)
- Module out
- out.init(utils.strcpy(n`.data))
-
- /; if (n`._type == parse.NTYPE_EXPORT)
- out.exp = true
- ;; else
- out.exp = false
- ;/
-
- s = m`.add_sub(~out)
- ;/
-
- _tfn_gen_types(n, s)
-;/
-
-/; _tfn_gen_types (~parse.Node n, ~Module m)
- /; loop (int i = 0; i < n`.sub.count) [i++]
- ~parse.Node s = n`.sub.get(i)
- /; if (s`._type == parse.NTYPE_MODULE || s`._type == parse.NTYPE_EXPORT)
- _tfn_gen_types_mod(s, m)
- ;; else if (s`._type == parse.NTYPE_STRUCT)
- Module mth
- mth.init(utils.stradd("_#\0", s`.data))
- ~Module mp = m`.add_sub(~mth)
-
- Type t
- t.size = 0
- t.init(utils.strcpy(s`.data))
- t.methods = mp
- m`.add_type(~t)
- ;; else if (s`._type == parse.NTYPE_ENUM)
- Enum e
- e.init(utils.strcpy(s`.data))
- m`.add_enum(~e)
- ;/
- ;/
-;/
-
-# Main transform functions
-
-/; _td_rec(~parse.Node n, ~utils.Artifact a)
- /; if (n`.eq(".\0") == true && n`.sub.count > 1)
- ~parse.Node tmp = n`.sub.get(0)
- _td_rec(tmp, a)
- tmp = n`.sub.get(1)
- _td_rec(tmp, a)
- ;; else if (n`._type == parse.NTYPE_ID)
- a`.push(utils.strcpy(n`.data))
- ;/
-;/
-
-/; transform_dot(~parse.Node n) [utils.Artifact]
- utils.Artifact out
- out.init()
-
- _td_rec(n, ~out)
-
- return out
-;/
-
-/; art_from_type(~parse.Node n) [utils.Artifact]
- utils.Artifact out
- out.init()
-
- /; if (n`._type !== parse.NTYPE_TYPE)
- return out
- ;/
-
- /; loop (int i = 0; i < n`.sub.count) [i++]
- ~parse.Node s = n`.sub.get(i)
- /; if (s`._type == parse.NTYPE_ID)
- out.push(utils.strcpy(s`.data))
- ;/
- ;/
-
- return out
-;/
-
-/; vec_from_type(~parse.Node n) [utils.Vector]
- utils.Vector out
- out.init(8)
-
- /; if (n`._type !== parse.NTYPE_TYPE)
- return out
- ;/
-
- int nm
- /; loop (int i = 0; i < n`.sub.count) [i++]
- ~parse.Node s = n`.sub.get(i)
- /; if (s`._type == parse.NTYPE_PRE_OP)
- /; if (s`.eq("~\0") == true)
- nm = 0 - 1
- ;; else if (s`.eq("{\0") == true)
- # TODO: WHATEVER
- nm = 0 - 2
- ;/
- out.push(~nm)
- ;; else if (s`._type == parse.NTYPE_POST_OP)
- /; if (s`.eq("`\0") == true)
- nm = 0
- out.push(~nm)
- ;/
- ;/
- ;/
-
- return out
-;/
-
-/; transform_tree (~parse.Node n, ~OutBuf buf) [Module]
- Module out
- out.init(utils.strcpy(n`.data))
- out.exp = true
-
- _tfn_gen_default_types(~out)
- _tfn_gen_types(n, ~out)
- out.update_children()
- _tfn_mod_loop(n, buf, ~out)
-
- return out
-;/
diff --git a/tnslc/compile/var.tnsl b/tnslc/compile/var.tnsl
new file mode 100644
index 0000000..9526fc6
--- /dev/null
+++ b/tnslc/compile/var.tnsl
@@ -0,0 +1,33 @@
+
+struct Var {
+ ~uint8 name,
+ ~Struct _type,
+ utils.Vector ptrc,
+ int loc
+}
+
+/; method Var
+ /; init (~uint8 name)
+ self.name = name
+ self.ptrc.init(4)
+ ;/
+
+ /; ptr [int32]
+ ~int32 i
+ i = self.ptrc.get(self.ptrc.count - 1)
+ return i`
+ ;/
+
+ /; ptr_push (int32 p)
+ self.ptrc.push(~p)
+ ;/
+
+ /; ptr_pop
+ self.ptrc.pop()
+ ;/
+
+ /; end
+ _delete(self.name)
+ self.ptrc.end()
+ ;/
+;/
diff --git a/tnslc/layout_generator.png b/tnslc/layout_generator.png
new file mode 100644
index 0000000..4e1c05c
--- /dev/null
+++ b/tnslc/layout_generator.png
Binary files differ
diff --git a/tnslc/out.log b/tnslc/out.log
new file mode 100644
index 0000000..046dd0c
--- /dev/null
+++ b/tnslc/out.log
@@ -0,0 +1,42244 @@
+Expected 'import', 'struct', 'asm', block, or declaration in top level:
+ File: tnslc.tnsl
+ At: Token { ":", line: 1, col: 1, type: UNKNOWN }
+
+Importing utils/utils.tnsl
+Expected 'import', 'struct', 'asm', block, or declaration in top level:
+ File: utils/utils.tnsl
+ At: Token { ":", line: 1, col: 1, type: UNKNOWN }
+
+Importing utils/c_wrap_linux.tnsl
+Expected 'import', 'struct', 'asm', block, or declaration in top level:
+ File: utils/utils.tnsl
+ At: Token { ":", line: 5, col: 2, type: UNKNOWN }
+
+Importing utils/vector.tnsl
+Expected 'import', 'struct', 'asm', block, or declaration in top level:
+ File: utils/utils.tnsl
+ At: Token { ":", line: 6, col: 2, type: UNKNOWN }
+
+Importing utils/file.tnsl
+Expected 'import', 'struct', 'asm', block, or declaration in top level:
+ File: utils/utils.tnsl
+ At: Token { ":", line: 7, col: 2, type: UNKNOWN }
+
+Importing utils/algo.tnsl
+Expected 'import', 'struct', 'asm', block, or declaration in top level:
+ File: utils/utils.tnsl
+ At: Token { ":", line: 8, col: 2, type: UNKNOWN }
+
+Importing utils/iterator.tnsl
+Expected 'import', 'struct', 'asm', block, or declaration in top level:
+ File: tnslc.tnsl
+ At: Token { ":", line: 2, col: 1, type: UNKNOWN }
+
+Importing parse/parse.tnsl
+Expected 'import', 'struct', 'asm', block, or declaration in top level:
+ File: parse/parse.tnsl
+ At: Token { ":", line: 2, col: 2, type: UNKNOWN }
+
+Importing parse/tokenizer.tnsl
+Expected 'import', 'struct', 'asm', block, or declaration in top level:
+ File: parse/parse.tnsl
+ At: Token { ":", line: 3, col: 2, type: UNKNOWN }
+
+Importing parse/ast.tnsl
+Expected 'import', 'struct', 'asm', block, or declaration in top level:
+ File: tnslc.tnsl
+ At: Token { ":", line: 3, col: 1, type: UNKNOWN }
+
+Importing compile/compile.tnsl
+Expected 'import', 'struct', 'asm', block, or declaration in top level:
+ File: compile/compile.tnsl
+ At: Token { ":", line: 2, col: 2, type: UNKNOWN }
+
+Importing compile/type.tnsl
+Expected 'import', 'struct', 'asm', block, or declaration in top level:
+ File: compile/compile.tnsl
+ At: Token { ":", line: 3, col: 2, type: UNKNOWN }
+
+Importing compile/outbuf.tnsl
+Expected 'import', 'struct', 'asm', block, or declaration in top level:
+ File: compile/compile.tnsl
+ At: Token { ":", line: 4, col: 2, type: UNKNOWN }
+
+Importing compile/generate.tnsl
+{ NODE_TYPE: MODULE, DATA:
+ { NODE_TYPE: ASM, DATA: extern malloc, realloc, free, printf, putchar, open, close, read, write, lseek, perror
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: {
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: _alert
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Alert!\n\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: {
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: _dec
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "%d\n\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: {
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: _ptr
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "%p\n\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ { NODE_TYPE: ID, DATA: NULL
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _alloc
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: ASM, DATA: mov rax, rsp
+ }
+ { NODE_TYPE: ASM, DATA: xor rdx, rdx
+ }
+ { NODE_TYPE: ASM, DATA: mov rcx, 16
+ }
+ { NODE_TYPE: ASM, DATA: div rcx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, rdx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, 128
+ }
+ { NODE_TYPE: ASM, DATA: mov rdi, r10
+ }
+ { NODE_TYPE: ASM, DATA: mov rsi, 0
+ }
+ { NODE_TYPE: ASM, DATA: xor rax, rax
+ }
+ { NODE_TYPE: ASM, DATA: call malloc wrt ..plt
+ }
+ { NODE_TYPE: ASM, DATA: mov r11, rax
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _realloc
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: new_size
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: ASM, DATA: mov rax, rsp
+ }
+ { NODE_TYPE: ASM, DATA: xor rdx, rdx
+ }
+ { NODE_TYPE: ASM, DATA: mov rcx, 16
+ }
+ { NODE_TYPE: ASM, DATA: div rcx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, rdx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, 128
+ }
+ { NODE_TYPE: ASM, DATA: mov rdi, r10
+ }
+ { NODE_TYPE: ASM, DATA: mov rsi, r11
+ }
+ { NODE_TYPE: ASM, DATA: xor rax, rax
+ }
+ { NODE_TYPE: ASM, DATA: call realloc wrt ..plt
+ }
+ { NODE_TYPE: ASM, DATA: mov r12, rax
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _delete
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ }
+ { NODE_TYPE: ASM, DATA: mov rax, rsp
+ }
+ { NODE_TYPE: ASM, DATA: xor rdx, rdx
+ }
+ { NODE_TYPE: ASM, DATA: mov rcx, 16
+ }
+ { NODE_TYPE: ASM, DATA: div rcx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, rdx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, 128
+ }
+ { NODE_TYPE: ASM, DATA: mov rdi, r10
+ }
+ { NODE_TYPE: ASM, DATA: mov rsi, 0
+ }
+ { NODE_TYPE: ASM, DATA: xor rax, rax
+ }
+ { NODE_TYPE: ASM, DATA: call free wrt ..plt
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _putchar
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: char
+ }
+ }
+ { NODE_TYPE: ASM, DATA: mov rax, rsp
+ }
+ { NODE_TYPE: ASM, DATA: xor rdx, rdx
+ }
+ { NODE_TYPE: ASM, DATA: mov rcx, 16
+ }
+ { NODE_TYPE: ASM, DATA: div rcx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, rdx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, 128
+ }
+ { NODE_TYPE: ASM, DATA: mov rdi, r10
+ }
+ { NODE_TYPE: ASM, DATA: xor rsi, rsi
+ }
+ { NODE_TYPE: ASM, DATA: xor rax, rax
+ }
+ { NODE_TYPE: ASM, DATA: call putchar wrt ..plt
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _printf
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _putchar
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _print_num
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: num
+ }
+ }
+ { NODE_TYPE: ASM, DATA: mov rax, rsp
+ }
+ { NODE_TYPE: ASM, DATA: xor rdx, rdx
+ }
+ { NODE_TYPE: ASM, DATA: mov rcx, 16
+ }
+ { NODE_TYPE: ASM, DATA: div rcx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, rdx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, 128
+ }
+ { NODE_TYPE: ASM, DATA: mov rdi, r10
+ }
+ { NODE_TYPE: ASM, DATA: mov rsi, r11
+ }
+ { NODE_TYPE: ASM, DATA: xor rax, rax
+ }
+ { NODE_TYPE: ASM, DATA: call printf wrt ..plt
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _create_file
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: ASM, DATA: mov rax, rsp
+ }
+ { NODE_TYPE: ASM, DATA: xor rdx, rdx
+ }
+ { NODE_TYPE: ASM, DATA: mov rcx, 16
+ }
+ { NODE_TYPE: ASM, DATA: div rcx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, rdx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, 128
+ }
+ { NODE_TYPE: ASM, DATA: mov rdi, r10
+ }
+ { NODE_TYPE: ASM, DATA: mov rsi, 0q1102
+ }
+ { NODE_TYPE: ASM, DATA: mov rdx, 0q700
+ }
+ { NODE_TYPE: ASM, DATA: call open wrt ..plt
+ }
+ { NODE_TYPE: ASM, DATA: mov r11, rax
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _open_file
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: ASM, DATA: mov rax, rsp
+ }
+ { NODE_TYPE: ASM, DATA: xor rdx, rdx
+ }
+ { NODE_TYPE: ASM, DATA: mov rcx, 16
+ }
+ { NODE_TYPE: ASM, DATA: div rcx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, rdx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, 128
+ }
+ { NODE_TYPE: ASM, DATA: mov rdi, r10
+ }
+ { NODE_TYPE: ASM, DATA: mov rsi, 2
+ }
+ { NODE_TYPE: ASM, DATA: mov rdx, 0q700
+ }
+ { NODE_TYPE: ASM, DATA: call open wrt ..plt
+ }
+ { NODE_TYPE: ASM, DATA: mov r11, rax
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _close_file
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ { NODE_TYPE: ASM, DATA: mov rax, rsp
+ }
+ { NODE_TYPE: ASM, DATA: xor rdx, rdx
+ }
+ { NODE_TYPE: ASM, DATA: mov rcx, 16
+ }
+ { NODE_TYPE: ASM, DATA: div rcx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, rdx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, 128
+ }
+ { NODE_TYPE: ASM, DATA: mov rdi, r10
+ }
+ { NODE_TYPE: ASM, DATA: call close wrt ..plt
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _read_byte
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: byte
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: ASM, DATA: mov rax, rsp
+ }
+ { NODE_TYPE: ASM, DATA: xor rdx, rdx
+ }
+ { NODE_TYPE: ASM, DATA: mov rcx, 16
+ }
+ { NODE_TYPE: ASM, DATA: div rcx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, rdx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, 128
+ }
+ { NODE_TYPE: ASM, DATA: mov rdi, r10
+ }
+ { NODE_TYPE: ASM, DATA: mov rsi, r11
+ }
+ { NODE_TYPE: ASM, DATA: mov rdx, 1
+ }
+ { NODE_TYPE: ASM, DATA: call read wrt ..plt
+ }
+ { NODE_TYPE: ASM, DATA: mov r12, rax
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _fseek
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: ASM, DATA: mov rax, rsp
+ }
+ { NODE_TYPE: ASM, DATA: xor rdx, rdx
+ }
+ { NODE_TYPE: ASM, DATA: mov rcx, 16
+ }
+ { NODE_TYPE: ASM, DATA: div rcx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, rdx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, 128
+ }
+ { NODE_TYPE: ASM, DATA: mov rdi, r10
+ }
+ { NODE_TYPE: ASM, DATA: mov rsi, r11
+ }
+ { NODE_TYPE: ASM, DATA: mov rdx, 0
+ }
+ { NODE_TYPE: ASM, DATA: call lseek wrt ..plt
+ }
+ { NODE_TYPE: ASM, DATA: mov r12, rax
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _write_byte
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: byte
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: ASM, DATA: mov rax, rsp
+ }
+ { NODE_TYPE: ASM, DATA: xor rdx, rdx
+ }
+ { NODE_TYPE: ASM, DATA: mov rcx, 16
+ }
+ { NODE_TYPE: ASM, DATA: div rcx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, rdx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, 128
+ }
+ { NODE_TYPE: ASM, DATA: mov rdi, r10
+ }
+ { NODE_TYPE: ASM, DATA: mov rsi, r11
+ }
+ { NODE_TYPE: ASM, DATA: mov rdx, 1
+ }
+ { NODE_TYPE: ASM, DATA: call write wrt ..plt
+ }
+ { NODE_TYPE: ASM, DATA: mov r12, rax
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _perror
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: ASM, DATA: mov rax, rsp
+ }
+ { NODE_TYPE: ASM, DATA: xor rdx, rdx
+ }
+ { NODE_TYPE: ASM, DATA: mov rcx, 16
+ }
+ { NODE_TYPE: ASM, DATA: div rcx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, rdx
+ }
+ { NODE_TYPE: ASM, DATA: sub rsp, 128
+ }
+ { NODE_TYPE: ASM, DATA: mov rdi, r10
+ }
+ { NODE_TYPE: ASM, DATA: xor rsi, rsi
+ }
+ { NODE_TYPE: ASM, DATA: xor rax, rax
+ }
+ { NODE_TYPE: ASM, DATA: call perror wrt ..plt
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: print_alert
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: _alert
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: MODULE, DATA: utils
+ { NODE_TYPE: STRUCT, DATA: Vector
+ { NODE_TYPE: DLIST, DATA: {
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ { NODE_TYPE: ID, DATA: _elsz
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: VECTOR_MIN_ELEMENTS
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 4
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: VECTOR_MAX_GROW
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 256
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: NUM_STR
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Num %d\n\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: METHOD, DATA: Vector
+ { NODE_TYPE: FUNCTION, DATA: init
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: elsz
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _elsz
+ }
+ }
+ { NODE_TYPE: ID, DATA: elsz
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: ID, DATA: VECTOR_MIN_ELEMENTS
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: ID, DATA: _alloc
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: *
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _elsz
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: from_cstr
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: cstr
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: push_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cstr
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _grow
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: ID, DATA: _realloc
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: *
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _elsz
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: get
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: index
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: index
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: *
+ { NODE_TYPE: ID, DATA: index
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _elsz
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: push
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ { NODE_TYPE: ID, DATA: el
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: ID, DATA: VECTOR_MAX_GROW
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _grow
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _grow
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: VECTOR_MAX_GROW
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ { NODE_TYPE: ID, DATA: start
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: *
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _elsz
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _elsz
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: to
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: start
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: from
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: el
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: to
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: from
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _shrink
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: ID, DATA: _realloc
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: *
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _elsz
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: pop
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: remove
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: remove
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: index
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: index
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: index
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: *
+ { NODE_TYPE: ID, DATA: index
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _elsz
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: *
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _elsz
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: to
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: from
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _elsz
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: to
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: from
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ { NODE_TYPE: POST_OP, DATA: --
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: /
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _shrink
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: /
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 3
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: push_char
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: push_cstr
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: ch
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ch
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: as_cstr
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: z
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: z
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: end
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _elsz
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: STRUCT, DATA: Artifact
+ { NODE_TYPE: DLIST, DATA: {
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: strings
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: METHOD, DATA: Artifact
+ { NODE_TYPE: FUNCTION, DATA: init
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: ID, DATA: VECTOR_MIN_ELEMENTS
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: strings
+ }
+ }
+ { NODE_TYPE: ID, DATA: _alloc
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: *
+ { NODE_TYPE: PRE_OP, DATA: len
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: strings
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: split_cstr
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: split
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: track
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: track
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: split
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: track
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: track
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: track
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: track
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _grow
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: strings
+ }
+ }
+ { NODE_TYPE: ID, DATA: _realloc
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: strings
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: *
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: PRE_OP, DATA: len
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: strings
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: push
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: ID, DATA: VECTOR_MAX_GROW
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _grow
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _grow
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: VECTOR_MAX_GROW
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: strings
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _shrink
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: strings
+ }
+ }
+ { NODE_TYPE: ID, DATA: _realloc
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: strings
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: *
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: PRE_OP, DATA: len
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: strings
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: pop
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ { NODE_TYPE: POST_OP, DATA: --
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: /
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _shrink
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: /
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 3
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: get
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: index
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: index
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: strings
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: index
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: to_cstr
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: join
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: push_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: join
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: end
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: strings
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: STRUCT, DATA: File
+ { NODE_TYPE: DLIST, DATA: {
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Artifact
+ }
+ }
+ { NODE_TYPE: ID, DATA: path
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int32
+ }
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: PT_HANDLE
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Handle: %p\n\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: PARENT_DIR
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".."
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: CURRENT_DIR
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "."
+ }
+ }
+ }
+ }
+ { NODE_TYPE: METHOD, DATA: File
+ { NODE_TYPE: FUNCTION, DATA: init
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: path
+ }
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: path
+ }
+ }
+ { NODE_TYPE: ID, DATA: split_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '/'
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ { NODE_TYPE: POST_OP, DATA: --
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: relative
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: path
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: current
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: path
+ }
+ { NODE_TYPE: ID, DATA: to_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '/'
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: current
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: current
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: path
+ }
+ }
+ { NODE_TYPE: ID, DATA: pop
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Artifact
+ }
+ }
+ { NODE_TYPE: ID, DATA: add
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: add
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: add
+ }
+ { NODE_TYPE: ID, DATA: split_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: path
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '/'
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: add
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: add
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: CURRENT_DIR
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: path
+ }
+ }
+ { NODE_TYPE: ID, DATA: split_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '/'
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: add
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: end
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _close_file
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ { NODE_TYPE: POST_OP, DATA: --
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: path
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: open
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: p
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: path
+ }
+ { NODE_TYPE: ID, DATA: to_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '/'
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ { NODE_TYPE: ID, DATA: _open_file
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: p
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: p
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: create
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: p
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: path
+ }
+ { NODE_TYPE: ID, DATA: to_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '/'
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ { NODE_TYPE: ID, DATA: _create_file
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: p
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: p
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: close
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _close_file
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ { NODE_TYPE: POST_OP, DATA: --
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: read
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: bytes
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _read_byte
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: bytes
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: bytes
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _perror
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Error reading from file\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _print_num
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "FD: %ld\n\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: unread
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _fseek
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: write
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: byte
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: written
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _write_byte
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: handle
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: byte
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: written
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: write_cstr
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: write
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: strcmp
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: a
+ }
+ { NODE_TYPE: ID, DATA: b
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: a
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: b
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: a
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: b
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: a
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: b
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: b
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: a
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: strlen
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: base_for_char
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: c
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: c
+ }
+ { NODE_TYPE: LITERAL, DATA: 'b'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: c
+ }
+ { NODE_TYPE: LITERAL, DATA: 'B'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: c
+ }
+ { NODE_TYPE: LITERAL, DATA: 'o'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: c
+ }
+ { NODE_TYPE: LITERAL, DATA: 'O'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 8
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: c
+ }
+ { NODE_TYPE: LITERAL, DATA: 'x'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: c
+ }
+ { NODE_TYPE: LITERAL, DATA: 'X'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 16
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 10
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: decode_bin
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '1'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: decode_oct
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !>
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '7'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: decode_hex
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !>
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '9'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 'a'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !>
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 'f'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 'a'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 'A'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !>
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 'F'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 'A'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: decode_dec
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _print_num
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NUM_STR
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !>
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '9'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: cstr_to_int
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: base
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 10
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: start
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: l
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: strlen
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: ID, DATA: l
+ }
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: start
+ }
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: start
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: start
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '9'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: start
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: base
+ }
+ { NODE_TYPE: ID, DATA: base_for_char
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: start
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: start
+ }
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: start
+ }
+ { NODE_TYPE: ID, DATA: l
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: start
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: BIN_OP, DATA: *
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: base
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: decoded
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _print_num
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NUM_STR
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: start
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _print_num
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NUM_STR
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: start
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: base
+ }
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: decoded
+ }
+ { NODE_TYPE: ID, DATA: decode_bin
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: start
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: base
+ }
+ { NODE_TYPE: LITERAL, DATA: 8
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: decoded
+ }
+ { NODE_TYPE: ID, DATA: decode_oct
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: start
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: base
+ }
+ { NODE_TYPE: LITERAL, DATA: 10
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: decoded
+ }
+ { NODE_TYPE: ID, DATA: decode_dec
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: start
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: base
+ }
+ { NODE_TYPE: LITERAL, DATA: 16
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: decoded
+ }
+ { NODE_TYPE: ID, DATA: decode_hex
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: start
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: decoded
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: cstr_to_uint
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: base
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 10
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: start
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: l
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: strlen
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: ID, DATA: l
+ }
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: start
+ }
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: start
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: start
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '9'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: start
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: base
+ }
+ { NODE_TYPE: ID, DATA: base_for_char
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: start
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: start
+ }
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: start
+ }
+ { NODE_TYPE: ID, DATA: l
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: start
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: BIN_OP, DATA: *
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: base
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: decoded
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: base
+ }
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: decoded
+ }
+ { NODE_TYPE: ID, DATA: decode_bin
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: start
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: base
+ }
+ { NODE_TYPE: LITERAL, DATA: 8
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: decoded
+ }
+ { NODE_TYPE: ID, DATA: decode_oct
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: start
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: base
+ }
+ { NODE_TYPE: LITERAL, DATA: 10
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: decoded
+ }
+ { NODE_TYPE: ID, DATA: decode_dec
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: start
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: base
+ }
+ { NODE_TYPE: LITERAL, DATA: 16
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: decoded
+ }
+ { NODE_TYPE: ID, DATA: decode_hex
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: start
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: decoded
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: reverse_str
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: l
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: strlen
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: /
+ { NODE_TYPE: ID, DATA: l
+ }
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: ID, DATA: l
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: ID, DATA: l
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: uint_to_hex_str
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: push_char
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: push_char
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 'x'
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: /
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: LITERAL, DATA: 16
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: %
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: LITERAL, DATA: 16
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: ID, DATA: n
+ }
+ { NODE_TYPE: LITERAL, DATA: 9
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: push_char
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: LITERAL, DATA: 'a'
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 10
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: push_char
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 3
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: push_char
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: reverse_str
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: str
+ }
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: int_to_str
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: push_char
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '-'
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: /
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: LITERAL, DATA: 10
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: %
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: LITERAL, DATA: 10
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: push_char
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: push_char
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '-'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: reverse_str
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: str
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: reverse_str
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: strcpy
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: cstr
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: from_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cstr
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: unquote_cha
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: cha
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: cha
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '\\'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cha
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cha
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: cha
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '\"'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '\"'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: cha
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '\''
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '\''
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: cha
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '\\'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '\\'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: cha
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 'n'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '\n'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: cha
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 't'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '\t'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: cha
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cha
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: unquote_str
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '\"'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: buf
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '\\'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: buf
+ }
+ { NODE_TYPE: ID, DATA: unquote_cha
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: buf
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: STRUCT, DATA: Iterator
+ { NODE_TYPE: DLIST, DATA: {
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: v
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ }
+ { NODE_TYPE: METHOD, DATA: Iterator
+ { NODE_TYPE: FUNCTION, DATA: init
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: v
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: v
+ }
+ }
+ { NODE_TYPE: ID, DATA: v
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: get
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: v
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: next
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: v
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: at_end
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: v
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: prev
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ { NODE_TYPE: POST_OP, DATA: --
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: get_pos
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: set_pos
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: p
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: pos
+ }
+ }
+ { NODE_TYPE: ID, DATA: p
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: MODULE, DATA: parse
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_SEP
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYWD
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYTP
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 3
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_LITRL
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 4
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_AUG
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 5
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 6
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_COMNT
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 7
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_UNKNOWN
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 998
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 999
+ }
+ }
+ }
+ }
+ { NODE_TYPE: STRUCT, DATA: Token
+ { NODE_TYPE: DLIST, DATA: {
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ }
+ { NODE_TYPE: METHOD, DATA: Token
+ { NODE_TYPE: FUNCTION, DATA: eq
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: end
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _in_csv
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: csv
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: along
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: csv
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: csv
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: csv
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: ','
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: along
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: along
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: along
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: along
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: along
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: csv
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: along
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: along
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: along
+ { NODE_TYPE: POST_OP, DATA: --
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: along
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: along
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _str_contains
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: KEYWORDS
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "import,using,module,export,struct,method,implements,interface,operator,enum,if,else,loop,continue,break,return,label,goto,asm\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: KEYTYPES
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "uint8,uint16,uint32,uint64,uint,int8,int16,int32,int64,int,float32,float64,float,bool,void,vect,type\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: LITERALS
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "false,true,null,iota\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: RESERVED
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "~`!@#$%^&*()[]{}-+=\"\'\\|;:/?.>,<\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: OP
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "`~!%^&|*-=+./><\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: MULTI_OP
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "==,&&,||,^^,!==,!&&,!||,!^^,!<,!>,<<,>>,!&,!|,!^,++,--,>==,<==\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: MAX_MULTI
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 3
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: MULTI_OP_W
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "is,len\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: DELIMS
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "()[]{}\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: produce_word_token
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: prev
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: is_reserved
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: is_whitespace
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: unread
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _in_csv
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: KEYWORDS
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _in_csv
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: KEYTYPES
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYTP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _in_csv
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: LITERALS
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_LITRL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _in_csv
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: MULTI_OP_W
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_AUG
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: produce_string_token
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: prev
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_LITRL
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: delim
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: delim
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: delim
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '\\'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '\n'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: line
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: ID, DATA: delim
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: delim
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: comment_line
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '\n'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: unread
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: comment_block
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '#'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '/'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: comment_line
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '\n'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: is_comment_block
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "/#\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: is_multi_delim
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "/;\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";;\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";/\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: produce_reserved_token
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: prev
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '#'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_COMNT
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: comment_line
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: ID, DATA: MAX_MULTI
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: is_reserved
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: ID, DATA: MAX_MULTI
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: unread
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: ','
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: ';'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_SEP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _str_contains
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_AUG
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _str_contains
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: DELIMS
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_UNKNOWN
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _in_csv
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: MULTI_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_AUG
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: is_comment_block
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_COMNT
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: comment_block
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: is_multi_delim
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: str
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: pop
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: unread
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: produce_numeric_token
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: prev
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_LITRL
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: base
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: is_reserved
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: is_whitespace
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: unread
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: is_numeric
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: base
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: decimal
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: at_end
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: decimal
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '.'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: decimal
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: is_reserved
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: is_whitespace
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: unread
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: is_numeric
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: base
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: unread
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: is_whitespace
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 8
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: 14
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: ' '
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: is_reserved
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _str_contains
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: RESERVED
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: is_numeric
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '0'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !>
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '9'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: produce_next_token
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: prev
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strlen
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: is_whitespace
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: LITERAL, DATA: '\n'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: line
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: read
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: col
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: unread
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: LITERAL, DATA: '\''
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: LITERAL, DATA: '\"'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_string_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: prev
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: is_reserved
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_reserved_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: prev
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_COMNT
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: is_numeric
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_numeric_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: prev
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_word_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: prev
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: prev
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: produce_first_token
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: gen_token_list
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: len
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: open
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: produce_first_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_COMNT
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: com
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: com
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: com
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: close
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: print_token_type
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: t
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "DELIM\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_SEP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "SEP\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "KEYWD\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYTP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "KEYTP\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_LITRL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "LITRL\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_AUG
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "AUG\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "USRWD\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_COMNT
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "COMNT\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_UNKNOWN
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "UNKNOWN\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "ERR\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: print_token
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: t
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Token { \"\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _print_num
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\", line: %u\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _print_num
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ", col: %u, type: \0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ }
+ { NODE_TYPE: ID, DATA: col
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: print_token_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: t
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: " }\n\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: print_token_list
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: vec
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tok
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: vec
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: tok
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: vec
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: print_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: tok
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: end_token_list
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: vec
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tok
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: vec
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: tok
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: vec
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tok
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: vec
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_MODULE
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_EXPORT
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_STRUCT
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_TYPE
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 3
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 4
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_BIN_OP
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 5
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_PRE_OP
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 6
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_POST_OP
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 7
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_FUNCTION
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 8
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_METHOD
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 9
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_TLIST
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 10
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_DLIST
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 11
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ELIST
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 12
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_SLIST
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 13
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_LITERAL
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 14
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ENUM
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 15
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_DECL
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 16
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_VLIST
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 17
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_VALUE
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 18
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_CAST
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 19
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_FLOW_CONTROL
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 20
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_IF_BLOCK
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 21
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ELIF_BLOCK
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 22
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ELSE_BLOCK
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 23
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_LOOP_BLOCK
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 24
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ASM
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 998
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_EMPTY
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 999
+ }
+ }
+ }
+ }
+ { NODE_TYPE: STRUCT, DATA: Node
+ { NODE_TYPE: DLIST, DATA: {
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ { NODE_TYPE: METHOD, DATA: Node
+ { NODE_TYPE: FUNCTION, DATA: init
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: len
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: eq
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: cstr
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cstr
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: end
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: update_children
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: self
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: add_child
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: self
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: chk
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: cmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: n
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: update_children
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _get_closing_delim
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '/'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: ';'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ';'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '('
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ')'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '['
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ']'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '{'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '}'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _is_closing
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tok
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tok
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tok
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: ';'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '}'
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: ']'
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: ')'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _advance_check
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tok
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tok
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tok
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: eq
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: tok
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tok
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: tok
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: MAX_ERR_SHOW
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 15
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: errors_shown
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_print_err
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tok
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: msg
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: msg
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ":\n\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: " File: \0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: p
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: path
+ }
+ { NODE_TYPE: ID, DATA: to_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '/'
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: p
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: p
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\n At: \0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: print_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: tok
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\n\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: errors_shown
+ }
+ { NODE_TYPE: ID, DATA: MAX_ERR_SHOW
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\nToo many errors to print, other errors will be suppressed\n\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_block_pass
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: deep
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: ID, DATA: deep
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";/\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: deep
+ }
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: ID, DATA: deep
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "/;\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: deep
+ }
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: deep
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";;\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: deep
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: deep
+ }
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: ID, DATA: deep
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: ID, DATA: deep
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _op_prefix
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: l
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strlen
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_AUG
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "len\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "--\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "++\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: l
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '-'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '!'
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '~'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _op_postfix
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "`\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "++\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "--\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _op_bin
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "-\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _op_prefix
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _op_postfix
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _op_order
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: l
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strlen
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: l
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '`'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '.'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '~'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '*'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '/'
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '%'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 6
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '+'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '-'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 7
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '!'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '&'
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '|'
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '^'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 8
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '<'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '>'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 9
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '='
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 11
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: l
+ }
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "is\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: ch
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '+'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '-'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 3
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '<'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '>'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 4
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ch
+ }
+ { NODE_TYPE: LITERAL, DATA: '='
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 9
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 10
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '<'
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '>'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 9
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '='
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 11
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '!'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 8
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: l
+ }
+ { NODE_TYPE: LITERAL, DATA: 3
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "len\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 5
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: op
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '='
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 9
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 10
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "[FATAL] [CMPERR] _op_order: Augment not implemented in ordering \0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _print_num
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "'%s'\n\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 999
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _astv_pre_id
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_AUG
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _op_prefix
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Only certain augments (-, !, ~, --, ++, len) can be used as prefixes for bare values\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: pre
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: pre
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_PRE_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: pre
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _astv_cast
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "[\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cast
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cast
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_CAST
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: _ast_list_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: cast
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cast
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: pop
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: cast
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _astv_post_id
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _op_postfix
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: post
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: post
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_POST_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: post
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: ID, DATA: _ast_list_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "[\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: ID, DATA: _ast_list_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "{\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: ind
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: ind
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_POST_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _ast_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ind
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected value for index operation after '{'\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ind
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "}\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected '}' to show the end of an index operation after the value\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_value_bare
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: ID, DATA: _astv_pre_id
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "{\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: ID, DATA: _ast_list_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ")\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected closing ')' for singlet\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: ID, DATA: _astv_cast
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: val
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: val
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: val
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_LITRL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: val
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: val
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_LITERAL
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: val
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected compound, parenthetical, literal, or identifier for bare value\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: ID, DATA: _astv_post_id
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: EMPTY, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected method/member name after '.'\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: repl
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: dot
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: dot
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_BIN_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: dot
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: repl
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: val
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: val
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: ID, DATA: _astv_post_id
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: val
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: dot
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: val
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: pop
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: dot
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _assoc_right
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: order
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _op_order
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: order
+ }
+ { NODE_TYPE: LITERAL, DATA: 11
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _assoc
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: op
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: j
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _op_order
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: ID, DATA: _assoc_right
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: ID, DATA: j
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: ID, DATA: j
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_value
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: val
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: val
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_VALUE
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: val
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_value_bare
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: valid
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: run
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_SEP
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _is_closing
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: valid
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_AUG
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _op_bin
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: bin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: bin
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_BIN_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _op_order
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: gt
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_BIN_OP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: gt
+ }
+ { NODE_TYPE: ID, DATA: _assoc
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: gt
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_BIN_OP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: gt
+ }
+ { NODE_TYPE: ID, DATA: _assoc
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: gt
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: rhs
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: bin
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: rhs
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: pop
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: bin
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: bin
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "is\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: ID, DATA: _ast_value_bare
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: valid
+ }
+ { NODE_TYPE: ID, DATA: run
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: val
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: valid
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_keyword_expr
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "return\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "continue\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "break\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: ret
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: ret
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_FLOW_CONTROL
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _is_closing
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ret
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ret
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Unsupported keyword statement\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _type_helper_pre
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_AUG
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "~\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_PRE_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "{\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: arr
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: arr
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_PRE_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_LITRL
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: is_numeric
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: num
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: num
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_LITERAL
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: arr
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: num
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "}\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected closing '}' after integer in type declaration\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "}\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected integer or '}' to define either a fixed sized array or pointer to unknown sized array\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: arr
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _type_helper_func
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_list_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "[\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_list_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _type_helper_usertype
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: utp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utp
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: utp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_AUG
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected identifier in fully qualified type chain\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_list_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_type
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: typ
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: typ
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_TYPE
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _type_helper_pre
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: typ
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "void\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: ktp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: ktp
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: typ
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ktp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _type_helper_func
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: typ
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: typ
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _type_helper_usertype
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: typ
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYTP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: ktp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: ktp
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: typ
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ktp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected keytype or usertype when parsing type\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: typ
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "`\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: post
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: post
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_POST_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: typ
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: post
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: typ
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_list_value
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: list
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_VLIST
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _get_closing_delim
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ",\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected ',' to continue the value list or a closing delimiter\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: next
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: next
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _maybe_helper_decl
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: next
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: next
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: next
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ",\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _is_closing
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: next
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: id
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: id
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: id
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: next
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: tp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tp
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_TYPE
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: utmp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utmp
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tp
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: utmp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: next
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_AUG
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: next
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: next
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: utp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utp
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tp
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: utp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_AUG
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: next
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: next
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected identifier in fully qualified type chain\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_list_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: tp
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: tp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected identifier after user type in type list\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: id
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: id
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: id
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_list_decl
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: list
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_DLIST
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _get_closing_delim
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: seen
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: seen
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYTP
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "~\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "{\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: seen
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected type then identifier as first items in declaration list\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected identifier after type in params/struct def\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: seen
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: id
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: id
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: list
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: id
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _maybe_helper_decl
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected type or parameter name in declaration list\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ",\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _is_closing
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected ',' to continue the declaration list or a closing delimiter\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: next
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: next
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_list_enum
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: list
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ELIST
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _get_closing_delim
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: enum_id
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: enum_id
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "=\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: enum_id
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: list
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: enum_id
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected identifier in body of enum declaration\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ",\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ",\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _is_closing
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected ',' to continue the type list or a closing delimiter\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: next
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: next
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_list_type
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: list
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_TLIST
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _get_closing_delim
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYTP
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "~\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "{\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected type in type list\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ",\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _is_closing
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected ',' to continue the type list or a closing delimiter\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: next
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: next
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_list_stmt
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: list
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_SLIST
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _get_closing_delim
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "asm\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_asm
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYTP
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "{\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_decl
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "~\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _maybe_helper_fun
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_LITRL
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: _op_prefix
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_keyword_expr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: empty
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: empty
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_EMPTY
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: list
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: empty
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected definition, expression, or ';' in statement list\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: list
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected closing at end of statement list\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _block_helper_method
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: blf
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_function
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected function or operator overload in method block\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_block_pass
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";/\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: ';'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "/;\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected opening block in method block\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";;\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: blf
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Could not find closing ;/ for function in method block\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: blf
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_method
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: blf
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected identifier of struct after 'method'\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mth
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mth
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_METHOD
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "/;\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _block_helper_method
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: mth
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: ';'
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Method block being skipped. Parsing will resume after the end\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_block_pass
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";/\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: blf
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Could not find closing ;/ for method block\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: mth
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_flow
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: block_type
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_IF_BLOCK
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "else\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "if\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: block_type
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ELIF_BLOCK
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: block_type
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ELSE_BLOCK
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "loop\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: block_type
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_LOOP_BLOCK
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tok
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tok
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: block_type
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: block_type
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ELSE_BLOCK
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_list_stmt
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: block_type
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_LOOP_BLOCK
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "[\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_list_stmt
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: ';'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "asm\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_asm
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "/;\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_fun_block
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYTP
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "{\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_decl
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "~\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _maybe_helper_fun
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_LITRL
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: _op_prefix
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_keyword_expr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected definition, expression, or sub block in flow block\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_fun_block
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: blf
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "if\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "else\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "loop\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_flow
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected 'if', 'else', or 'loop' for function level block\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";;\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";/\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Block being skipped. Parsing will pick up after the end\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_block_pass
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";/\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: blf
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Could not find closing ;/ for top block\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: blf
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _mhf_post_list
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_TLIST
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: _typ
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: _typ
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_TYPE
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _type_helper_pre
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: _typ
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYTP
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _mhf_post
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: _typ
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: _typ
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ",\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: _typ
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ")\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: _typ
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: _typ
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: _typ
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: _typ
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: _typ
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _mhf_post
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYTP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: id
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: id
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: id
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: id
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "void\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _type_helper_func
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "`\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: post
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: post
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_POST_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: post
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: id
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: id
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: id
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: weird
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _mhf_post_list
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: weird
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ")\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: weird
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _mhf_transform
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ { NODE_TYPE: ID, DATA: at
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_VALUE
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: idx
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: idx
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: _type
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: _type
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: idx
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_PRE_OP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: new
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: new
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_PRE_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: new
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: idx
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: idx
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: _type
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: idx
+ }
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: _type
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: _type
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: idx
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: _type
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: idx
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: op
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_BIN_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: pop
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: _type
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: idx
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: idx
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: idx
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: _type
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: _type
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: idx
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: pt1
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: at
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: idx
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: _type
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_TLIST
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: lst
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: lst
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_VLIST
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: lsub
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: at
+ }
+ { NODE_TYPE: ID, DATA: _mhf_transform
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lsub
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: at
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: pt2
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lsub
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: at
+ }
+ { NODE_TYPE: ID, DATA: lsub
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: at
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: lst
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lsub
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: lst
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lsub
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: pop
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: pt2
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: pt1
+ }
+ { NODE_TYPE: ID, DATA: pt2
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: at
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: lst
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: lst
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: _type
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: _type
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: _type
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: update_children
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: at
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _mhf_escape
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: deep
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: p1
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: p2
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: p1
+ }
+ { NODE_TYPE: ID, DATA: p2
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ")\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: ID, DATA: deep
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: deep
+ }
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: ID, DATA: deep
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: p1
+ }
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: p1
+ }
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: deep
+ }
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: deep
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _mhf_up_to_value
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: p1
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: p1
+ }
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_VALUE
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: p1
+ }
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _mhf_lower
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _mhf_post_value
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: op
+ }
+ { NODE_TYPE: ID, DATA: id
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_BIN_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: id
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: id
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: pop
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected identifier after '.'\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _op_postfix
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_POST_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: op
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Unsure where we are at in the tree ('`'). [CMPERR]"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: op
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: ID, DATA: _ast_list_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: ID, DATA: _ast_list_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Unsure where we are at in the tree ('('). [CMPERR]"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "{\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: ind
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: ind
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_POST_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _ast_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ind
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected value for index operation after '{'\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ind
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ind
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Unsure where we are at in the tree ('{'). [CMPERR]"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: ind
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "}\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected '}' to show the end of an index operation after the value\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _mhf_inner_value
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: ID, DATA: _mhf_lower
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: ID, DATA: _mhf_post_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: ID, DATA: _mhf_up_to_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: did_binop
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ")\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ",\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Unexpected token within function call (1). Expected binary operator then value, ',', or ')'.\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_AUG
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _op_bin
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: did_binop
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: bin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: bin
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_BIN_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _op_order
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: gt
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_BIN_OP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: gt
+ }
+ { NODE_TYPE: ID, DATA: _assoc
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: gt
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_BIN_OP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: gt
+ }
+ { NODE_TYPE: ID, DATA: _assoc
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: gt
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: lhs
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: bin
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lhs
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: pop
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: bin
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: bin
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "is\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: ID, DATA: _ast_value_bare
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Unexpected token within function call (2). Expected binary operator then value, ',', or ')'.\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: did_binop
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ")\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: ID, DATA: _mhf_up_to_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ",\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected ')' or ',' to complete function call.\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _mhf_outer_list
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ")\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ",\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ")\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected ',' to continue the value list or a closing delimiter\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: next
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: next
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: ID, DATA: _mhf_up_to_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _mhf_finish_value
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: p1
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: p2
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: firstRun
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: p1
+ }
+ { NODE_TYPE: ID, DATA: p2
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_VALUE
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: _mhf_inner_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_VLIST
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: _mhf_outer_list
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_VALUE
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_VLIST
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "[CMPERR] Unsure where we are in the tree\n\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: print_ast
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _mhf_escape
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: p1
+ }
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: ID, DATA: _mhf_lower
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: ln
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _mhf_post_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Escaping\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _mhf_escape
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: ID, DATA: _mhf_up_to_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_SEP
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _is_closing
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ".\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_AUG
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _op_bin
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: bin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: bin
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_BIN_OP
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _op_order
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: gt
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_BIN_OP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: gt
+ }
+ { NODE_TYPE: ID, DATA: _assoc
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: gt
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_BIN_OP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: gt
+ }
+ { NODE_TYPE: ID, DATA: _assoc
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: gt
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: lhs
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: bin
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lhs
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: pop
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: bin
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: bin
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "is\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: ID, DATA: _ast_value_bare
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _mhf_finish_decl
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_DECL
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: var
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: var
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "=\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: var
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: line
+ }
+ }
+ { NODE_TYPE: ID, DATA: ln
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: var
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ",\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected variable name in declaration\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _maybe_helper_fun
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_TYPE
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _type_helper_pre
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _mhf_transform
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _mhf_finish_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYTP
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Unexpected token. Expected the completion of a declaration or value (identifier or '(')\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: cur
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _mhf_post
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _mhf_finish_decl
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: cur
+ }
+ { NODE_TYPE: ID, DATA: _mhf_transform
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _mhf_finish_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: cur
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: lnok
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_function
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "[FATAL] [CMPERR] Expected function name\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: fn
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fn
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_FUNCTION
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_list_decl
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: fn
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "[\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_list_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: fn
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "asm\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_asm
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: fn
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "/;\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_fun_block
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: fn
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYTP
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "{\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_decl
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: fn
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "~\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _maybe_helper_fun
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: fn
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_LITRL
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "(\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: ID, DATA: _op_prefix
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: fn
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_keyword_expr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: fn
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: ';'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected definition, expression, or sub block in function\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: fn
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_import
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_LITRL
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '"'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected string or import literal after 'import'\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: rel
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: unquote_str
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: imp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: relative
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: rel
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: rel
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: rel
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: imp
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: path
+ }
+ { NODE_TYPE: ID, DATA: to_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: '/'
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Importing \0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: rel
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\n\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: rel
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_file
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: imp
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: imp
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_asm
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_LITRL
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '"'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected string literal after 'ast'\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: an
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: an
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ASM
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: unquote_str
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: an
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_struct
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected new identifier for typedef after 'struct'\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: sct
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sct
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_STRUCT
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '{'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected new identifier for typedef after 'struct'\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: sct
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_list_decl
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: sct
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: sct
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_enum
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected new identifier for def after 'enum'\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: sct
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sct
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ENUM
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '['
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_list_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: sct
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: '{'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected '{' after enum definition\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: sct
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_list_enum
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: sct
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: sct
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_decl
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: decl
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: decl
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_DECL
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: decl
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: var
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: var
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "=\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_value
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: var
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: decl
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: var
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ",\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected variable name in declaration\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: decl
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_top_block
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: blf
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "module\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "export\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_module
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "method\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_method
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_function
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected module, method, or function for top level block\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";;\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";/\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";;\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Block being skipped. Parsing will pick up after the end\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_block_pass
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";/\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ";;\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: blf
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Could not find closing ;/ for top block\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: blf
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_module
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint16
+ }
+ }
+ { NODE_TYPE: ID, DATA: nt
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_MODULE
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "export\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "module\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected 'module' keyword after 'export'\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: nt
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_EXPORT
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "module\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "[FATAL] The following issue is with the compiler, not your program.\n\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "[FATAL] Please report the following issue to tnslc upstream.\n\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "[FATAL] [CMPERR] Should only call _ast_module when 'module' or 'export' are seen\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected module name (identifier) after 'module'\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: nmod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: nmod
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: nt
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: run
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "import\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_import
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: nmod
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "struct\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_struct
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: nmod
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "enum\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_enum
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: nmod
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "asm\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_asm
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: nmod
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "/;\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_top_block
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: nmod
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYTP
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "~\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "{\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_decl
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: nmod
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: &&
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_DELIM
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: ';'
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: run
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected 'import', 'struct', 'asm', block, or declaration in top level\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: mod
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_child
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: nmod
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _ast_file
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: open
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: first
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_first_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_ERR
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "import\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_import
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "struct\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_struct
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "enum\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_enum
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: _advance_check
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "asm\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_asm
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "/;\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_top_block
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_KEYTP
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: TTYPE_USRWD
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "~\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: ID, DATA: eq
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "{\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_decl
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: mod
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_print_err
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected 'import', 'struct', 'asm', block, or declaration in top level\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Token
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: produce_next_token
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: first
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: first
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: close
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: generate_ast
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: v
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: v
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NTYPE_MODULE
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: v
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _ast_file
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: print_node_type
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_MODULE
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "MODULE\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_EXPORT
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "EXPORT\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_STRUCT
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "STRUCT\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_TYPE
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "TYPE\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ID
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "ID\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_BIN_OP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "BIN_OP\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_PRE_OP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "PRE_OP\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_POST_OP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "POST_OP\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_FUNCTION
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "FUNCTION\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_METHOD
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "METHOD\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_TLIST
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "TLIST\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_DLIST
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "DLIST\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ELIST
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "ELIST\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_SLIST
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "SLIST\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_LITERAL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "LITERAL\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ENUM
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "ENUM\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_DECL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "DECL\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_VLIST
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "VLIST\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_VALUE
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "VALUE\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_CAST
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "CAST\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_FLOW_CONTROL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "FLOW_CONTROL\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_IF_BLOCK
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "IF_BLOCK\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ELIF_BLOCK
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "ELIF_BLOCK\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ELSE_BLOCK
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "ELSE_BLOCK\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_LOOP_BLOCK
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "LOOP_BLOCK\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_ASM
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "ASM\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_EMPTY
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "EMPTY\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: print_node_head
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "{ NODE_TYPE: \0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: print_node_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: ", DATA: \0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\n\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: print_ast_rec
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: depth
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: ID, DATA: depth
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: " \0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: print_node_head
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: s
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: print_ast_rec
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: s
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: depth
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: ID, DATA: depth
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: " \0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "}\n\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: print_ast
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: print_ast_rec
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: verify_ast_integrity
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Integrity test failed\n\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Integrity test passed\n\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: verify_ast_integrity
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: s
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: s
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Test failed at: \n\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: print_node_head
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: s
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "}\n\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Parent: \n\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: print_node_head
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "}\n\0"
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: p
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: ptr
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: p
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _print_num
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Expected: %p\n\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: p
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: s
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ { NODE_TYPE: ID, DATA: p
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _print_num
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Got: %p\n\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: verify_ast_integrity
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: s
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: MODULE, DATA: compile
+ { NODE_TYPE: STRUCT, DATA: Variable
+ { NODE_TYPE: DLIST, DATA: {
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Type
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ }
+ }
+ { NODE_TYPE: METHOD, DATA: Variable
+ { NODE_TYPE: FUNCTION, DATA: init
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 8
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: add_ptr
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: ptp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: ptp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: get_ptr
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: p
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: p
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: pop_ptr
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: p
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: p
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ }
+ { NODE_TYPE: ID, DATA: pop
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: end
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: ptr
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: STRUCT, DATA: Type
+ { NODE_TYPE: DLIST, DATA: {
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: vars
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: methods
+ }
+ }
+ }
+ { NODE_TYPE: METHOD, DATA: Type
+ { NODE_TYPE: FUNCTION, DATA: init
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Variable
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: vars
+ }
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: len
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: add_var
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Variable
+ }
+ }
+ { NODE_TYPE: ID, DATA: v
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: vars
+ }
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: v
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: end
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: vars
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Variable
+ }
+ }
+ { NODE_TYPE: ID, DATA: v
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: vars
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: v
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: vars
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: STRUCT, DATA: Function
+ { NODE_TYPE: DLIST, DATA: {
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: parse
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: body
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: inputs
+ }
+ { NODE_TYPE: ID, DATA: outputs
+ }
+ }
+ }
+ { NODE_TYPE: METHOD, DATA: Function
+ { NODE_TYPE: FUNCTION, DATA: init
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Variable
+ }
+ }
+ { NODE_TYPE: ID, DATA: vtmp
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: inputs
+ }
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: len
+ { NODE_TYPE: ID, DATA: vtmp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: outputs
+ }
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: len
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: add_input
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Variable
+ }
+ }
+ { NODE_TYPE: ID, DATA: v
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: inputs
+ }
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: v
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: add_output
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Type
+ }
+ }
+ { NODE_TYPE: ID, DATA: t
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: outputs
+ }
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: t
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: end
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: inputs
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Variable
+ }
+ }
+ { NODE_TYPE: ID, DATA: v
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: inputs
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: v
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: inputs
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: outputs
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: STRUCT, DATA: Enum
+ { NODE_TYPE: DLIST, DATA: {
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Type
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: vals
+ }
+ }
+ }
+ { NODE_TYPE: METHOD, DATA: Enum
+ { NODE_TYPE: FUNCTION, DATA: init
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Variable
+ }
+ }
+ { NODE_TYPE: ID, DATA: vtmp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: vals
+ }
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: len
+ { NODE_TYPE: ID, DATA: vtmp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: end
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: vals
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Variable
+ }
+ }
+ { NODE_TYPE: ID, DATA: v
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: vals
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: v
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: vals
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: STRUCT, DATA: Module
+ { NODE_TYPE: DLIST, DATA: {
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: bool
+ }
+ }
+ { NODE_TYPE: ID, DATA: exp
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: vars
+ }
+ { NODE_TYPE: ID, DATA: types
+ }
+ { NODE_TYPE: ID, DATA: funcs
+ }
+ { NODE_TYPE: ID, DATA: enums
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: MOD_FIND_SUB
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: MOD_FIND_VAR
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: MOD_FIND_TYP
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: MOD_FIND_FUN
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 3
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: MOD_FIND_ENM
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 4
+ }
+ }
+ }
+ }
+ { NODE_TYPE: METHOD, DATA: Module
+ { NODE_TYPE: FUNCTION, DATA: init
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: mtmp
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Variable
+ }
+ }
+ { NODE_TYPE: ID, DATA: vtmp
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Type
+ }
+ }
+ { NODE_TYPE: ID, DATA: ttmp
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Function
+ }
+ }
+ { NODE_TYPE: ID, DATA: ftmp
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Enum
+ }
+ }
+ { NODE_TYPE: ID, DATA: etmp
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: len
+ { NODE_TYPE: ID, DATA: mtmp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: vars
+ }
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: len
+ { NODE_TYPE: ID, DATA: vtmp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: types
+ }
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: len
+ { NODE_TYPE: ID, DATA: ttmp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: funcs
+ }
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: len
+ { NODE_TYPE: ID, DATA: ftmp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: enums
+ }
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: len
+ { NODE_TYPE: ID, DATA: etmp
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: update_children
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: s
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: s
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: self
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: add_sub
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: m
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: m
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: s
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: s
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: update_children
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: -
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: add_var
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Variable
+ }
+ }
+ { NODE_TYPE: ID, DATA: v
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: vars
+ }
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: v
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: add_type
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Type
+ }
+ }
+ { NODE_TYPE: ID, DATA: t
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: types
+ }
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: t
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: add_funcs
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Function
+ }
+ }
+ { NODE_TYPE: ID, DATA: f
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: funcs
+ }
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: f
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: add_enum
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Enum
+ }
+ }
+ { NODE_TYPE: ID, DATA: e
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: enums
+ }
+ }
+ { NODE_TYPE: ID, DATA: push
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: e
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _find_rec
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Artifact
+ }
+ }
+ { NODE_TYPE: ID, DATA: pth
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: typ
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: !<
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: pth
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: pth
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: m
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: pth
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: m
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _find_rec
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: pth
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: typ
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: +
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: typ
+ }
+ { NODE_TYPE: ID, DATA: MOD_FIND_SUB
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: m
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: pth
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: m
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: typ
+ }
+ { NODE_TYPE: ID, DATA: MOD_FIND_VAR
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: vars
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Variable
+ }
+ }
+ { NODE_TYPE: ID, DATA: v
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: vars
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: pth
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: v
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: vars
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: typ
+ }
+ { NODE_TYPE: ID, DATA: MOD_FIND_TYP
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: types
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Type
+ }
+ }
+ { NODE_TYPE: ID, DATA: t
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: types
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: pth
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: types
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: typ
+ }
+ { NODE_TYPE: ID, DATA: MOD_FIND_FUN
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: funcs
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Function
+ }
+ }
+ { NODE_TYPE: ID, DATA: f
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: funcs
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: pth
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: f
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: funcs
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: typ
+ }
+ { NODE_TYPE: ID, DATA: MOD_FIND_ENM
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: enums
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Enum
+ }
+ }
+ { NODE_TYPE: ID, DATA: e
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: enums
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: pth
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: e
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: enums
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: !==
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: parent
+ }
+ { NODE_TYPE: ID, DATA: _find_rec
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: pth
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: typ
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: find
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Artifact
+ }
+ }
+ { NODE_TYPE: ID, DATA: pth
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: typ
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: void
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _find_rec
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: pth
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: typ
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: end
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _delete
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: m
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: m
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: sub
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: vars
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Variable
+ }
+ }
+ { NODE_TYPE: ID, DATA: v
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: vars
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: v
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: vars
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: types
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Type
+ }
+ }
+ { NODE_TYPE: ID, DATA: t
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: types
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: types
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: funcs
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Function
+ }
+ }
+ { NODE_TYPE: ID, DATA: f
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: funcs
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: f
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: funcs
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: enums
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Enum
+ }
+ }
+ { NODE_TYPE: ID, DATA: e
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: enums
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: e
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: enums
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: {
+ }
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: GEN_VAR_NAMES
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: VLIST, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "int\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "int8\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "int16\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "int32\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "int64\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "uint\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "uint8\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "uint16\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "uint32\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "uint64\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "float\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "float32\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "float64\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "vect\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "bool\0"
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "void\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: {
+ }
+ { NODE_TYPE: ID, DATA: uint
+ }
+ }
+ { NODE_TYPE: ID, DATA: GEN_VAR_SIZES
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: VLIST, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 8
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 4
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 8
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 8
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 4
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 8
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 8
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 4
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 8
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 8
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: find_type
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Artifact
+ }
+ }
+ { NODE_TYPE: ID, DATA: a
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: parse
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: parse
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: transform_struct
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: parse
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _tfn_mod_loop
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: parse
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: m
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: parse
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: s
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ||
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: s
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: parse
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_MODULE
+ }
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: s
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: parse
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_EXPORT
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: transform_module
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: s
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: m
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELIF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: s
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: parse
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_STRUCT
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: transform_struct
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: s
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: m
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: transform_module
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: parse
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: parent
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: s
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: parent
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: count
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: parent
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: sub
+ }
+ { NODE_TYPE: ID, DATA: get
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcmp
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: tmp
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: name
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: s
+ }
+ { NODE_TYPE: ID, DATA: tmp
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: cmp
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: s
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: ID, DATA: cmp
+ }
+ { NODE_TYPE: ID, DATA: NULL
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: ==
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: _type
+ }
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: parse
+ }
+ { NODE_TYPE: ID, DATA: NTYPE_EXPORT
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: exp
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: exp
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: false
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: ID, DATA: s
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: parent
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_sub
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _tfn_mod_loop
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: s
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: _tfn_gen_default_types
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: m
+ }
+ }
+ { NODE_TYPE: LOOP_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: i
+ }
+ { NODE_TYPE: PRE_OP, DATA: len
+ { NODE_TYPE: ID, DATA: GEN_VAR_NAMES
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: SLIST, DATA: [
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ { NODE_TYPE: POST_OP, DATA: ++
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Type
+ }
+ }
+ { NODE_TYPE: ID, DATA: t
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: GEN_VAR_NAMES
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: t
+ }
+ { NODE_TYPE: ID, DATA: size
+ }
+ }
+ { NODE_TYPE: ID, DATA: GEN_VAR_SIZES
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: i
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: m
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: add_type
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: t
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: transform_tree
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: parse
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: Module
+ }
+ }
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: strcpy
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: data
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: =
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: out
+ }
+ { NODE_TYPE: ID, DATA: exp
+ }
+ }
+ { NODE_TYPE: LITERAL, DATA: true
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _tfn_gen_default_types
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _tfn_mod_loop
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: out
+ }
+ }
+ }
+ }
+ { NODE_TYPE: STRUCT, DATA: OutBuf
+ { NODE_TYPE: DLIST, DATA: {
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: Vector
+ }
+ }
+ { NODE_TYPE: ID, DATA: hsec
+ }
+ { NODE_TYPE: ID, DATA: dsec
+ }
+ { NODE_TYPE: ID, DATA: csec
+ }
+ }
+ }
+ { NODE_TYPE: METHOD, DATA: OutBuf
+ { NODE_TYPE: FUNCTION, DATA: init
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: hsec
+ }
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: dsec
+ }
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: csec
+ }
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: write_to_file
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fout
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fout
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: write_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "bits 64\n\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fout
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: write_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: hsec
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fout
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: write_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\nsection .data\n\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fout
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: write_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: dsec
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fout
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: write_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\nsection .text\n\0"
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fout
+ { NODE_TYPE: POST_OP, DATA: `
+ }
+ }
+ { NODE_TYPE: ID, DATA: write_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: csec
+ }
+ { NODE_TYPE: ID, DATA: as_cstr
+ { NODE_TYPE: VLIST, DATA: (
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: end
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: hsec
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: dsec
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: self
+ }
+ { NODE_TYPE: ID, DATA: csec
+ }
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: generate
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: ID, DATA: fout
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: parse
+ }
+ { NODE_TYPE: ID, DATA: Node
+ }
+ }
+ { NODE_TYPE: ID, DATA: n
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: parse
+ }
+ { NODE_TYPE: ID, DATA: generate_ast
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ }
+ { NODE_TYPE: ID, DATA: update_children
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: parse
+ }
+ { NODE_TYPE: ID, DATA: print_ast
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: n
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: n
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: DEFAULT_FOUT
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "out.asm\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: USAGE
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "
+TNSLC v0.6.0 (C) 2024 CircleShift (MPL 2.0)
+
+usage:
+ tnslc (file in) [file out]
+
+\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: FOPEN_ERR
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "Error opening file\n\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: char_str
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "%c\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: newline
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: "\n\0"
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FUNCTION, DATA: main
+ { NODE_TYPE: DLIST, DATA: (
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ { NODE_TYPE: ID, DATA: argc
+ }
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: PRE_OP, DATA: ~
+ }
+ { NODE_TYPE: ID, DATA: uint8
+ }
+ }
+ { NODE_TYPE: ID, DATA: argv
+ }
+ }
+ { NODE_TYPE: TLIST, DATA: [
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: int
+ }
+ }
+ }
+ { NODE_TYPE: ASM, DATA: mov r10, rdi
+ }
+ { NODE_TYPE: ASM, DATA: mov r11, rsi
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: <
+ { NODE_TYPE: ID, DATA: argc
+ }
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: _printf
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: USAGE
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ { NODE_TYPE: DECL, DATA:
+ { NODE_TYPE: TYPE, DATA:
+ { NODE_TYPE: ID, DATA: utils
+ }
+ { NODE_TYPE: ID, DATA: File
+ }
+ }
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: ID, DATA: fout
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: argv
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: IF_BLOCK, DATA:
+ { NODE_TYPE: SLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: >
+ { NODE_TYPE: ID, DATA: argc
+ }
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fout
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: argv
+ { NODE_TYPE: POST_OP, DATA: {
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 2
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: ELSE_BLOCK, DATA:
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fout
+ }
+ { NODE_TYPE: ID, DATA: init
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: ID, DATA: DEFAULT_FOUT
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: compile
+ }
+ { NODE_TYPE: ID, DATA: generate
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: fin
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: PRE_OP, DATA: ~
+ { NODE_TYPE: ID, DATA: fout
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fin
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: BIN_OP, DATA: .
+ { NODE_TYPE: ID, DATA: fout
+ }
+ { NODE_TYPE: ID, DATA: end
+ { NODE_TYPE: VLIST, DATA: (
+ { NODE_TYPE: VALUE, DATA:
+ }
+ }
+ }
+ }
+ }
+ { NODE_TYPE: FLOW_CONTROL, DATA: return
+ { NODE_TYPE: VALUE, DATA:
+ { NODE_TYPE: LITERAL, DATA: 0
+ }
+ }
+ }
+ }
+}
+Integrity test passed
diff --git a/tnslc/vec_test.tnsl b/tnslc/vec_test.tnsl
new file mode 100644
index 0000000..95544e3
--- /dev/null
+++ b/tnslc/vec_test.tnsl
@@ -0,0 +1,47 @@
+:import "utils/utils.tnsl"
+
+/; print_vec(~utils.Vector v)
+ _printf("vec: [ \0")
+ /; if (v`.count > 0)
+ ~int n = v`.get(0)
+ _print_num("%d\0", n`)
+ /; loop (int i = 1; i < v`.count) [i++]
+ ~int n = v`.get(i)
+ _print_num(", %d\0", n`)
+ ;/
+ ;/
+ _printf(" ]\n\0")
+;/
+
+/; main [int]
+ utils.Vector vec
+ vec.init(8)
+ int a = 1295
+ vec.push(~a)
+ a = 1984
+ vec.push(~a)
+ a = 3498
+ vec.push(~a)
+ a = 8972
+ vec.push(~a)
+
+ print_vec(~vec)
+ _printf("pop_front\n\0")
+ vec.remove(0)
+ print_vec(~vec)
+ _printf("pop_mid\n\0")
+ vec.remove(1)
+ print_vec(~vec)
+ _printf("pop_end\n\0")
+ vec.pop()
+ print_vec(~vec)
+ _printf("pop_final\n\0")
+ vec.pop()
+ print_vec(~vec)
+
+ vec.end()
+
+ return 0
+;/
+
+