summaryrefslogtreecommitdiff
path: root/tests/lexers/moon
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lexers/moon')
-rw-r--r--tests/lexers/moon/example.txt6876
1 files changed, 6876 insertions, 0 deletions
diff --git a/tests/lexers/moon/example.txt b/tests/lexers/moon/example.txt
new file mode 100644
index 00000000..7eea6929
--- /dev/null
+++ b/tests/lexers/moon/example.txt
@@ -0,0 +1,6876 @@
+---input---
+-- transform.moon
+-- Leaf Corcoran (leafot@gmail.com) 2011
+--
+-- This is part of the MoonScript compiler. See <http://moonscript.org>
+-- MoonScript is licensed under the MIT License
+--
+
+module "moonscript.transform", package.seeall
+
+types = require "moonscript.types"
+util = require "moonscript.util"
+data = require "moonscript.data"
+
+import reversed from util
+import ntype, build, smart_node, is_slice from types
+import insert from table
+
+export Statement, Value, NameProxy, LocalName, Run
+
+-- always declares as local
+class LocalName
+ new: (@name) => self[1] = "temp_name"
+ get_name: => @name
+
+class NameProxy
+ new: (@prefix) =>
+ self[1] = "temp_name"
+
+ get_name: (scope) =>
+ if not @name
+ @name = scope\free_name @prefix, true
+ @name
+
+ chain: (...) =>
+ items = {...} -- todo: fix ... propagation
+ items = for i in *items
+ if type(i) == "string"
+ {"dot", i}
+ else
+ i
+
+ build.chain {
+ base: self
+ unpack items
+ }
+
+ index: (key) =>
+ build.chain {
+ base: self, {"index", key}
+ }
+
+ __tostring: =>
+ if @name
+ ("name<%s>")\format @name
+ else
+ ("name<prefix(%s)>")\format @prefix
+
+class Run
+ new: (@fn) =>
+ self[1] = "run"
+
+ call: (state) =>
+ self.fn state
+
+-- transform the last stm is a list of stms
+-- will puke on group
+apply_to_last = (stms, fn) ->
+ -- find last (real) exp
+ last_exp_id = 0
+ for i = #stms, 1, -1
+ stm = stms[i]
+ if stm and util.moon.type(stm) != Run
+ last_exp_id = i
+ break
+
+ return for i, stm in ipairs stms
+ if i == last_exp_id
+ fn stm
+ else
+ stm
+
+-- is a body a sindle expression/statement
+is_singular = (body) ->
+ return false if #body != 1
+ if "group" == ntype body
+ is_singular body[2]
+ else
+ true
+
+constructor_name = "new"
+
+class Transformer
+ new: (@transformers, @scope) =>
+ @seen_nodes = {}
+
+ transform: (scope, node, ...) =>
+ -- print scope, node, ...
+ return node if @seen_nodes[node]
+ @seen_nodes[node] = true
+ while true
+ transformer = @transformers[ntype node]
+ res = if transformer
+ transformer(scope, node, ...) or node
+ else
+ node
+ return node if res == node
+ node = res
+
+ __call: (node, ...) =>
+ @transform @scope, node, ...
+
+ instance: (scope) =>
+ Transformer @transformers, scope
+
+ can_transform: (node) =>
+ @transformers[ntype node] != nil
+
+construct_comprehension = (inner, clauses) ->
+ current_stms = inner
+ for _, clause in reversed clauses
+ t = clause[1]
+ current_stms = if t == "for"
+ _, names, iter = unpack clause
+ {"foreach", names, iter, current_stms}
+ elseif t == "when"
+ _, cond = unpack clause
+ {"if", cond, current_stms}
+ else
+ error "Unknown comprehension clause: "..t
+ current_stms = {current_stms}
+
+ current_stms[1]
+
+Statement = Transformer {
+ assign: (node) =>
+ _, names, values = unpack node
+ -- bubble cascading assigns
+ if #values == 1 and types.cascading[ntype values[1]]
+ values[1] = @transform.statement values[1], (stm) ->
+ t = ntype stm
+ if types.is_value stm
+ {"assign", names, {stm}}
+ else
+ stm
+
+ build.group {
+ {"declare", names}
+ values[1]
+ }
+ else
+ node
+
+ export: (node) =>
+ -- assign values if they are included
+ if #node > 2
+ if node[2] == "class"
+ cls = smart_node node[3]
+ build.group {
+ {"export", {cls.name}}
+ cls
+ }
+ else
+ build.group {
+ node
+ build.assign {
+ names: node[2]
+ values: node[3]
+ }
+ }
+ else
+ nil
+
+ update: (node) =>
+ _, name, op, exp = unpack node
+ op_final = op\match "^(.+)=$"
+ error "Unknown op: "..op if not op_final
+ build.assign_one name, {"exp", name, op_final, exp}
+
+ import: (node) =>
+ _, names, source = unpack node
+
+ stubs = for name in *names
+ if type(name) == "table"
+ name
+ else
+ {"dot", name}
+
+ real_names = for name in *names
+ type(name) == "table" and name[2] or name
+
+ if type(source) == "string"
+ build.assign {
+ names: real_names
+ values: [build.chain { base: source, stub} for stub in *stubs]
+ }
+ else
+ source_name = NameProxy "table"
+ build.group {
+ {"declare", real_names}
+ build["do"] {
+ build.assign_one source_name, source
+ build.assign {
+ names: real_names
+ values: [build.chain { base: source_name, stub} for stub in *stubs]
+ }
+ }
+ }
+
+ comprehension: (node, action) =>
+ _, exp, clauses = unpack node
+
+ action = action or (exp) -> {exp}
+ construct_comprehension action(exp), clauses
+
+ -- handle cascading return decorator
+ if: (node, ret) =>
+ if ret
+ smart_node node
+ -- mutate all the bodies
+ node['then'] = apply_to_last node['then'], ret
+ for i = 4, #node
+ case = node[i]
+ body_idx = #node[i]
+ case[body_idx] = apply_to_last case[body_idx], ret
+ node
+
+ with: (node, ret) =>
+ _, exp, block = unpack node
+ scope_name = NameProxy "with"
+ build["do"] {
+ build.assign_one scope_name, exp
+ Run => @set "scope_var", scope_name
+ build.group block
+ if ret
+ ret scope_name
+ }
+
+ foreach: (node) =>
+ smart_node node
+ if ntype(node.iter) == "unpack"
+ list = node.iter[2]
+
+ index_name = NameProxy "index"
+ list_name = NameProxy "list"
+
+ slice_var = nil
+ bounds = if is_slice list
+ slice = list[#list]
+ table.remove list
+ table.remove slice, 1
+
+ slice[2] = if slice[2] and slice[2] != ""
+ max_tmp_name = NameProxy "max"
+ slice_var = build.assign_one max_tmp_name, slice[2]
+ {"exp", max_tmp_name, "<", 0
+ "and", {"length", list_name}, "+", max_tmp_name
+ "or", max_tmp_name }
+ else
+ {"length", list_name}
+
+ slice
+ else
+ {1, {"length", list_name}}
+
+ build.group {
+ build.assign_one list_name, list
+ slice_var
+ build["for"] {
+ name: index_name
+ bounds: bounds
+ body: {
+ {"assign", node.names, {list_name\index index_name}}
+ build.group node.body
+ }
+ }
+ }
+
+ switch: (node, ret) =>
+ _, exp, conds = unpack node
+ exp_name = NameProxy "exp"
+
+ -- convert switch conds into if statment conds
+ convert_cond = (cond) ->
+ t, case_exp, body = unpack cond
+ out = {}
+ insert out, t == "case" and "elseif" or "else"
+ if t != "else"
+ insert out, {"exp", case_exp, "==", exp_name} if t != "else"
+ else
+ body = case_exp
+
+ if ret
+ body = apply_to_last body, ret
+
+ insert out, body
+
+ out
+
+ first = true
+ if_stm = {"if"}
+ for cond in *conds
+ if_cond = convert_cond cond
+ if first
+ first = false
+ insert if_stm, if_cond[2]
+ insert if_stm, if_cond[3]
+ else
+ insert if_stm, if_cond
+
+ build.group {
+ build.assign_one exp_name, exp
+ if_stm
+ }
+
+ class: (node) =>
+ _, name, parent_val, body = unpack node
+
+ -- split apart properties and statements
+ statements = {}
+ properties = {}
+ for item in *body
+ switch item[1]
+ when "stm"
+ insert statements, item[2]
+ when "props"
+ for tuple in *item[2,]
+ insert properties, tuple
+
+ -- find constructor
+ constructor = nil
+ properties = for tuple in *properties
+ if tuple[1] == constructor_name
+ constructor = tuple[2]
+ nil
+ else
+ tuple
+
+ parent_cls_name = NameProxy "parent"
+ base_name = NameProxy "base"
+ self_name = NameProxy "self"
+ cls_name = NameProxy "class"
+
+ if not constructor
+ constructor = build.fndef {
+ args: {{"..."}}
+ arrow: "fat"
+ body: {
+ build["if"] {
+ cond: parent_cls_name
+ then: {
+ build.chain { base: "super", {"call", {"..."}} }
+ }
+ }
+ }
+ }
+ else
+ smart_node constructor
+ constructor.arrow = "fat"
+
+ cls = build.table {
+ {"__init", constructor}
+ {"__base", base_name}
+ {"__name", {"string", '"', name}} -- "quote the string"
+ {"__parent", parent_cls_name}
+ }
+
+ -- look up a name in the class object
+ class_lookup = build["if"] {
+ cond: {"exp", "val", "==", "nil", "and", parent_cls_name}
+ then: {
+ parent_cls_name\index"name"
+ }
+ }
+ insert class_lookup, {"else", {"val"}}
+
+ cls_mt = build.table {
+ {"__index", build.fndef {
+ args: {{"cls"}, {"name"}}
+ body: {
+ build.assign_one LocalName"val", build.chain {
+ base: "rawget", {"call", {base_name, "name"}}
+ }
+ class_lookup
+ }
+ }}
+ {"__call", build.fndef {
+ args: {{"cls"}, {"..."}}
+ body: {
+ build.assign_one self_name, build.chain {
+ base: "setmetatable"
+ {"call", {"{}", base_name}}
+ }
+ build.chain {
+ base: "cls.__init"
+ {"call", {self_name, "..."}}
+ }
+ self_name
+ }
+ }}
+ }
+
+ cls = build.chain {
+ base: "setmetatable"
+ {"call", {cls, cls_mt}}
+ }
+
+ value = nil
+ with build
+ value = .block_exp {
+ Run =>
+ @set "super", (block, chain) ->
+ if chain
+ slice = [item for item in *chain[3,]]
+ new_chain = {"chain", parent_cls_name}
+
+ head = slice[1]
+
+ if head == nil
+ return parent_cls_name
+
+ switch head[1]
+ -- calling super, inject calling name and self into chain
+ when "call"
+ calling_name = block\get"current_block"
+ slice[1] = {"call", {"self", unpack head[2]}}
+ act = if ntype(calling_name) != "value" then "index" else "dot"
+ insert new_chain, {act, calling_name}
+
+ -- colon call on super, replace class with self as first arg
+ when "colon"
+ call = head[3]
+ insert new_chain, {"dot", head[2]}
+ slice[1] = { "call", { "self", unpack call[2] } }
+
+ insert new_chain, item for item in *slice
+
+ new_chain
+ else
+ parent_cls_name
+
+ .assign_one parent_cls_name, parent_val == "" and "nil" or parent_val
+ .assign_one base_name, {"table", properties}
+ .assign_one base_name\chain"__index", base_name
+
+ build["if"] {
+ cond: parent_cls_name
+ then: {
+ .chain {
+ base: "setmetatable"
+ {"call", {
+ base_name,
+ .chain { base: parent_cls_name, {"dot", "__base"}}
+ }}
+ }
+ }
+ }
+
+ .assign_one cls_name, cls
+ .assign_one base_name\chain"__class", cls_name
+
+ .group if #statements > 0 {
+ .assign_one LocalName"self", cls_name
+ .group statements
+ } else {}
+
+ cls_name
+ }
+
+ value = .group {
+ .declare names: {name}
+ .assign {
+ names: {name}
+ values: {value}
+ }
+ }
+
+ value
+}
+
+class Accumulator
+ body_idx: { for: 4, while: 3, foreach: 4 }
+
+ new: =>
+ @accum_name = NameProxy "accum"
+ @value_name = NameProxy "value"
+ @len_name = NameProxy "len"
+
+ -- wraps node and mutates body
+ convert: (node) =>
+ index = @body_idx[ntype node]
+ node[index] = @mutate_body node[index]
+ @wrap node
+
+ -- wrap the node into a block_exp
+ wrap: (node) =>
+ build.block_exp {
+ build.assign_one @accum_name, build.table!
+ build.assign_one @len_name, 0
+ node
+ @accum_name
+ }
+
+ -- mutates the body of a loop construct to save last value into accumulator
+ -- can optionally skip nil results
+ mutate_body: (body, skip_nil=true) =>
+ val = if not skip_nil and is_singular body
+ with body[1]
+ body = {}
+ else
+ body = apply_to_last body, (n) ->
+ build.assign_one @value_name, n
+ @value_name
+
+ update = {
+ {"update", @len_name, "+=", 1}
+ build.assign_one @accum_name\index(@len_name), val
+ }
+
+ if skip_nil
+ table.insert body, build["if"] {
+ cond: {"exp", @value_name, "!=", "nil"}
+ then: update
+ }
+ else
+ table.insert body, build.group update
+
+ body
+
+default_accumulator = (node) =>
+ Accumulator!\convert node
+
+
+implicitly_return = (scope) ->
+ fn = (stm) ->
+ t = ntype stm
+ if types.manual_return[t] or not types.is_value stm
+ stm
+ elseif types.cascading[t]
+ scope.transform.statement stm, fn
+ else
+ if t == "comprehension" and not types.comprehension_has_value stm
+ stm
+ else
+ {"return", stm}
+
+ fn
+
+Value = Transformer {
+ for: default_accumulator
+ while: default_accumulator
+ foreach: default_accumulator
+
+ comprehension: (node) =>
+ a = Accumulator!
+ node = @transform.statement node, (exp) ->
+ a\mutate_body {exp}, false
+ a\wrap node
+
+ tblcomprehension: (node) =>
+ _, key_exp, value_exp, clauses = unpack node
+
+ accum = NameProxy "tbl"
+ dest = build.chain { base: accum, {"index", key_exp} }
+ inner = build.assign_one dest, value_exp
+
+ build.block_exp {
+ build.assign_one accum, build.table!
+ construct_comprehension {inner}, clauses
+ accum
+ }
+
+ fndef: (node) =>
+ smart_node node
+ node.body = apply_to_last node.body, implicitly_return self
+ node
+
+ if: (node) => build.block_exp { node }
+ with: (node) => build.block_exp { node }
+ switch: (node) =>
+ build.block_exp { node }
+
+ -- pull out colon chain
+ chain: (node) =>
+ stub = node[#node]
+ if type(stub) == "table" and stub[1] == "colon_stub"
+ table.remove node, #node
+
+ base_name = NameProxy "base"
+ fn_name = NameProxy "fn"
+
+ is_super = node[2] == "super"
+ @transform.value build.block_exp {
+ build.assign {
+ names: {base_name}
+ values: {node}
+ }
+
+ build.assign {
+ names: {fn_name}
+ values: {
+ build.chain { base: base_name, {"dot", stub[2]} }
+ }
+ }
+
+ build.fndef {
+ args: {{"..."}}
+ body: {
+ build.chain {
+ base: fn_name, {"call", {is_super and "self" or base_name, "..."}}
+ }
+ }
+ }
+ }
+
+ block_exp: (node) =>
+ _, body = unpack node
+
+ fn = nil
+ arg_list = {}
+
+ insert body, Run =>
+ if @has_varargs
+ insert arg_list, "..."
+ insert fn.args, {"..."}
+
+ fn = smart_node build.fndef body: body
+ build.chain { base: {"parens", fn}, {"call", arg_list} }
+}
+
+
+---tokens---
+'-- transform.moon' Comment.Single
+'\n' Text
+
+'-- Leaf Corcoran (leafot@gmail.com) 2011' Comment.Single
+'\n' Text
+
+'--' Comment.Single
+'\n' Text
+
+'-- This is part of the MoonScript compiler. See <http://moonscript.org>' Comment.Single
+'\n' Text
+
+'-- MoonScript is licensed under the MIT License' Comment.Single
+'\n' Text
+
+'--' Comment.Single
+'\n' Text
+
+'\n' Text
+
+'module' Name
+' ' Text
+'"' Literal.String.Double
+'m' Literal.String
+'o' Literal.String
+'o' Literal.String
+'n' Literal.String
+'s' Literal.String
+'c' Literal.String
+'r' Literal.String
+'i' Literal.String
+'p' Literal.String
+'t' Literal.String
+'.' Literal.String
+'t' Literal.String
+'r' Literal.String
+'a' Literal.String
+'n' Literal.String
+'s' Literal.String
+'f' Literal.String
+'o' Literal.String
+'r' Literal.String
+'m' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'package' Name
+'.' Operator
+'seeall' Name
+'\n' Text
+
+'\n' Text
+
+'types' Name
+' ' Text
+'=' Operator
+' ' Text
+'require' Name.Builtin
+' ' Text
+'"' Literal.String.Double
+'m' Literal.String
+'o' Literal.String
+'o' Literal.String
+'n' Literal.String
+'s' Literal.String
+'c' Literal.String
+'r' Literal.String
+'i' Literal.String
+'p' Literal.String
+'t' Literal.String
+'.' Literal.String
+'t' Literal.String
+'y' Literal.String
+'p' Literal.String
+'e' Literal.String
+'s' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+'util' Name
+' ' Text
+'=' Operator
+' ' Text
+'require' Name.Builtin
+' ' Text
+'"' Literal.String.Double
+'m' Literal.String
+'o' Literal.String
+'o' Literal.String
+'n' Literal.String
+'s' Literal.String
+'c' Literal.String
+'r' Literal.String
+'i' Literal.String
+'p' Literal.String
+'t' Literal.String
+'.' Literal.String
+'u' Literal.String
+'t' Literal.String
+'i' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+'data' Name
+' ' Text
+'=' Operator
+' ' Text
+'require' Name.Builtin
+' ' Text
+'"' Literal.String.Double
+'m' Literal.String
+'o' Literal.String
+'o' Literal.String
+'n' Literal.String
+'s' Literal.String
+'c' Literal.String
+'r' Literal.String
+'i' Literal.String
+'p' Literal.String
+'t' Literal.String
+'.' Literal.String
+'d' Literal.String
+'a' Literal.String
+'t' Literal.String
+'a' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+'\n' Text
+
+'import' Keyword
+' ' Text
+'reversed' Name
+' ' Text
+'from' Keyword
+' ' Text
+'util' Name
+'\n' Text
+
+'import' Keyword
+' ' Text
+'ntype' Name
+',' Punctuation
+' ' Text
+'build' Name
+',' Punctuation
+' ' Text
+'smart_node' Name
+',' Punctuation
+' ' Text
+'is_slice' Name
+' ' Text
+'from' Keyword
+' ' Text
+'types' Name
+'\n' Text
+
+'import' Keyword
+' ' Text
+'insert' Name
+' ' Text
+'from' Keyword
+' ' Text
+'table' Name
+'\n' Text
+
+'\n' Text
+
+'export' Keyword
+' ' Text
+'Statement' Name.Class
+',' Punctuation
+' ' Text
+'Value' Name.Class
+',' Punctuation
+' ' Text
+'NameProxy' Name.Class
+',' Punctuation
+' ' Text
+'LocalName' Name.Class
+',' Punctuation
+' ' Text
+'Run' Name.Class
+'\n' Text
+
+'\n' Text
+
+'-- always declares as local' Comment.Single
+'\n' Text
+
+'class' Keyword
+' ' Text
+'LocalName' Name.Class
+'\n' Text
+
+' ' Text
+'new:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'@name' Name.Variable.Class
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+' ' Text
+'self' Name.Builtin.Pseudo
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+' ' Text
+'=' Operator
+' ' Text
+'"' Literal.String.Double
+'t' Literal.String
+'e' Literal.String
+'m' Literal.String
+'p' Literal.String
+'_' Literal.String
+'n' Literal.String
+'a' Literal.String
+'m' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'get_name:' Name.Variable
+' ' Text
+'=>' Name.Function
+' ' Text
+'@name' Name.Variable.Class
+'\n' Text
+
+'\n' Text
+
+'class' Keyword
+' ' Text
+'NameProxy' Name.Class
+'\n' Text
+
+' ' Text
+'new:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'@prefix' Name.Variable.Class
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'self' Name.Builtin.Pseudo
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+' ' Text
+'=' Operator
+' ' Text
+'"' Literal.String.Double
+'t' Literal.String
+'e' Literal.String
+'m' Literal.String
+'p' Literal.String
+'_' Literal.String
+'n' Literal.String
+'a' Literal.String
+'m' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'get_name:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'scope' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'not' Keyword
+' ' Text
+'@name' Name.Variable.Class
+'\n' Text
+
+' ' Text
+'@name' Name.Variable.Class
+' ' Text
+'=' Operator
+' ' Text
+'scope' Name
+'\\' Operator
+'free_name' Name
+' ' Text
+'@prefix' Name.Variable.Class
+',' Punctuation
+' ' Text
+'true' Keyword.Constant
+'\n' Text
+
+' ' Text
+'@name' Name.Variable.Class
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'chain:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'...' Operator
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'items' Name
+' ' Text
+'=' Operator
+' ' Text
+'{' Keyword.Type
+'...' Operator
+'}' Keyword.Type
+' ' Text
+'-- todo: fix ... propagation' Comment.Single
+'\n' Text
+
+' ' Text
+'items' Name
+' ' Text
+'=' Operator
+' ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'in' Keyword
+' ' Text
+'*' Operator
+'items' Name
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'type' Name.Builtin
+'(' Keyword.Type
+'i' Name
+')' Keyword.Type
+' ' Text
+'==' Operator
+' ' Text
+'"' Literal.String.Double
+'s' Literal.String
+'t' Literal.String
+'r' Literal.String
+'i' Literal.String
+'n' Literal.String
+'g' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'d' Literal.String
+'o' Literal.String
+'t' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'i' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'i' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'chain' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'base:' Name.Variable
+' ' Text
+'self' Name.Builtin.Pseudo
+'\n' Text
+
+' ' Text
+'unpack' Name
+' ' Text
+'items' Name
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'index:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'key' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'chain' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'base:' Name.Variable
+' ' Text
+'self' Name.Builtin.Pseudo
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'i' Literal.String
+'n' Literal.String
+'d' Literal.String
+'e' Literal.String
+'x' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'key' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'__tostring:' Name.Variable
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'@name' Name.Variable.Class
+'\n' Text
+
+' ' Text
+'(' Keyword.Type
+'"' Literal.String.Double
+'n' Literal.String
+'a' Literal.String
+'m' Literal.String
+'e' Literal.String
+'<' Literal.String
+'%' Literal.String
+'s' Literal.String
+'>' Literal.String
+'"' Literal.String.Double
+')' Keyword.Type
+'\\' Operator
+'format' Name
+' ' Text
+'@name' Name.Variable.Class
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'(' Keyword.Type
+'"' Literal.String.Double
+'n' Literal.String
+'a' Literal.String
+'m' Literal.String
+'e' Literal.String
+'<' Literal.String
+'p' Literal.String
+'r' Literal.String
+'e' Literal.String
+'f' Literal.String
+'i' Literal.String
+'x' Literal.String
+'(' Literal.String
+'%' Literal.String
+'s' Literal.String
+')' Literal.String
+'>' Literal.String
+'"' Literal.String.Double
+')' Keyword.Type
+'\\' Operator
+'format' Name
+' ' Text
+'@prefix' Name.Variable.Class
+'\n' Text
+
+'\n' Text
+
+'class' Keyword
+' ' Text
+'Run' Name.Class
+'\n' Text
+
+' ' Text
+'new:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'@fn' Name.Variable.Class
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'self' Name.Builtin.Pseudo
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+' ' Text
+'=' Operator
+' ' Text
+'"' Literal.String.Double
+'r' Literal.String
+'u' Literal.String
+'n' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'call:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'state' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'self' Name.Builtin.Pseudo
+'.' Operator
+'fn' Name
+' ' Text
+'state' Name
+'\n' Text
+
+'\n' Text
+
+'-- transform the last stm is a list of stms' Comment.Single
+'\n' Text
+
+'-- will puke on group' Comment.Single
+'\n' Text
+
+'apply_to_last' Name
+' ' Text
+'=' Operator
+' ' Text
+'(' Keyword.Type
+'stms' Name
+',' Punctuation
+' ' Text
+'fn' Name
+')' Keyword.Type
+' ' Text
+'->' Name.Function
+'\n' Text
+
+' ' Text
+'-- find last (real) exp' Comment.Single
+'\n' Text
+
+' ' Text
+'last_exp_id' Name
+' ' Text
+'=' Operator
+' ' Text
+'0' Literal.Number.Integer
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'#' Operator
+'stms' Name
+',' Punctuation
+' ' Text
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'-' Operator
+'1' Literal.Number.Integer
+'\n' Text
+
+' ' Text
+'stm' Name
+' ' Text
+'=' Operator
+' ' Text
+'stms' Name
+'[' Keyword.Type
+'i' Name
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'stm' Name
+' ' Text
+'and' Keyword
+' ' Text
+'util' Name
+'.' Operator
+'moon' Name
+'.' Operator
+'type' Name.Builtin
+'(' Keyword.Type
+'stm' Name
+')' Keyword.Type
+' ' Text
+'!=' Operator
+' ' Text
+'Run' Name.Class
+'\n' Text
+
+' ' Text
+'last_exp_id' Name
+' ' Text
+'=' Operator
+' ' Text
+'i' Name
+'\n' Text
+
+' ' Text
+'break' Keyword
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'for' Keyword
+' ' Text
+'i' Name
+',' Punctuation
+' ' Text
+'stm' Name
+' ' Text
+'in' Keyword
+' ' Text
+'ipairs' Name.Builtin
+' ' Text
+'stms' Name
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'i' Name
+' ' Text
+'==' Operator
+' ' Text
+'last_exp_id' Name
+'\n' Text
+
+' ' Text
+'fn' Name
+' ' Text
+'stm' Name
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'stm' Name
+'\n' Text
+
+'\n' Text
+
+'-- is a body a sindle expression/statement' Comment.Single
+'\n' Text
+
+'is_singular' Name
+' ' Text
+'=' Operator
+' ' Text
+'(' Keyword.Type
+'body' Name
+')' Keyword.Type
+' ' Text
+'->' Name.Function
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'false' Keyword.Constant
+' ' Text
+'if' Keyword
+' ' Text
+'#' Operator
+'body' Name
+' ' Text
+'!=' Operator
+' ' Text
+'1' Literal.Number.Integer
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'"' Literal.String.Double
+'g' Literal.String
+'r' Literal.String
+'o' Literal.String
+'u' Literal.String
+'p' Literal.String
+'"' Literal.String.Double
+' ' Text
+'==' Operator
+' ' Text
+'ntype' Name
+' ' Text
+'body' Name
+'\n' Text
+
+' ' Text
+'is_singular' Name
+' ' Text
+'body' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'true' Keyword.Constant
+'\n' Text
+
+'\n' Text
+
+'constructor_name' Name
+' ' Text
+'=' Operator
+' ' Text
+'"' Literal.String.Double
+'n' Literal.String
+'e' Literal.String
+'w' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+'\n' Text
+
+'class' Keyword
+' ' Text
+'Transformer' Name.Class
+'\n' Text
+
+' ' Text
+'new:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'@transformers' Name.Variable.Class
+',' Punctuation
+' ' Text
+'@scope' Name.Variable.Class
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'@seen_nodes' Name.Variable.Class
+' ' Text
+'=' Operator
+' ' Text
+'{' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'transform:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'scope' Name
+',' Punctuation
+' ' Text
+'node' Name
+',' Punctuation
+' ' Text
+'...' Operator
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'-- print scope, node, ...' Comment.Single
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'node' Name
+' ' Text
+'if' Keyword
+' ' Text
+'@seen_nodes' Name.Variable.Class
+'[' Keyword.Type
+'node' Name
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'@seen_nodes' Name.Variable.Class
+'[' Keyword.Type
+'node' Name
+']' Keyword.Type
+' ' Text
+'=' Operator
+' ' Text
+'true' Keyword.Constant
+'\n' Text
+
+' ' Text
+'while' Keyword
+' ' Text
+'true' Keyword.Constant
+'\n' Text
+
+' ' Text
+'transformer' Name
+' ' Text
+'=' Operator
+' ' Text
+'@transformers' Name.Variable.Class
+'[' Keyword.Type
+'ntype' Name
+' ' Text
+'node' Name
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'res' Name
+' ' Text
+'=' Operator
+' ' Text
+'if' Keyword
+' ' Text
+'transformer' Name
+'\n' Text
+
+' ' Text
+'transformer' Name
+'(' Keyword.Type
+'scope' Name
+',' Punctuation
+' ' Text
+'node' Name
+',' Punctuation
+' ' Text
+'...' Operator
+')' Keyword.Type
+' ' Text
+'or' Keyword
+' ' Text
+'node' Name
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'node' Name
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'node' Name
+' ' Text
+'if' Keyword
+' ' Text
+'res' Name
+' ' Text
+'==' Operator
+' ' Text
+'node' Name
+'\n' Text
+
+' ' Text
+'node' Name
+' ' Text
+'=' Operator
+' ' Text
+'res' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'__call:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+',' Punctuation
+' ' Text
+'...' Operator
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'@transform' Name.Variable.Class
+' ' Text
+'@scope' Name.Variable.Class
+',' Punctuation
+' ' Text
+'node' Name
+',' Punctuation
+' ' Text
+'...' Operator
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'instance:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'scope' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'Transformer' Name.Class
+' ' Text
+'@transformers' Name.Variable.Class
+',' Punctuation
+' ' Text
+'scope' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'can_transform:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'@transformers' Name.Variable.Class
+'[' Keyword.Type
+'ntype' Name
+' ' Text
+'node' Name
+']' Keyword.Type
+' ' Text
+'!=' Operator
+' ' Text
+'nil' Keyword.Constant
+'\n' Text
+
+'\n' Text
+
+'construct_comprehension' Name
+' ' Text
+'=' Operator
+' ' Text
+'(' Keyword.Type
+'inner' Name
+',' Punctuation
+' ' Text
+'clauses' Name
+')' Keyword.Type
+' ' Text
+'->' Name.Function
+'\n' Text
+
+' ' Text
+'current_stms' Name
+' ' Text
+'=' Operator
+' ' Text
+'inner' Name
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'_' Name
+',' Punctuation
+' ' Text
+'clause' Name
+' ' Text
+'in' Keyword
+' ' Text
+'reversed' Name
+' ' Text
+'clauses' Name
+'\n' Text
+
+' ' Text
+'t' Name
+' ' Text
+'=' Operator
+' ' Text
+'clause' Name
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'current_stms' Name
+' ' Text
+'=' Operator
+' ' Text
+'if' Keyword
+' ' Text
+'t' Name
+' ' Text
+'==' Operator
+' ' Text
+'"' Literal.String.Double
+'f' Literal.String
+'o' Literal.String
+'r' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'_' Name
+',' Punctuation
+' ' Text
+'names' Name
+',' Punctuation
+' ' Text
+'iter' Name
+' ' Text
+'=' Operator
+' ' Text
+'unpack' Name
+' ' Text
+'clause' Name
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'f' Literal.String
+'o' Literal.String
+'r' Literal.String
+'e' Literal.String
+'a' Literal.String
+'c' Literal.String
+'h' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'names' Name
+',' Punctuation
+' ' Text
+'iter' Name
+',' Punctuation
+' ' Text
+'current_stms' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'elseif' Keyword
+' ' Text
+'t' Name
+' ' Text
+'==' Operator
+' ' Text
+'"' Literal.String.Double
+'w' Literal.String
+'h' Literal.String
+'e' Literal.String
+'n' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'_' Name
+',' Punctuation
+' ' Text
+'cond' Name
+' ' Text
+'=' Operator
+' ' Text
+'unpack' Name
+' ' Text
+'clause' Name
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'i' Literal.String
+'f' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'cond' Name
+',' Punctuation
+' ' Text
+'current_stms' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'error' Name.Builtin
+' ' Text
+'"' Literal.String.Double
+'U' Literal.String
+'n' Literal.String
+'k' Literal.String
+'n' Literal.String
+'o' Literal.String
+'w' Literal.String
+'n' Literal.String
+' ' Literal.String
+'c' Literal.String
+'o' Literal.String
+'m' Literal.String
+'p' Literal.String
+'r' Literal.String
+'e' Literal.String
+'h' Literal.String
+'e' Literal.String
+'n' Literal.String
+'s' Literal.String
+'i' Literal.String
+'o' Literal.String
+'n' Literal.String
+' ' Literal.String
+'c' Literal.String
+'l' Literal.String
+'a' Literal.String
+'u' Literal.String
+'s' Literal.String
+'e' Literal.String
+':' Literal.String
+' ' Literal.String
+'"' Literal.String.Double
+'..' Operator
+'t' Name
+'\n' Text
+
+' ' Text
+'current_stms' Name
+' ' Text
+'=' Operator
+' ' Text
+'{' Keyword.Type
+'current_stms' Name
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'current_stms' Name
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+'Statement' Name.Class
+' ' Text
+'=' Operator
+' ' Text
+'Transformer' Name.Class
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'assign:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'_' Name
+',' Punctuation
+' ' Text
+'names' Name
+',' Punctuation
+' ' Text
+'values' Name
+' ' Text
+'=' Operator
+' ' Text
+'unpack' Name
+' ' Text
+'node' Name
+'\n' Text
+
+' ' Text
+'-- bubble cascading assigns' Comment.Single
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'#' Operator
+'values' Name
+' ' Text
+'==' Operator
+' ' Text
+'1' Literal.Number.Integer
+' ' Text
+'and' Keyword
+' ' Text
+'types' Name
+'.' Operator
+'cascading' Name
+'[' Keyword.Type
+'ntype' Name
+' ' Text
+'values' Name
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'values' Name
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+' ' Text
+'=' Operator
+' ' Text
+'@transform' Name.Variable.Class
+'.' Operator
+'statement' Name
+' ' Text
+'values' Name
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+',' Punctuation
+' ' Text
+'(' Keyword.Type
+'stm' Name
+')' Keyword.Type
+' ' Text
+'->' Name.Function
+'\n' Text
+
+' ' Text
+'t' Name
+' ' Text
+'=' Operator
+' ' Text
+'ntype' Name
+' ' Text
+'stm' Name
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'types' Name
+'.' Operator
+'is_value' Name
+' ' Text
+'stm' Name
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'a' Literal.String
+'s' Literal.String
+'s' Literal.String
+'i' Literal.String
+'g' Literal.String
+'n' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'names' Name
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'stm' Name
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'stm' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'group' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'d' Literal.String
+'e' Literal.String
+'c' Literal.String
+'l' Literal.String
+'a' Literal.String
+'r' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'names' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'values' Name
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'node' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'export:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'-- assign values if they are included' Comment.Single
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'#' Operator
+'node' Name
+' ' Text
+'>' Operator
+' ' Text
+'2' Literal.Number.Integer
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'node' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+' ' Text
+'==' Operator
+' ' Text
+'"' Literal.String.Double
+'c' Literal.String
+'l' Literal.String
+'a' Literal.String
+'s' Literal.String
+'s' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'cls' Name
+' ' Text
+'=' Operator
+' ' Text
+'smart_node' Name
+' ' Text
+'node' Name
+'[' Keyword.Type
+'3' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'group' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'e' Literal.String
+'x' Literal.String
+'p' Literal.String
+'o' Literal.String
+'r' Literal.String
+'t' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'cls' Name
+'.' Operator
+'name' Name
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'cls' Name
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'group' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'node' Name
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'names:' Name.Variable
+' ' Text
+'node' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'values:' Name.Variable
+' ' Text
+'node' Name
+'[' Keyword.Type
+'3' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'nil' Keyword.Constant
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'update:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'_' Name
+',' Punctuation
+' ' Text
+'name' Name
+',' Punctuation
+' ' Text
+'op' Name
+',' Punctuation
+' ' Text
+'exp' Name
+' ' Text
+'=' Operator
+' ' Text
+'unpack' Name
+' ' Text
+'node' Name
+'\n' Text
+
+' ' Text
+'op_final' Name
+' ' Text
+'=' Operator
+' ' Text
+'op' Name
+'\\' Operator
+'match' Name
+' ' Text
+'"' Literal.String.Double
+'^' Literal.String
+'(' Literal.String
+'.' Literal.String
+'+' Literal.String
+')' Literal.String
+'=' Literal.String
+'$' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'error' Name.Builtin
+' ' Text
+'"' Literal.String.Double
+'U' Literal.String
+'n' Literal.String
+'k' Literal.String
+'n' Literal.String
+'o' Literal.String
+'w' Literal.String
+'n' Literal.String
+' ' Literal.String
+'o' Literal.String
+'p' Literal.String
+':' Literal.String
+' ' Literal.String
+'"' Literal.String.Double
+'..' Operator
+'op' Name
+' ' Text
+'if' Keyword
+' ' Text
+'not' Keyword
+' ' Text
+'op_final' Name
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign_one' Name
+' ' Text
+'name' Name
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'e' Literal.String
+'x' Literal.String
+'p' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'name' Name
+',' Punctuation
+' ' Text
+'op_final' Name
+',' Punctuation
+' ' Text
+'exp' Name
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'import:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'_' Name
+',' Punctuation
+' ' Text
+'names' Name
+',' Punctuation
+' ' Text
+'source' Name
+' ' Text
+'=' Operator
+' ' Text
+'unpack' Name
+' ' Text
+'node' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'stubs' Name
+' ' Text
+'=' Operator
+' ' Text
+'for' Keyword
+' ' Text
+'name' Name
+' ' Text
+'in' Keyword
+' ' Text
+'*' Operator
+'names' Name
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'type' Name.Builtin
+'(' Keyword.Type
+'name' Name
+')' Keyword.Type
+' ' Text
+'==' Operator
+' ' Text
+'"' Literal.String.Double
+'t' Literal.String
+'a' Literal.String
+'b' Literal.String
+'l' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'name' Name
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'d' Literal.String
+'o' Literal.String
+'t' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'name' Name
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'real_names' Name
+' ' Text
+'=' Operator
+' ' Text
+'for' Keyword
+' ' Text
+'name' Name
+' ' Text
+'in' Keyword
+' ' Text
+'*' Operator
+'names' Name
+'\n' Text
+
+' ' Text
+'type' Name.Builtin
+'(' Keyword.Type
+'name' Name
+')' Keyword.Type
+' ' Text
+'==' Operator
+' ' Text
+'"' Literal.String.Double
+'t' Literal.String
+'a' Literal.String
+'b' Literal.String
+'l' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+' ' Text
+'and' Keyword
+' ' Text
+'name' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+' ' Text
+'or' Keyword
+' ' Text
+'name' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'type' Name.Builtin
+'(' Keyword.Type
+'source' Name
+')' Keyword.Type
+' ' Text
+'==' Operator
+' ' Text
+'"' Literal.String.Double
+'s' Literal.String
+'t' Literal.String
+'r' Literal.String
+'i' Literal.String
+'n' Literal.String
+'g' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'names:' Name.Variable
+' ' Text
+'real_names' Name
+'\n' Text
+
+' ' Text
+'values:' Name.Variable
+' ' Text
+'[' Keyword.Type
+'build' Name
+'.' Operator
+'chain' Name
+' ' Text
+'{' Keyword.Type
+' ' Text
+'base:' Name.Variable
+' ' Text
+'source' Name
+',' Punctuation
+' ' Text
+'stub' Name
+'}' Keyword.Type
+' ' Text
+'for' Keyword
+' ' Text
+'stub' Name
+' ' Text
+'in' Keyword
+' ' Text
+'*' Operator
+'stubs' Name
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'source_name' Name
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'t' Literal.String
+'a' Literal.String
+'b' Literal.String
+'l' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'group' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'d' Literal.String
+'e' Literal.String
+'c' Literal.String
+'l' Literal.String
+'a' Literal.String
+'r' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'real_names' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'[' Keyword.Type
+'"' Literal.String.Double
+'d' Literal.String
+'o' Literal.String
+'"' Literal.String.Double
+']' Keyword.Type
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign_one' Name
+' ' Text
+'source_name' Name
+',' Punctuation
+' ' Text
+'source' Name
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'names:' Name.Variable
+' ' Text
+'real_names' Name
+'\n' Text
+
+' ' Text
+'values:' Name.Variable
+' ' Text
+'[' Keyword.Type
+'build' Name
+'.' Operator
+'chain' Name
+' ' Text
+'{' Keyword.Type
+' ' Text
+'base:' Name.Variable
+' ' Text
+'source_name' Name
+',' Punctuation
+' ' Text
+'stub' Name
+'}' Keyword.Type
+' ' Text
+'for' Keyword
+' ' Text
+'stub' Name
+' ' Text
+'in' Keyword
+' ' Text
+'*' Operator
+'stubs' Name
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'comprehension:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+',' Punctuation
+' ' Text
+'action' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'_' Name
+',' Punctuation
+' ' Text
+'exp' Name
+',' Punctuation
+' ' Text
+'clauses' Name
+' ' Text
+'=' Operator
+' ' Text
+'unpack' Name
+' ' Text
+'node' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'action' Name
+' ' Text
+'=' Operator
+' ' Text
+'action' Name
+' ' Text
+'or' Keyword
+' ' Text
+'(' Keyword.Type
+'exp' Name
+')' Keyword.Type
+' ' Text
+'->' Name.Function
+' ' Text
+'{' Keyword.Type
+'exp' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'construct_comprehension' Name
+' ' Text
+'action' Name
+'(' Keyword.Type
+'exp' Name
+')' Keyword.Type
+',' Punctuation
+' ' Text
+'clauses' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'-- handle cascading return decorator' Comment.Single
+'\n' Text
+
+' ' Text
+'if:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+',' Punctuation
+' ' Text
+'ret' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'ret' Name
+'\n' Text
+
+' ' Text
+'smart_node' Name
+' ' Text
+'node' Name
+'\n' Text
+
+' ' Text
+'-- mutate all the bodies' Comment.Single
+'\n' Text
+
+' ' Text
+'node' Name
+'[' Keyword.Type
+"'" Literal.String.Single
+'t' Literal.String
+'h' Literal.String
+'e' Literal.String
+'n' Literal.String
+"'" Literal.String.Single
+']' Keyword.Type
+' ' Text
+'=' Operator
+' ' Text
+'apply_to_last' Name
+' ' Text
+'node' Name
+'[' Keyword.Type
+"'" Literal.String.Single
+'t' Literal.String
+'h' Literal.String
+'e' Literal.String
+'n' Literal.String
+"'" Literal.String.Single
+']' Keyword.Type
+',' Punctuation
+' ' Text
+'ret' Name
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'i' Name
+' ' Text
+'=' Operator
+' ' Text
+'4' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'#' Operator
+'node' Name
+'\n' Text
+
+' ' Text
+'case' Name
+' ' Text
+'=' Operator
+' ' Text
+'node' Name
+'[' Keyword.Type
+'i' Name
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'body_idx' Name
+' ' Text
+'=' Operator
+' ' Text
+'#' Operator
+'node' Name
+'[' Keyword.Type
+'i' Name
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'case' Name
+'[' Keyword.Type
+'body_idx' Name
+']' Keyword.Type
+' ' Text
+'=' Operator
+' ' Text
+'apply_to_last' Name
+' ' Text
+'case' Name
+'[' Keyword.Type
+'body_idx' Name
+']' Keyword.Type
+',' Punctuation
+' ' Text
+'ret' Name
+'\n' Text
+
+' ' Text
+'node' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'with:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+',' Punctuation
+' ' Text
+'ret' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'_' Name
+',' Punctuation
+' ' Text
+'exp' Name
+',' Punctuation
+' ' Text
+'block' Name
+' ' Text
+'=' Operator
+' ' Text
+'unpack' Name
+' ' Text
+'node' Name
+'\n' Text
+
+' ' Text
+'scope_name' Name
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'w' Literal.String
+'i' Literal.String
+'t' Literal.String
+'h' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'build' Name
+'[' Keyword.Type
+'"' Literal.String.Double
+'d' Literal.String
+'o' Literal.String
+'"' Literal.String.Double
+']' Keyword.Type
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign_one' Name
+' ' Text
+'scope_name' Name
+',' Punctuation
+' ' Text
+'exp' Name
+'\n' Text
+
+' ' Text
+'Run' Name.Class
+' ' Text
+'=>' Name.Function
+' ' Text
+'@set' Name.Variable.Class
+' ' Text
+'"' Literal.String.Double
+'s' Literal.String
+'c' Literal.String
+'o' Literal.String
+'p' Literal.String
+'e' Literal.String
+'_' Literal.String
+'v' Literal.String
+'a' Literal.String
+'r' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'scope_name' Name
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'group' Name
+' ' Text
+'block' Name
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'ret' Name
+'\n' Text
+
+' ' Text
+'ret' Name
+' ' Text
+'scope_name' Name
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'foreach:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'smart_node' Name
+' ' Text
+'node' Name
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'ntype' Name
+'(' Keyword.Type
+'node' Name
+'.' Operator
+'iter' Name
+')' Keyword.Type
+' ' Text
+'==' Operator
+' ' Text
+'"' Literal.String.Double
+'u' Literal.String
+'n' Literal.String
+'p' Literal.String
+'a' Literal.String
+'c' Literal.String
+'k' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'list' Name
+' ' Text
+'=' Operator
+' ' Text
+'node' Name
+'.' Operator
+'iter' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'index_name' Name
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'i' Literal.String
+'n' Literal.String
+'d' Literal.String
+'e' Literal.String
+'x' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'list_name' Name
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'l' Literal.String
+'i' Literal.String
+'s' Literal.String
+'t' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'slice_var' Name
+' ' Text
+'=' Operator
+' ' Text
+'nil' Keyword.Constant
+'\n' Text
+
+' ' Text
+'bounds' Name
+' ' Text
+'=' Operator
+' ' Text
+'if' Keyword
+' ' Text
+'is_slice' Name
+' ' Text
+'list' Name
+'\n' Text
+
+' ' Text
+'slice' Name
+' ' Text
+'=' Operator
+' ' Text
+'list' Name
+'[' Keyword.Type
+'#' Operator
+'list' Name
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'table.remove' Name.Builtin
+' ' Text
+'list' Name
+'\n' Text
+
+' ' Text
+'table.remove' Name.Builtin
+' ' Text
+'slice' Name
+',' Punctuation
+' ' Text
+'1' Literal.Number.Integer
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'slice' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+' ' Text
+'=' Operator
+' ' Text
+'if' Keyword
+' ' Text
+'slice' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+' ' Text
+'and' Keyword
+' ' Text
+'slice' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+' ' Text
+'!=' Operator
+' ' Text
+'"' Literal.String.Double
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'max_tmp_name' Name
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'m' Literal.String
+'a' Literal.String
+'x' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'slice_var' Name
+' ' Text
+'=' Operator
+' ' Text
+'build' Name
+'.' Operator
+'assign_one' Name
+' ' Text
+'max_tmp_name' Name
+',' Punctuation
+' ' Text
+'slice' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'e' Literal.String
+'x' Literal.String
+'p' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'max_tmp_name' Name
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'<' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+'\n' Text
+
+' ' Text
+'"' Literal.String.Double
+'a' Literal.String
+'n' Literal.String
+'d' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'l' Literal.String
+'e' Literal.String
+'n' Literal.String
+'g' Literal.String
+'t' Literal.String
+'h' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'list_name' Name
+'}' Keyword.Type
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'+' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'max_tmp_name' Name
+'\n' Text
+
+' ' Text
+'"' Literal.String.Double
+'o' Literal.String
+'r' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'max_tmp_name' Name
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'l' Literal.String
+'e' Literal.String
+'n' Literal.String
+'g' Literal.String
+'t' Literal.String
+'h' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'list_name' Name
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'slice' Name
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'1' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'l' Literal.String
+'e' Literal.String
+'n' Literal.String
+'g' Literal.String
+'t' Literal.String
+'h' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'list_name' Name
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'group' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign_one' Name
+' ' Text
+'list_name' Name
+',' Punctuation
+' ' Text
+'list' Name
+'\n' Text
+
+' ' Text
+'slice_var' Name
+'\n' Text
+
+' ' Text
+'build' Name
+'[' Keyword.Type
+'"' Literal.String.Double
+'f' Literal.String
+'o' Literal.String
+'r' Literal.String
+'"' Literal.String.Double
+']' Keyword.Type
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'name:' Name.Variable
+' ' Text
+'index_name' Name
+'\n' Text
+
+' ' Text
+'bounds:' Name.Variable
+' ' Text
+'bounds' Name
+'\n' Text
+
+' ' Text
+'body:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'a' Literal.String
+'s' Literal.String
+'s' Literal.String
+'i' Literal.String
+'g' Literal.String
+'n' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'node' Name
+'.' Operator
+'names' Name
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'list_name' Name
+'\\' Operator
+'index' Name
+' ' Text
+'index_name' Name
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'group' Name
+' ' Text
+'node' Name
+'.' Operator
+'body' Name
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'switch:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+',' Punctuation
+' ' Text
+'ret' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'_' Name
+',' Punctuation
+' ' Text
+'exp' Name
+',' Punctuation
+' ' Text
+'conds' Name
+' ' Text
+'=' Operator
+' ' Text
+'unpack' Name
+' ' Text
+'node' Name
+'\n' Text
+
+' ' Text
+'exp_name' Name
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'e' Literal.String
+'x' Literal.String
+'p' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'-- convert switch conds into if statment conds' Comment.Single
+'\n' Text
+
+' ' Text
+'convert_cond' Name
+' ' Text
+'=' Operator
+' ' Text
+'(' Keyword.Type
+'cond' Name
+')' Keyword.Type
+' ' Text
+'->' Name.Function
+'\n' Text
+
+' ' Text
+'t' Name
+',' Punctuation
+' ' Text
+'case_exp' Name
+',' Punctuation
+' ' Text
+'body' Name
+' ' Text
+'=' Operator
+' ' Text
+'unpack' Name
+' ' Text
+'cond' Name
+'\n' Text
+
+' ' Text
+'out' Name
+' ' Text
+'=' Operator
+' ' Text
+'{' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'insert' Name
+' ' Text
+'out' Name
+',' Punctuation
+' ' Text
+'t' Name
+' ' Text
+'==' Operator
+' ' Text
+'"' Literal.String.Double
+'c' Literal.String
+'a' Literal.String
+'s' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+' ' Text
+'and' Keyword
+' ' Text
+'"' Literal.String.Double
+'e' Literal.String
+'l' Literal.String
+'s' Literal.String
+'e' Literal.String
+'i' Literal.String
+'f' Literal.String
+'"' Literal.String.Double
+' ' Text
+'or' Keyword
+' ' Text
+'"' Literal.String.Double
+'e' Literal.String
+'l' Literal.String
+'s' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'t' Name
+' ' Text
+'!=' Operator
+' ' Text
+'"' Literal.String.Double
+'e' Literal.String
+'l' Literal.String
+'s' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'insert' Name
+' ' Text
+'out' Name
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'e' Literal.String
+'x' Literal.String
+'p' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'case_exp' Name
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'=' Literal.String
+'=' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'exp_name' Name
+'}' Keyword.Type
+' ' Text
+'if' Keyword
+' ' Text
+'t' Name
+' ' Text
+'!=' Operator
+' ' Text
+'"' Literal.String.Double
+'e' Literal.String
+'l' Literal.String
+'s' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'body' Name
+' ' Text
+'=' Operator
+' ' Text
+'case_exp' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'ret' Name
+'\n' Text
+
+' ' Text
+'body' Name
+' ' Text
+'=' Operator
+' ' Text
+'apply_to_last' Name
+' ' Text
+'body' Name
+',' Punctuation
+' ' Text
+'ret' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'insert' Name
+' ' Text
+'out' Name
+',' Punctuation
+' ' Text
+'body' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'out' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'first' Name
+' ' Text
+'=' Operator
+' ' Text
+'true' Keyword.Constant
+'\n' Text
+
+' ' Text
+'if_stm' Name
+' ' Text
+'=' Operator
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'i' Literal.String
+'f' Literal.String
+'"' Literal.String.Double
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'cond' Name
+' ' Text
+'in' Keyword
+' ' Text
+'*' Operator
+'conds' Name
+'\n' Text
+
+' ' Text
+'if_cond' Name
+' ' Text
+'=' Operator
+' ' Text
+'convert_cond' Name
+' ' Text
+'cond' Name
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'first' Name
+'\n' Text
+
+' ' Text
+'first' Name
+' ' Text
+'=' Operator
+' ' Text
+'false' Keyword.Constant
+'\n' Text
+
+' ' Text
+'insert' Name
+' ' Text
+'if_stm' Name
+',' Punctuation
+' ' Text
+'if_cond' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'insert' Name
+' ' Text
+'if_stm' Name
+',' Punctuation
+' ' Text
+'if_cond' Name
+'[' Keyword.Type
+'3' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'insert' Name
+' ' Text
+'if_stm' Name
+',' Punctuation
+' ' Text
+'if_cond' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'group' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign_one' Name
+' ' Text
+'exp_name' Name
+',' Punctuation
+' ' Text
+'exp' Name
+'\n' Text
+
+' ' Text
+'if_stm' Name
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'class:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'_' Name
+',' Punctuation
+' ' Text
+'name' Name
+',' Punctuation
+' ' Text
+'parent_val' Name
+',' Punctuation
+' ' Text
+'body' Name
+' ' Text
+'=' Operator
+' ' Text
+'unpack' Name
+' ' Text
+'node' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'-- split apart properties and statements' Comment.Single
+'\n' Text
+
+' ' Text
+'statements' Name
+' ' Text
+'=' Operator
+' ' Text
+'{' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'properties' Name
+' ' Text
+'=' Operator
+' ' Text
+'{' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'item' Name
+' ' Text
+'in' Keyword
+' ' Text
+'*' Operator
+'body' Name
+'\n' Text
+
+' ' Text
+'switch' Keyword
+' ' Text
+'item' Name
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'when' Keyword
+' ' Text
+'"' Literal.String.Double
+'s' Literal.String
+'t' Literal.String
+'m' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'insert' Name
+' ' Text
+'statements' Name
+',' Punctuation
+' ' Text
+'item' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'when' Keyword
+' ' Text
+'"' Literal.String.Double
+'p' Literal.String
+'r' Literal.String
+'o' Literal.String
+'p' Literal.String
+'s' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'for' Keyword
+' ' Text
+'tuple' Name
+' ' Text
+'in' Keyword
+' ' Text
+'*' Operator
+'item' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+',' Punctuation
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'insert' Name
+' ' Text
+'properties' Name
+',' Punctuation
+' ' Text
+'tuple' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'-- find constructor' Comment.Single
+'\n' Text
+
+' ' Text
+'constructor' Name
+' ' Text
+'=' Operator
+' ' Text
+'nil' Keyword.Constant
+'\n' Text
+
+' ' Text
+'properties' Name
+' ' Text
+'=' Operator
+' ' Text
+'for' Keyword
+' ' Text
+'tuple' Name
+' ' Text
+'in' Keyword
+' ' Text
+'*' Operator
+'properties' Name
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'tuple' Name
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+' ' Text
+'==' Operator
+' ' Text
+'constructor_name' Name
+'\n' Text
+
+' ' Text
+'constructor' Name
+' ' Text
+'=' Operator
+' ' Text
+'tuple' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'nil' Keyword.Constant
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'tuple' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'parent_cls_name' Name
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'p' Literal.String
+'a' Literal.String
+'r' Literal.String
+'e' Literal.String
+'n' Literal.String
+'t' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'base_name' Name
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'b' Literal.String
+'a' Literal.String
+'s' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'self_name' Name
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'s' Literal.String
+'e' Literal.String
+'l' Literal.String
+'f' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'cls_name' Name
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'c' Literal.String
+'l' Literal.String
+'a' Literal.String
+'s' Literal.String
+'s' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'not' Keyword
+' ' Text
+'constructor' Name
+'\n' Text
+
+' ' Text
+'constructor' Name
+' ' Text
+'=' Operator
+' ' Text
+'build' Name
+'.' Operator
+'fndef' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'args:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'{' Keyword.Type
+'"' Literal.String.Double
+'.' Literal.String
+'.' Literal.String
+'.' Literal.String
+'"' Literal.String.Double
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'arrow:' Name.Variable
+' ' Text
+'"' Literal.String.Double
+'f' Literal.String
+'a' Literal.String
+'t' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'body:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'[' Keyword.Type
+'"' Literal.String.Double
+'i' Literal.String
+'f' Literal.String
+'"' Literal.String.Double
+']' Keyword.Type
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'cond:' Name.Variable
+' ' Text
+'parent_cls_name' Name
+'\n' Text
+
+' ' Text
+'then:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'chain' Name
+' ' Text
+'{' Keyword.Type
+' ' Text
+'base:' Name.Variable
+' ' Text
+'"' Literal.String.Double
+'s' Literal.String
+'u' Literal.String
+'p' Literal.String
+'e' Literal.String
+'r' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'c' Literal.String
+'a' Literal.String
+'l' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'.' Literal.String
+'.' Literal.String
+'.' Literal.String
+'"' Literal.String.Double
+'}' Keyword.Type
+'}' Keyword.Type
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'smart_node' Name
+' ' Text
+'constructor' Name
+'\n' Text
+
+' ' Text
+'constructor' Name
+'.' Operator
+'arrow' Name
+' ' Text
+'=' Operator
+' ' Text
+'"' Literal.String.Double
+'f' Literal.String
+'a' Literal.String
+'t' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'cls' Name
+' ' Text
+'=' Operator
+' ' Text
+'build' Name
+'.' Operator
+'table' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'_' Literal.String
+'_' Literal.String
+'i' Literal.String
+'n' Literal.String
+'i' Literal.String
+'t' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'constructor' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'_' Literal.String
+'_' Literal.String
+'b' Literal.String
+'a' Literal.String
+'s' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'base_name' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'_' Literal.String
+'_' Literal.String
+'n' Literal.String
+'a' Literal.String
+'m' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'s' Literal.String
+'t' Literal.String
+'r' Literal.String
+'i' Literal.String
+'n' Literal.String
+'g' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+"'" Literal.String.Single
+'"' Literal.String
+"'" Literal.String.Single
+',' Punctuation
+' ' Text
+'name' Name
+'}' Keyword.Type
+'}' Keyword.Type
+' ' Text
+'-- "quote the string"' Comment.Single
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'_' Literal.String
+'_' Literal.String
+'p' Literal.String
+'a' Literal.String
+'r' Literal.String
+'e' Literal.String
+'n' Literal.String
+'t' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'parent_cls_name' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'-- look up a name in the class object' Comment.Single
+'\n' Text
+
+' ' Text
+'class_lookup' Name
+' ' Text
+'=' Operator
+' ' Text
+'build' Name
+'[' Keyword.Type
+'"' Literal.String.Double
+'i' Literal.String
+'f' Literal.String
+'"' Literal.String.Double
+']' Keyword.Type
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'cond:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'e' Literal.String
+'x' Literal.String
+'p' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'v' Literal.String
+'a' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'=' Literal.String
+'=' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'n' Literal.String
+'i' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'a' Literal.String
+'n' Literal.String
+'d' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'parent_cls_name' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'then:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'parent_cls_name' Name
+'\\' Operator
+'index' Name
+'"' Literal.String.Double
+'n' Literal.String
+'a' Literal.String
+'m' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'insert' Name
+' ' Text
+'class_lookup' Name
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'e' Literal.String
+'l' Literal.String
+'s' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'v' Literal.String
+'a' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'cls_mt' Name
+' ' Text
+'=' Operator
+' ' Text
+'build' Name
+'.' Operator
+'table' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'_' Literal.String
+'_' Literal.String
+'i' Literal.String
+'n' Literal.String
+'d' Literal.String
+'e' Literal.String
+'x' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'build' Name
+'.' Operator
+'fndef' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'args:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'{' Keyword.Type
+'"' Literal.String.Double
+'c' Literal.String
+'l' Literal.String
+'s' Literal.String
+'"' Literal.String.Double
+'}' Keyword.Type
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'n' Literal.String
+'a' Literal.String
+'m' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'body:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign_one' Name
+' ' Text
+'LocalName' Name.Class
+'"' Literal.String.Double
+'v' Literal.String
+'a' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'build' Name
+'.' Operator
+'chain' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'base:' Name.Variable
+' ' Text
+'"' Literal.String.Double
+'r' Literal.String
+'a' Literal.String
+'w' Literal.String
+'g' Literal.String
+'e' Literal.String
+'t' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'c' Literal.String
+'a' Literal.String
+'l' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'base_name' Name
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'n' Literal.String
+'a' Literal.String
+'m' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'class_lookup' Name
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'_' Literal.String
+'_' Literal.String
+'c' Literal.String
+'a' Literal.String
+'l' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'build' Name
+'.' Operator
+'fndef' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'args:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'{' Keyword.Type
+'"' Literal.String.Double
+'c' Literal.String
+'l' Literal.String
+'s' Literal.String
+'"' Literal.String.Double
+'}' Keyword.Type
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'.' Literal.String
+'.' Literal.String
+'.' Literal.String
+'"' Literal.String.Double
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'body:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign_one' Name
+' ' Text
+'self_name' Name
+',' Punctuation
+' ' Text
+'build' Name
+'.' Operator
+'chain' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'base:' Name.Variable
+' ' Text
+'"' Literal.String.Double
+'s' Literal.String
+'e' Literal.String
+'t' Literal.String
+'m' Literal.String
+'e' Literal.String
+'t' Literal.String
+'a' Literal.String
+'t' Literal.String
+'a' Literal.String
+'b' Literal.String
+'l' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'c' Literal.String
+'a' Literal.String
+'l' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'{' Literal.String
+'}' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'base_name' Name
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'chain' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'base:' Name.Variable
+' ' Text
+'"' Literal.String.Double
+'c' Literal.String
+'l' Literal.String
+'s' Literal.String
+'.' Literal.String
+'_' Literal.String
+'_' Literal.String
+'i' Literal.String
+'n' Literal.String
+'i' Literal.String
+'t' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'c' Literal.String
+'a' Literal.String
+'l' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'self_name' Name
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'.' Literal.String
+'.' Literal.String
+'.' Literal.String
+'"' Literal.String.Double
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'self_name' Name
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'cls' Name
+' ' Text
+'=' Operator
+' ' Text
+'build' Name
+'.' Operator
+'chain' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'base:' Name.Variable
+' ' Text
+'"' Literal.String.Double
+'s' Literal.String
+'e' Literal.String
+'t' Literal.String
+'m' Literal.String
+'e' Literal.String
+'t' Literal.String
+'a' Literal.String
+'t' Literal.String
+'a' Literal.String
+'b' Literal.String
+'l' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'c' Literal.String
+'a' Literal.String
+'l' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'cls' Name
+',' Punctuation
+' ' Text
+'cls_mt' Name
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'value' Name
+' ' Text
+'=' Operator
+' ' Text
+'nil' Keyword.Constant
+'\n' Text
+
+' ' Text
+'with' Keyword
+' ' Text
+'build' Name
+'\n' Text
+
+' ' Text
+'value' Name
+' ' Text
+'=' Operator
+' ' Text
+'.' Operator
+'block_exp' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'Run' Name.Class
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'@set' Name.Variable.Class
+' ' Text
+'"' Literal.String.Double
+'s' Literal.String
+'u' Literal.String
+'p' Literal.String
+'e' Literal.String
+'r' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'(' Keyword.Type
+'block' Name
+',' Punctuation
+' ' Text
+'chain' Name
+')' Keyword.Type
+' ' Text
+'->' Name.Function
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'chain' Name
+'\n' Text
+
+' ' Text
+'slice' Name
+' ' Text
+'=' Operator
+' ' Text
+'[' Keyword.Type
+'item' Name
+' ' Text
+'for' Keyword
+' ' Text
+'item' Name
+' ' Text
+'in' Keyword
+' ' Text
+'*' Operator
+'chain' Name
+'[' Keyword.Type
+'3' Literal.Number.Integer
+',' Punctuation
+']' Keyword.Type
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'new_chain' Name
+' ' Text
+'=' Operator
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'c' Literal.String
+'h' Literal.String
+'a' Literal.String
+'i' Literal.String
+'n' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'parent_cls_name' Name
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'head' Name
+' ' Text
+'=' Operator
+' ' Text
+'slice' Name
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'head' Name
+' ' Text
+'==' Operator
+' ' Text
+'nil' Keyword.Constant
+'\n' Text
+
+' ' Text
+'return' Keyword
+' ' Text
+'parent_cls_name' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'switch' Keyword
+' ' Text
+'head' Name
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'-- calling super, inject calling name and self into chain' Comment.Single
+'\n' Text
+
+' ' Text
+'when' Keyword
+' ' Text
+'"' Literal.String.Double
+'c' Literal.String
+'a' Literal.String
+'l' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'calling_name' Name
+' ' Text
+'=' Operator
+' ' Text
+'block' Name
+'\\' Operator
+'get' Name
+'"' Literal.String.Double
+'c' Literal.String
+'u' Literal.String
+'r' Literal.String
+'r' Literal.String
+'e' Literal.String
+'n' Literal.String
+'t' Literal.String
+'_' Literal.String
+'b' Literal.String
+'l' Literal.String
+'o' Literal.String
+'c' Literal.String
+'k' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'slice' Name
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+' ' Text
+'=' Operator
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'c' Literal.String
+'a' Literal.String
+'l' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'s' Literal.String
+'e' Literal.String
+'l' Literal.String
+'f' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'unpack' Name
+' ' Text
+'head' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'act' Name
+' ' Text
+'=' Operator
+' ' Text
+'if' Keyword
+' ' Text
+'ntype' Name
+'(' Keyword.Type
+'calling_name' Name
+')' Keyword.Type
+' ' Text
+'!=' Operator
+' ' Text
+'"' Literal.String.Double
+'v' Literal.String
+'a' Literal.String
+'l' Literal.String
+'u' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+' ' Text
+'then' Keyword
+' ' Text
+'"' Literal.String.Double
+'i' Literal.String
+'n' Literal.String
+'d' Literal.String
+'e' Literal.String
+'x' Literal.String
+'"' Literal.String.Double
+' ' Text
+'else' Keyword
+' ' Text
+'"' Literal.String.Double
+'d' Literal.String
+'o' Literal.String
+'t' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'insert' Name
+' ' Text
+'new_chain' Name
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'act' Name
+',' Punctuation
+' ' Text
+'calling_name' Name
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'-- colon call on super, replace class with self as first arg' Comment.Single
+'\n' Text
+
+' ' Text
+'when' Keyword
+' ' Text
+'"' Literal.String.Double
+'c' Literal.String
+'o' Literal.String
+'l' Literal.String
+'o' Literal.String
+'n' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'call' Name
+' ' Text
+'=' Operator
+' ' Text
+'head' Name
+'[' Keyword.Type
+'3' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'insert' Name
+' ' Text
+'new_chain' Name
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'d' Literal.String
+'o' Literal.String
+'t' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'head' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'slice' Name
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+' ' Text
+'=' Operator
+' ' Text
+'{' Keyword.Type
+' ' Text
+'"' Literal.String.Double
+'c' Literal.String
+'a' Literal.String
+'l' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+' ' Text
+'"' Literal.String.Double
+'s' Literal.String
+'e' Literal.String
+'l' Literal.String
+'f' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'unpack' Name
+' ' Text
+'call' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+' ' Text
+'}' Keyword.Type
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'insert' Name
+' ' Text
+'new_chain' Name
+',' Punctuation
+' ' Text
+'item' Name
+' ' Text
+'for' Keyword
+' ' Text
+'item' Name
+' ' Text
+'in' Keyword
+' ' Text
+'*' Operator
+'slice' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'new_chain' Name
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'parent_cls_name' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'.' Operator
+'assign_one' Name
+' ' Text
+'parent_cls_name' Name
+',' Punctuation
+' ' Text
+'parent_val' Name
+' ' Text
+'==' Operator
+' ' Text
+'"' Literal.String.Double
+'"' Literal.String.Double
+' ' Text
+'and' Keyword
+' ' Text
+'"' Literal.String.Double
+'n' Literal.String
+'i' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+' ' Text
+'or' Keyword
+' ' Text
+'parent_val' Name
+'\n' Text
+
+' ' Text
+'.' Operator
+'assign_one' Name
+' ' Text
+'base_name' Name
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'t' Literal.String
+'a' Literal.String
+'b' Literal.String
+'l' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'properties' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'.' Operator
+'assign_one' Name
+' ' Text
+'base_name' Name
+'\\' Operator
+'chain' Name
+'"' Literal.String.Double
+'_' Literal.String
+'_' Literal.String
+'i' Literal.String
+'n' Literal.String
+'d' Literal.String
+'e' Literal.String
+'x' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'base_name' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'build' Name
+'[' Keyword.Type
+'"' Literal.String.Double
+'i' Literal.String
+'f' Literal.String
+'"' Literal.String.Double
+']' Keyword.Type
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'cond:' Name.Variable
+' ' Text
+'parent_cls_name' Name
+'\n' Text
+
+' ' Text
+'then:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'.' Operator
+'chain' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'base:' Name.Variable
+' ' Text
+'"' Literal.String.Double
+'s' Literal.String
+'e' Literal.String
+'t' Literal.String
+'m' Literal.String
+'e' Literal.String
+'t' Literal.String
+'a' Literal.String
+'t' Literal.String
+'a' Literal.String
+'b' Literal.String
+'l' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'c' Literal.String
+'a' Literal.String
+'l' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'base_name' Name
+',' Punctuation
+'\n' Text
+
+' ' Text
+'.' Operator
+'chain' Name
+' ' Text
+'{' Keyword.Type
+' ' Text
+'base:' Name.Variable
+' ' Text
+'parent_cls_name' Name
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'d' Literal.String
+'o' Literal.String
+'t' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'_' Literal.String
+'_' Literal.String
+'b' Literal.String
+'a' Literal.String
+'s' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'.' Operator
+'assign_one' Name
+' ' Text
+'cls_name' Name
+',' Punctuation
+' ' Text
+'cls' Name
+'\n' Text
+
+' ' Text
+'.' Operator
+'assign_one' Name
+' ' Text
+'base_name' Name
+'\\' Operator
+'chain' Name
+'"' Literal.String.Double
+'_' Literal.String
+'_' Literal.String
+'c' Literal.String
+'l' Literal.String
+'a' Literal.String
+'s' Literal.String
+'s' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'cls_name' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'.' Operator
+'group' Name
+' ' Text
+'if' Keyword
+' ' Text
+'#' Operator
+'statements' Name
+' ' Text
+'>' Operator
+' ' Text
+'0' Literal.Number.Integer
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'.' Operator
+'assign_one' Name
+' ' Text
+'LocalName' Name.Class
+'"' Literal.String.Double
+'s' Literal.String
+'e' Literal.String
+'l' Literal.String
+'f' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'cls_name' Name
+'\n' Text
+
+' ' Text
+'.' Operator
+'group' Name
+' ' Text
+'statements' Name
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+' ' Text
+'else' Keyword
+' ' Text
+'{' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'cls_name' Name
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'value' Name
+' ' Text
+'=' Operator
+' ' Text
+'.' Operator
+'group' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'.' Operator
+'declare' Name
+' ' Text
+'names:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'name' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'.' Operator
+'assign' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'names:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'name' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'values:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'value' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'value' Name
+'\n' Text
+
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+'class' Keyword
+' ' Text
+'Accumulator' Name.Class
+'\n' Text
+
+' ' Text
+'body_idx:' Name.Variable
+' ' Text
+'{' Keyword.Type
+' ' Text
+'for:' Name.Variable
+' ' Text
+'4' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'while:' Name.Variable
+' ' Text
+'3' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'foreach:' Name.Variable
+' ' Text
+'4' Literal.Number.Integer
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'new:' Name.Variable
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'@accum_name' Name.Variable.Class
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'a' Literal.String
+'c' Literal.String
+'c' Literal.String
+'u' Literal.String
+'m' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'@value_name' Name.Variable.Class
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'v' Literal.String
+'a' Literal.String
+'l' Literal.String
+'u' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'@len_name' Name.Variable.Class
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'l' Literal.String
+'e' Literal.String
+'n' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'-- wraps node and mutates body' Comment.Single
+'\n' Text
+
+' ' Text
+'convert:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'index' Name
+' ' Text
+'=' Operator
+' ' Text
+'@body_idx' Name.Variable.Class
+'[' Keyword.Type
+'ntype' Name
+' ' Text
+'node' Name
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'node' Name
+'[' Keyword.Type
+'index' Name
+']' Keyword.Type
+' ' Text
+'=' Operator
+' ' Text
+'@mutate_body' Name.Variable.Class
+' ' Text
+'node' Name
+'[' Keyword.Type
+'index' Name
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'@wrap' Name.Variable.Class
+' ' Text
+'node' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'-- wrap the node into a block_exp' Comment.Single
+'\n' Text
+
+' ' Text
+'wrap:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'block_exp' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign_one' Name
+' ' Text
+'@accum_name' Name.Variable.Class
+',' Punctuation
+' ' Text
+'build' Name
+'.' Operator
+'table' Name
+'!' Operator
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign_one' Name
+' ' Text
+'@len_name' Name.Variable.Class
+',' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+'\n' Text
+
+' ' Text
+'node' Name
+'\n' Text
+
+' ' Text
+'@accum_name' Name.Variable.Class
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'-- mutates the body of a loop construct to save last value into accumulator' Comment.Single
+'\n' Text
+
+' ' Text
+'-- can optionally skip nil results' Comment.Single
+'\n' Text
+
+' ' Text
+'mutate_body:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'body' Name
+',' Punctuation
+' ' Text
+'skip_nil' Name
+'=' Operator
+'true' Keyword.Constant
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'val' Name
+' ' Text
+'=' Operator
+' ' Text
+'if' Keyword
+' ' Text
+'not' Keyword
+' ' Text
+'skip_nil' Name
+' ' Text
+'and' Keyword
+' ' Text
+'is_singular' Name
+' ' Text
+'body' Name
+'\n' Text
+
+' ' Text
+'with' Keyword
+' ' Text
+'body' Name
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'body' Name
+' ' Text
+'=' Operator
+' ' Text
+'{' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'body' Name
+' ' Text
+'=' Operator
+' ' Text
+'apply_to_last' Name
+' ' Text
+'body' Name
+',' Punctuation
+' ' Text
+'(' Keyword.Type
+'n' Name
+')' Keyword.Type
+' ' Text
+'->' Name.Function
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign_one' Name
+' ' Text
+'@value_name' Name.Variable.Class
+',' Punctuation
+' ' Text
+'n' Name
+'\n' Text
+
+' ' Text
+'@value_name' Name.Variable.Class
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'update' Name
+' ' Text
+'=' Operator
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'u' Literal.String
+'p' Literal.String
+'d' Literal.String
+'a' Literal.String
+'t' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'@len_name' Name.Variable.Class
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'+' Literal.String
+'=' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'1' Literal.Number.Integer
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign_one' Name
+' ' Text
+'@accum_name' Name.Variable.Class
+'\\' Operator
+'index' Name
+'(' Keyword.Type
+'@len_name' Name.Variable.Class
+')' Keyword.Type
+',' Punctuation
+' ' Text
+'val' Name
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'skip_nil' Name
+'\n' Text
+
+' ' Text
+'table.insert' Name.Builtin
+' ' Text
+'body' Name
+',' Punctuation
+' ' Text
+'build' Name
+'[' Keyword.Type
+'"' Literal.String.Double
+'i' Literal.String
+'f' Literal.String
+'"' Literal.String.Double
+']' Keyword.Type
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'cond:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'e' Literal.String
+'x' Literal.String
+'p' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'@value_name' Name.Variable.Class
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'!' Literal.String
+'=' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'n' Literal.String
+'i' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'then:' Name.Variable
+' ' Text
+'update' Name
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'table.insert' Name.Builtin
+' ' Text
+'body' Name
+',' Punctuation
+' ' Text
+'build' Name
+'.' Operator
+'group' Name
+' ' Text
+'update' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'body' Name
+'\n' Text
+
+'\n' Text
+
+'default_accumulator' Name
+' ' Text
+'=' Operator
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'Accumulator' Name.Class
+'!' Operator
+'\\' Operator
+'convert' Name
+' ' Text
+'node' Name
+'\n' Text
+
+'\n' Text
+
+'\n' Text
+
+'implicitly_return' Name
+' ' Text
+'=' Operator
+' ' Text
+'(' Keyword.Type
+'scope' Name
+')' Keyword.Type
+' ' Text
+'->' Name.Function
+'\n' Text
+
+' ' Text
+'fn' Name
+' ' Text
+'=' Operator
+' ' Text
+'(' Keyword.Type
+'stm' Name
+')' Keyword.Type
+' ' Text
+'->' Name.Function
+'\n' Text
+
+' ' Text
+'t' Name
+' ' Text
+'=' Operator
+' ' Text
+'ntype' Name
+' ' Text
+'stm' Name
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'types' Name
+'.' Operator
+'manual_return' Name
+'[' Keyword.Type
+'t' Name
+']' Keyword.Type
+' ' Text
+'or' Keyword
+' ' Text
+'not' Keyword
+' ' Text
+'types' Name
+'.' Operator
+'is_value' Name
+' ' Text
+'stm' Name
+'\n' Text
+
+' ' Text
+'stm' Name
+'\n' Text
+
+' ' Text
+'elseif' Keyword
+' ' Text
+'types' Name
+'.' Operator
+'cascading' Name
+'[' Keyword.Type
+'t' Name
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'scope' Name
+'.' Operator
+'transform' Name
+'.' Operator
+'statement' Name
+' ' Text
+'stm' Name
+',' Punctuation
+' ' Text
+'fn' Name
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'t' Name
+' ' Text
+'==' Operator
+' ' Text
+'"' Literal.String.Double
+'c' Literal.String
+'o' Literal.String
+'m' Literal.String
+'p' Literal.String
+'r' Literal.String
+'e' Literal.String
+'h' Literal.String
+'e' Literal.String
+'n' Literal.String
+'s' Literal.String
+'i' Literal.String
+'o' Literal.String
+'n' Literal.String
+'"' Literal.String.Double
+' ' Text
+'and' Keyword
+' ' Text
+'not' Keyword
+' ' Text
+'types' Name
+'.' Operator
+'comprehension_has_value' Name
+' ' Text
+'stm' Name
+'\n' Text
+
+' ' Text
+'stm' Name
+'\n' Text
+
+' ' Text
+'else' Keyword
+'\n' Text
+
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'r' Literal.String
+'e' Literal.String
+'t' Literal.String
+'u' Literal.String
+'r' Literal.String
+'n' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'stm' Name
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'fn' Name
+'\n' Text
+
+'\n' Text
+
+'Value' Name.Class
+' ' Text
+'=' Operator
+' ' Text
+'Transformer' Name.Class
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'for:' Name.Variable
+' ' Text
+'default_accumulator' Name
+'\n' Text
+
+' ' Text
+'while:' Name.Variable
+' ' Text
+'default_accumulator' Name
+'\n' Text
+
+' ' Text
+'foreach:' Name.Variable
+' ' Text
+'default_accumulator' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'comprehension:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'a' Name
+' ' Text
+'=' Operator
+' ' Text
+'Accumulator' Name.Class
+'!' Operator
+'\n' Text
+
+' ' Text
+'node' Name
+' ' Text
+'=' Operator
+' ' Text
+'@transform' Name.Variable.Class
+'.' Operator
+'statement' Name
+' ' Text
+'node' Name
+',' Punctuation
+' ' Text
+'(' Keyword.Type
+'exp' Name
+')' Keyword.Type
+' ' Text
+'->' Name.Function
+'\n' Text
+
+' ' Text
+'a' Name
+'\\' Operator
+'mutate_body' Name
+' ' Text
+'{' Keyword.Type
+'exp' Name
+'}' Keyword.Type
+',' Punctuation
+' ' Text
+'false' Keyword.Constant
+'\n' Text
+
+' ' Text
+'a' Name
+'\\' Operator
+'wrap' Name
+' ' Text
+'node' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'tblcomprehension:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'_' Name
+',' Punctuation
+' ' Text
+'key_exp' Name
+',' Punctuation
+' ' Text
+'value_exp' Name
+',' Punctuation
+' ' Text
+'clauses' Name
+' ' Text
+'=' Operator
+' ' Text
+'unpack' Name
+' ' Text
+'node' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'accum' Name
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'t' Literal.String
+'b' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'dest' Name
+' ' Text
+'=' Operator
+' ' Text
+'build' Name
+'.' Operator
+'chain' Name
+' ' Text
+'{' Keyword.Type
+' ' Text
+'base:' Name.Variable
+' ' Text
+'accum' Name
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'i' Literal.String
+'n' Literal.String
+'d' Literal.String
+'e' Literal.String
+'x' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'key_exp' Name
+'}' Keyword.Type
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'inner' Name
+' ' Text
+'=' Operator
+' ' Text
+'build' Name
+'.' Operator
+'assign_one' Name
+' ' Text
+'dest' Name
+',' Punctuation
+' ' Text
+'value_exp' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'block_exp' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign_one' Name
+' ' Text
+'accum' Name
+',' Punctuation
+' ' Text
+'build' Name
+'.' Operator
+'table' Name
+'!' Operator
+'\n' Text
+
+' ' Text
+'construct_comprehension' Name
+' ' Text
+'{' Keyword.Type
+'inner' Name
+'}' Keyword.Type
+',' Punctuation
+' ' Text
+'clauses' Name
+'\n' Text
+
+' ' Text
+'accum' Name
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'fndef:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'smart_node' Name
+' ' Text
+'node' Name
+'\n' Text
+
+' ' Text
+'node' Name
+'.' Operator
+'body' Name
+' ' Text
+'=' Operator
+' ' Text
+'apply_to_last' Name
+' ' Text
+'node' Name
+'.' Operator
+'body' Name
+',' Punctuation
+' ' Text
+'implicitly_return' Name
+' ' Text
+'self' Name.Builtin.Pseudo
+'\n' Text
+
+' ' Text
+'node' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'if:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+' ' Text
+'build' Name
+'.' Operator
+'block_exp' Name
+' ' Text
+'{' Keyword.Type
+' ' Text
+'node' Name
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'with:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+' ' Text
+'build' Name
+'.' Operator
+'block_exp' Name
+' ' Text
+'{' Keyword.Type
+' ' Text
+'node' Name
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'switch:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'block_exp' Name
+' ' Text
+'{' Keyword.Type
+' ' Text
+'node' Name
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'-- pull out colon chain' Comment.Single
+'\n' Text
+
+' ' Text
+'chain:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'stub' Name
+' ' Text
+'=' Operator
+' ' Text
+'node' Name
+'[' Keyword.Type
+'#' Operator
+'node' Name
+']' Keyword.Type
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'type' Name.Builtin
+'(' Keyword.Type
+'stub' Name
+')' Keyword.Type
+' ' Text
+'==' Operator
+' ' Text
+'"' Literal.String.Double
+'t' Literal.String
+'a' Literal.String
+'b' Literal.String
+'l' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+' ' Text
+'and' Keyword
+' ' Text
+'stub' Name
+'[' Keyword.Type
+'1' Literal.Number.Integer
+']' Keyword.Type
+' ' Text
+'==' Operator
+' ' Text
+'"' Literal.String.Double
+'c' Literal.String
+'o' Literal.String
+'l' Literal.String
+'o' Literal.String
+'n' Literal.String
+'_' Literal.String
+'s' Literal.String
+'t' Literal.String
+'u' Literal.String
+'b' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'table.remove' Name.Builtin
+' ' Text
+'node' Name
+',' Punctuation
+' ' Text
+'#' Operator
+'node' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'base_name' Name
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'b' Literal.String
+'a' Literal.String
+'s' Literal.String
+'e' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'fn_name' Name
+' ' Text
+'=' Operator
+' ' Text
+'NameProxy' Name.Class
+' ' Text
+'"' Literal.String.Double
+'f' Literal.String
+'n' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'is_super' Name
+' ' Text
+'=' Operator
+' ' Text
+'node' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+' ' Text
+'==' Operator
+' ' Text
+'"' Literal.String.Double
+'s' Literal.String
+'u' Literal.String
+'p' Literal.String
+'e' Literal.String
+'r' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'@transform' Name.Variable.Class
+'.' Operator
+'value' Name
+' ' Text
+'build' Name
+'.' Operator
+'block_exp' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'names:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'base_name' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'values:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'node' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'assign' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'names:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'fn_name' Name
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'values:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'chain' Name
+' ' Text
+'{' Keyword.Type
+' ' Text
+'base:' Name.Variable
+' ' Text
+'base_name' Name
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'d' Literal.String
+'o' Literal.String
+'t' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'stub' Name
+'[' Keyword.Type
+'2' Literal.Number.Integer
+']' Keyword.Type
+'}' Keyword.Type
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'fndef' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'args:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'{' Keyword.Type
+'"' Literal.String.Double
+'.' Literal.String
+'.' Literal.String
+'.' Literal.String
+'"' Literal.String.Double
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'body:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'chain' Name
+' ' Text
+'{' Keyword.Type
+'\n' Text
+
+' ' Text
+'base:' Name.Variable
+' ' Text
+'fn_name' Name
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'c' Literal.String
+'a' Literal.String
+'l' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'is_super' Name
+' ' Text
+'and' Keyword
+' ' Text
+'"' Literal.String.Double
+'s' Literal.String
+'e' Literal.String
+'l' Literal.String
+'f' Literal.String
+'"' Literal.String.Double
+' ' Text
+'or' Keyword
+' ' Text
+'base_name' Name
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'.' Literal.String
+'.' Literal.String
+'.' Literal.String
+'"' Literal.String.Double
+'}' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'block_exp:' Name.Variable
+' ' Text
+'(' Keyword.Type
+'node' Name
+')' Keyword.Type
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'_' Name
+',' Punctuation
+' ' Text
+'body' Name
+' ' Text
+'=' Operator
+' ' Text
+'unpack' Name
+' ' Text
+'node' Name
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'fn' Name
+' ' Text
+'=' Operator
+' ' Text
+'nil' Keyword.Constant
+'\n' Text
+
+' ' Text
+'arg_list' Name
+' ' Text
+'=' Operator
+' ' Text
+'{' Keyword.Type
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'insert' Name
+' ' Text
+'body' Name
+',' Punctuation
+' ' Text
+'Run' Name.Class
+' ' Text
+'=>' Name.Function
+'\n' Text
+
+' ' Text
+'if' Keyword
+' ' Text
+'@has_varargs' Name.Variable.Class
+'\n' Text
+
+' ' Text
+'insert' Name
+' ' Text
+'arg_list' Name
+',' Punctuation
+' ' Text
+'"' Literal.String.Double
+'.' Literal.String
+'.' Literal.String
+'.' Literal.String
+'"' Literal.String.Double
+'\n' Text
+
+' ' Text
+'insert' Name
+' ' Text
+'fn' Name
+'.' Operator
+'args' Name
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'.' Literal.String
+'.' Literal.String
+'.' Literal.String
+'"' Literal.String.Double
+'}' Keyword.Type
+'\n' Text
+
+'\n' Text
+
+' ' Text
+'fn' Name
+' ' Text
+'=' Operator
+' ' Text
+'smart_node' Name
+' ' Text
+'build' Name
+'.' Operator
+'fndef' Name
+' ' Text
+'body:' Name.Variable
+' ' Text
+'body' Name
+'\n' Text
+
+' ' Text
+'build' Name
+'.' Operator
+'chain' Name
+' ' Text
+'{' Keyword.Type
+' ' Text
+'base:' Name.Variable
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'p' Literal.String
+'a' Literal.String
+'r' Literal.String
+'e' Literal.String
+'n' Literal.String
+'s' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'fn' Name
+'}' Keyword.Type
+',' Punctuation
+' ' Text
+'{' Keyword.Type
+'"' Literal.String.Double
+'c' Literal.String
+'a' Literal.String
+'l' Literal.String
+'l' Literal.String
+'"' Literal.String.Double
+',' Punctuation
+' ' Text
+'arg_list' Name
+'}' Keyword.Type
+' ' Text
+'}' Keyword.Type
+'\n' Text
+
+'}' Keyword.Type
+'\n' Text