(List (Com {[LIT_CHARS source]} {[ComSub (Com {[LIT_CHARS dirname]} {[VarSub 0]})] [LIT_CHARS /reader.sh]} ) (Com {[LIT_CHARS source]} {[ComSub (Com {[LIT_CHARS dirname]} {[VarSub 0]})] [LIT_CHARS /printer.sh]} ) (FunctionDef READ [] (List (AndOr OP_AND_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub 1]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('r', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS READLINE]} ) ) ) (Com {[LIT_CHARS READ_STR]} {[DQ [VarSub r]]} ) ) ) (FunctionDef EVAL_AST [] (List (= scope= flags=0 words=[] bindings=[('ast', {[DQ [VarSub 1]]}), ('env', {[DQ [VarSub 2]]})]) (Com {[LIT_CHARS _obj_type]} {[DQ [VarSub ast]]} ) (= scope= flags=0 words=[] bindings=[('ot', {[DQ [VarSub r]]})]) (Case to_match={[DQ [VarSub ot]]}, pat_word_list=[[{[LIT_CHARS symbol]}], [{[LIT_CHARS list]}], [{[LIT_CHARS vector]}], [{[LIT_CHARS hash_map]}], [{[LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('val', {[DQ [VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub ast]]}})]]})]) (Com {[LIT_CHARS eval]} {[LIT_VAR_LIKE "r="] [DQ [\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{"][VarSub env][LIT_CHARS "["]] [VarSub val] [DQ [LIT_CHARS "]}"]] =} ) (AndOr OP_OR_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub r]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS _error]} {[DQ [LIT_CHARS "'"][VarSub val][LIT_CHARS "' not found"]]} ) ) ) (Com {[LIT_CHARS _map_with_type]} {[LIT_CHARS _list]} {[LIT_CHARS EVAL]} {[DQ [VarSub ast]]} {[DQ [VarSub env]]} ) (Com {[LIT_CHARS _map_with_type]} {[LIT_CHARS _vector]} {[LIT_CHARS EVAL]} {[DQ [VarSub ast]]} {[DQ [VarSub env]]} ) (List (= scope= flags=0 words=[] bindings=[('res', {[DQ ]}), ('key', {[SQ ]}), ('val', {[DQ ]}), ('hm', {[DQ [VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub ast]]}})]]})]) (Com {[LIT_CHARS _hash_map]} ) (= scope= flags=0 words=[] bindings=[('new_hm', {[DQ [VarSub r]]})]) (Com {[LIT_CHARS eval]} {[LIT_CHARS local]} {[LIT_VAR_LIKE "keys="] [DQ [\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{!"][VarSub hm][LIT_CHARS "[@]}"]] =} ) (For key [{[VarSub keys]}]) (List (Com {[LIT_CHARS eval]} {[LIT_VAR_LIKE "val="] [DQ [\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{"][VarSub hm][LIT_CHARS "["][\ LIT_ESCAPED_CHAR "\\\""][VarSub key][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS "]}"]] =} ) (Com {[LIT_CHARS EVAL]} {[DQ [VarSub val]]} {[DQ [VarSub env]]} ) (Com {[LIT_CHARS _assoc] [LIT_OTHER "!"]} {[DQ [VarSub new_hm]]} {[DQ [VarSub key]]} {[DQ [VarSub r]]} ) ) ) (= scope= flags=0 words=[] bindings=[('r', {[DQ [VarSub new_hm]]})]) ) (= scope= flags=0 words=[] bindings=[('r', {[DQ [VarSub ast]]})]) ) ) ) (FunctionDef EVAL [] (List (= scope= flags=0 words=[] bindings=[('ast', {[DQ [VarSub 1]]}), ('env', {[DQ [VarSub 2]]})]) (= scope= flags=0 words=[] bindings=[('r', {[SQ ]})]) (AndOr OP_AND_IF (DBracket {B1 UNARY_STRING_n {[DQ [VarSub __ERROR]]}}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) (Com {[LIT_CHARS _obj_type]} {[DQ [VarSub ast]]} ) (= scope= flags=0 words=[] bindings=[('ot', {[DQ [VarSub r]]})]) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[DQ [VarSub ot]]} {[DQ [LIT_CHARS list]]}}) (List (Com {[LIT_CHARS EVAL_AST]} {[DQ [VarSub ast]]} {[DQ [VarSub env]]} ) (Com {[LIT_CHARS return]} ) ) ) (Com {[LIT_CHARS EVAL_AST]} {[DQ [VarSub ast]]} {[DQ [VarSub env]]} ) (AndOr OP_AND_IF (DBracket {B1 UNARY_STRING_n {[DQ [VarSub __ERROR]]}}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) (= scope= flags=0 words=[] bindings=[('el', {[DQ [VarSub r]]})]) (Com {[LIT_CHARS _first]} {[DQ [VarSub el]]} ) (= scope= flags=0 words=[] bindings=[('f', {[DQ [VarSub r]]})]) (Com {[LIT_CHARS _rest]} {[DQ [VarSub el]]} ) (= scope= flags=0 words=[] bindings=[('args', {[DQ [VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub r]]}})]]})]) (Com {[LIT_CHARS eval]} {[VarSub f]} {[VarSub args]} ) ) ) (FunctionDef PRINT [] (If (DBracket {B1 UNARY_STRING_n {[DQ [VarSub __ERROR]]}}) (List (Com {[LIT_CHARS _pr_str]} {[DQ [VarSub __ERROR]]} {[LIT_CHARS yes]} ) (= scope= flags=0 words=[] bindings=[('r', {[DQ [LIT_CHARS "Error: "][VarSub r]]})]) (= scope= flags=0 words=[] bindings=[('__ERROR', {[SQ ]})]) ) (ElseTrue) (Com {[LIT_CHARS _pr_str]} {[DQ [VarSub 1]]} {[LIT_CHARS yes]} ) ) ) (= scope= flags=0 words=[{[LIT_CHARS -A]}, {[LIT_CHARS REPL_ENV]}] bindings=[]) (FunctionDef REP [] (List (= scope= flags=0 words=[] bindings=[('r', {[SQ ]})]) (Com {[LIT_CHARS READ]} {[DQ [VarSub 1]]} ) (Com {[LIT_CHARS EVAL]} {[DQ [VarSub r]]} {[LIT_CHARS REPL_ENV]} ) (Com {[LIT_CHARS PRINT]} {[DQ [VarSub r]]} ) ) ) (FunctionDef plus [] (List (= scope= flags=0 words=[] bindings=[('r', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub 1]]}})]}} {A Atom NODE_ARITH_WORD {[VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub 2]]}})]}}}]})]) (Com {[LIT_CHARS _number]} {[DQ [VarSub r]]} ) ) ) (FunctionDef minus [] (List (= scope= flags=0 words=[] bindings=[('r', {[ArithSub {A2 AS_OP_MINUS {A Atom NODE_ARITH_WORD {[VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub 1]]}})]}} {A Atom NODE_ARITH_WORD {[VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub 2]]}})]}}}]})]) (Com {[LIT_CHARS _number]} {[DQ [VarSub r]]} ) ) ) (FunctionDef multiply [] (List (= scope= flags=0 words=[] bindings=[('r', {[ArithSub {A2 AS_OP_STAR {A Atom NODE_ARITH_WORD {[VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub 1]]}})]}} {A Atom NODE_ARITH_WORD {[VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub 2]]}})]}}}]})]) (Com {[LIT_CHARS _number]} {[DQ [VarSub r]]} ) ) ) (FunctionDef divide [] (List (= scope= flags=0 words=[] bindings=[('r', {[ArithSub {A2 AS_OP_SLASH {A Atom NODE_ARITH_WORD {[VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub 1]]}})]}} {A Atom NODE_ARITH_WORD {[VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub 2]]}})]}}}]})]) (Com {[LIT_CHARS _number]} {[DQ [VarSub r]]} ) ) ) (Com {[LIT_CHARS REPL_ENV] [LIT_DBRACKET_LIKE "["] [DQ [LIT_CHARS "+"]] [LIT_DBRACKET_LIKE "]="] [LIT_CHARS plus]} ) (Com {[LIT_CHARS REPL_ENV] [LIT_DBRACKET_LIKE "["] [DQ [LIT_CHARS -]] [LIT_DBRACKET_LIKE "]="] [LIT_CHARS minus]} ) (Com {[LIT_CHARS REPL_ENV] [LIT_DBRACKET_LIKE "["] [DQ [LIT_CHARS __STAR__]] [LIT_DBRACKET_LIKE "]="] [LIT_CHARS multiply]} ) (Com {[LIT_CHARS REPL_ENV] [LIT_DBRACKET_LIKE "["] [DQ [LIT_CHARS /]] [LIT_DBRACKET_LIKE "]="] [LIT_CHARS divide]} ) (While (Com {[LIT_CHARS true]} ) (List (AndOr OP_OR_IF (Com {[LIT_CHARS READLINE]} {[DQ [LIT_CHARS "user> "]]} ) (Com {[LIT_CHARS exit]} {[DQ [VarSub ?]]} ) ) (AndOr OP_AND_IF (DBracket {B1 UNARY_STRING_n {[DQ [VarSub r]]}}) (AndOr OP_AND_IF (Com {[LIT_CHARS REP]} {[DQ [VarSub r]]} ) (Com {[LIT_CHARS echo]} {[DQ [VarSub r]]} ) ) ) ) ) )