(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]} ) (Com {[LIT_CHARS source]} {[ComSub (Com {[LIT_CHARS dirname]} {[VarSub 0]})] [LIT_CHARS /env.sh]} ) (Com {[LIT_CHARS source]} {[ComSub (Com {[LIT_CHARS dirname]} {[VarSub 0]})] [LIT_CHARS /core.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 (Com {[LIT_CHARS ENV_GET]} {[DQ [VarSub env]]} {[DQ [VarSub ast]]} ) (Com {[LIT_CHARS return]} ) ) (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]]})]) (While (Com {[LIT_CHARS true]} ) (List (= 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 _nth]} {[DQ [VarSub ast]]} {[LIT_CHARS 0]} ) (= scope= flags=0 words=[] bindings=[('a0', {[DQ [VarSub r]]})]) (Com {[LIT_CHARS _nth]} {[DQ [VarSub ast]]} {[LIT_CHARS 1]} ) (= scope= flags=0 words=[] bindings=[('a1', {[DQ [VarSub r]]})]) (Com {[LIT_CHARS _nth]} {[DQ [VarSub ast]]} {[LIT_CHARS 2]} ) (= scope= flags=0 words=[] bindings=[('a2', {[DQ [VarSub r]]})]) (Case to_match={[DQ [VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub a0]]}})]]}, pat_word_list=[[{[LIT_CHARS def] [LIT_OTHER "!"]}], [{[LIT_CHARS let] [LIT_OTHER "*"]}], [{[LIT_CHARS do]}], [{[LIT_CHARS if]}], [{[LIT_CHARS fn] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (List (Com {[LIT_CHARS EVAL]} {[DQ [VarSub a2]]} {[DQ [VarSub env]]} ) (AndOr OP_AND_IF (DBracket {B1 UNARY_STRING_n {[DQ [VarSub __ERROR]]}}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) (Com {[LIT_CHARS ENV_SET]} {[DQ [VarSub env]]} {[DQ [VarSub a1]]} {[DQ [VarSub r]]} ) (Com {[LIT_CHARS return]} ) ) (List (Com {[LIT_CHARS ENV]} {[DQ [VarSub env]]} ) (= scope= flags=0 words=[] bindings=[('let_env', {[DQ [VarSub r]]})]) (= scope= flags=0 words=[] bindings=[('let_pairs', {[Array {[VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub a1]]}})]}]})]) (= scope= flags=0 words=[] bindings=[('idx', {[LIT_CHARS 0]})]) (While (DBracket {B1 UNARY_STRING_n {[DQ [VarSub let_pairs bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub idx]]}})]]}}) (List (Com {[LIT_CHARS EVAL]} {[DQ [VarSub let_pairs bracket_op=(Index {A Atom NODE_ARITH_WORD {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub idx]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]}})]]} {[DQ [VarSub let_env]]} ) (Com {[LIT_CHARS ENV_SET]} {[DQ [VarSub let_env]]} {[DQ [VarSub let_pairs bracket_op=(Index {A Atom NODE_ARITH_WORD {[VarSub idx]}})]]} {[DQ [VarSub r]]} ) (= scope= flags=0 words=[] bindings=[('idx', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub idx]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 2]}}}]})]) ) ) (= scope= flags=0 words=[] bindings=[('ast', {[DQ [VarSub a2]]})]) (= scope= flags=0 words=[] bindings=[('env', {[DQ [VarSub let_env]]})]) ) (List (Com {[LIT_CHARS _count]} {[DQ [VarSub ast]]} ) (Com {[LIT_CHARS _slice]} {[DQ [VarSub ast]]} {[LIT_CHARS 1]} {[ArithSub {A2 AS_OP_MINUS {A Atom NODE_ARITH_WORD {[VarSub r]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 2]}}}]} ) (Com {[LIT_CHARS EVAL_AST]} {[DQ [VarSub r]]} {[DQ [VarSub env]]} ) (AndOr OP_AND_IF (DBracket {B1 UNARY_STRING_n {[DQ [VarSub __ERROR]]}}) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('r', {[SQ ]})]) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) (Com {[LIT_CHARS _last]} {[DQ [VarSub ast]]} ) (= scope= flags=0 words=[] bindings=[('ast', {[DQ [VarSub r]]})]) ) (List (Com {[LIT_CHARS EVAL]} {[DQ [VarSub a1]]} {[DQ [VarSub env]]} ) (AndOr OP_AND_IF (DBracket {B1 UNARY_STRING_n {[DQ [VarSub __ERROR]]}}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) (If (DBracket {B? LOGICAL_BINARY_OR {B2 BINARY_STRING_EQUAL {[DQ [VarSub r]]} {[DQ [VarSub __false]]}} {B2 BINARY_STRING_EQUAL {[DQ [VarSub r]]} {[DQ [VarSub __nil]]}}}) (List (Com {[LIT_CHARS _nth]} {[DQ [VarSub ast]]} {[LIT_CHARS 3]} ) (= scope= flags=0 words=[] bindings=[('a3', {[DQ [VarSub r]]})]) (If (DBracket {B1 UNARY_STRING_n {[DQ [VarSub a3]]}}) (= scope= flags=0 words=[] bindings=[('ast', {[DQ [VarSub a3]]})]) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('r', {[DQ [VarSub __nil]]})]) (Com {[LIT_CHARS return]} ) ) ) ) (ElseTrue) (= scope= flags=0 words=[] bindings=[('ast', {[DQ [VarSub a2]]})]) ) ) (List (Com {[LIT_CHARS _function]} {[DQ [LIT_CHARS "ENV "][\ LIT_ESCAPED_CHAR "\\\""][VarSub env][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS " "][\ LIT_ESCAPED_CHAR "\\\""][VarSub a1][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS " "][\ LIT_ESCAPED_CHAR "\\\""][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{@}"][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS "; "][LIT_CHARS " EVAL "][\ LIT_ESCAPED_CHAR "\\\""][VarSub a2][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS " "][\ LIT_ESCAPED_CHAR "\\\""][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{r}"][\ LIT_ESCAPED_CHAR "\\\""]]} {[DQ [VarSub a2]]} {[DQ [VarSub env]]} {[DQ [VarSub a1]]} ) (Com {[LIT_CHARS return]} ) ) (List (Com {[LIT_CHARS EVAL_AST]} {[DQ [VarSub ast]]} {[DQ [VarSub env]]} ) (AndOr OP_AND_IF (DBracket {B1 UNARY_STRING_n {[DQ [VarSub __ERROR]]}}) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('r', {[SQ ]})]) (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 ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[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]]}})]]})]) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[DQ [VarSub f transform_ops=[PatSub {[LIT_CHARS "@"]} {[LIT_CHARS " "]} do_all]]]} {[DQ [VarSub f]]}}) (List (Com {[LIT_CHARS set]} {[LIT_CHARS --]} {[VarSub f transform_ops=[PatSub {[LIT_CHARS "@"]} {[LIT_CHARS " "]} do_all]]} ) (= scope= flags=0 words=[] bindings=[('ast', {[DQ [VarSub 2]]})]) (Com {[LIT_CHARS ENV]} {[DQ [VarSub 3]]} {[DQ [VarSub 4]]} {[VarSub args]} ) (= scope= flags=0 words=[] bindings=[('env', {[DQ [VarSub r]]})]) ) (ElseTrue) (List (Com {[LIT_CHARS eval]} {[VarSub f transform_ops=[VS_UNARY_DPERCENT {[LIT_CHARS "@*"]}]]} {[VarSub args]} ) (Com {[LIT_CHARS return]} ) ) ) ) ) ) ) ) ) (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]} ) ) ) (Com {[LIT_CHARS ENV]} ) (= scope= flags=0 words=[] bindings=[('REPL_ENV', {[DQ [VarSub r]]})]) (FunctionDef REP [] (List (= scope= flags=0 words=[] bindings=[('r', {[SQ ]})]) (Com {[LIT_CHARS READ]} {[DQ [VarSub 1]]} ) (Com {[LIT_CHARS EVAL]} {[DQ [VarSub r]]} {[DQ [VarSub REPL_ENV]]} ) (Com {[LIT_CHARS PRINT]} {[DQ [VarSub r]]} ) ) ) (FunctionDef _fref [] (List (Com {[LIT_CHARS _symbol]} {[DQ [VarSub 1]]} ) (= scope= flags=0 words=[] bindings=[('sym', {[DQ [VarSub r]]})]) (Com {[LIT_CHARS _function]} {[DQ [VarSub 2][LIT_CHARS " "][\ LIT_ESCAPED_CHAR "\\\""][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{@}"][\ LIT_ESCAPED_CHAR "\\\""]]} ) (Com {[LIT_CHARS ENV_SET]} {[DQ [VarSub REPL_ENV]]} {[DQ [VarSub sym]]} {[DQ [VarSub r]]} ) ) ) (For n [{[DQ [VarSub core_ns bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}}) transform_ops=[(!ref)]]]}]) (Com {[LIT_CHARS _fref]} {[DQ [VarSub n]]} {[DQ [VarSub core_ns bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub n]]}})]]} ) ) (Com {[LIT_CHARS REP]} {[DQ [LIT_CHARS "(def! not (fn* (a) (if a false true)))"]]} ) (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]]} ) ) ) ) ) )