(If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -z]} {[DQ [VarSub __mal_env_included__]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (= scope= flags=0 words=[] bindings=[('__mal_env_included', {[LIT_CHARS true]})]) (Com {[LIT_CHARS source]} {[ComSub (Com {[LIT_CHARS dirname]} {[VarSub 0]})] [LIT_CHARS /types.sh]} ) (FunctionDef ENV [] (List (= scope= flags=0 words=[] bindings=[('r', {[SQ ]})]) (Com {[LIT_CHARS _hash_map]} ) (= scope= flags=0 words=[] bindings=[('env', {[DQ [VarSub r]]})]) (If (DBracket {B1 UNARY_STRING_n {[DQ [VarSub 1]]}}) (List (= scope= flags=0 words=[] bindings=[('outer', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]} ) (Com {[LIT_CHARS _assoc] [LIT_OTHER "!"]} {[DQ [VarSub env]]} {[DQ [LIT_CHARS __outer__]]} {[DQ [VarSub outer]]} ) ) (ElseTrue) (Com {[LIT_CHARS _assoc] [LIT_OTHER "!"]} {[DQ [VarSub env]]} {[DQ [LIT_CHARS __outer__]]} {[DQ [VarSub __nil]]} ) ) (= scope= flags=0 words=[] bindings=[('r', {[DQ [VarSub env]]})]) (If (DBracket {B? LOGICAL_BINARY_AND {B1 UNARY_STRING_n {[DQ [VarSub 1]]}} {B1 UNARY_STRING_n {[DQ [VarSub @]]}}}) (List (= scope= flags=0 words=[] bindings=[('binds', {[Array {[VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub 1]]}})]}]})]) (Com {[LIT_CHARS shift]} ) (= scope= flags=0 words=[] bindings=[('idx', {[LIT_CHARS 0]})]) (While (DBracket {B1 UNARY_STRING_n {[DQ [VarSub binds bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub idx]]}})]]}}) (List (= scope= flags=0 words=[] bindings=[('fp', {[DQ [VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub binds bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub idx]]}})]]}})]]})]) (If (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub fp]]} {[DQ [LIT_CHARS "&"]]}}) (List (= 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 1]}}}]})]) (= scope= flags=0 words=[] bindings=[('fp', {[DQ [VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub binds bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub idx]]}})]]}})]]})]) (Com {[LIT_CHARS _list]} {[DQ [VarSub @]]} ) (Com {[LIT_CHARS _assoc] [LIT_OTHER "!"]} {[DQ [VarSub env]]} {[DQ [VarSub fp]]} {[DQ [VarSub r]]} ) (Com {[LIT_CHARS break]} ) ) (ElseTrue) (List (Com {[LIT_CHARS _assoc] [LIT_OTHER "!"]} {[DQ [VarSub env]]} {[DQ [VarSub fp]]} {[DQ [VarSub 1]]} ) (Com {[LIT_CHARS shift]} ) (= 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 1]}}}]})]) ) ) ) ) ) ) (= scope= flags=0 words=[] bindings=[('r', {[DQ [VarSub env]]})]) ) ) (FunctionDef ENV_FIND [] (If (Com {[LIT_CHARS _contains] [LIT_OTHER "?"]} {[DQ [VarSub 1]]} {[DQ [VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub 2]]}})]]} ) (= scope= flags=0 words=[] bindings=[('r', {[DQ [VarSub 1]]})]) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('obj', {[DQ [VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub 1]]}})]]})]) (Com {[LIT_CHARS eval]} {[LIT_CHARS local]} {[LIT_VAR_LIKE "outer="] [DQ [\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{"][VarSub obj][LIT_CHARS "["]] [LIT_CHARS __outer__] [DQ [LIT_CHARS "]}"]] =} ) (If (DBracket {B? LOGICAL_BINARY_AND {B1 UNARY_STRING_n {[DQ [VarSub outer]]}} {B2 BINARY_STRING_NOT_EQUAL {[DQ [VarSub outer]]} {[DQ [VarSub __nil]]}}}) (Com {[LIT_CHARS ENV_FIND]} {[DQ [VarSub outer]]} {[DQ [VarSub 2]]} ) (ElseTrue) (= scope= flags=0 words=[] bindings=[('r', {[SQ ]})]) ) ) ) ) (FunctionDef ENV_GET [] (List (Com {[LIT_CHARS ENV_FIND]} {[DQ [VarSub 1]]} {[DQ [VarSub 2]]} ) (= scope= flags=0 words=[] bindings=[('env', {[DQ [VarSub r]]})]) (= scope= flags=0 words=[] bindings=[('key', {[DQ [VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub 2]]}})]]})]) (If (DBracket {B1 UNARY_STRING_n {[DQ [VarSub r]]}}) (List (= scope= flags=0 words=[] bindings=[('obj', {[DQ [VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub env]]}})]]})]) (Com {[LIT_CHARS eval]} {[LIT_VAR_LIKE "r="] [DQ [\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{"][VarSub obj][LIT_CHARS "["]] [VarSub key] [DQ [LIT_CHARS "]}"]] =} ) ) (ElseTrue) (Com {[LIT_CHARS _error]} {[DQ [LIT_CHARS "'"][VarSub key][LIT_CHARS "' not found"]]} ) ) ) ) (FunctionDef ENV_SET [] (List (= scope= flags=0 words=[] bindings=[('key', {[DQ [VarSub ANON bracket_op=(Index {A Atom NODE_ARITH_WORD {[DQ [VarSub 2]]}})]]})]) (Com {[LIT_CHARS _assoc] [LIT_OTHER "!"]} {[DQ [VarSub 1]]} {[DQ [VarSub key]]} {[DQ [VarSub 3]]} ) ) ) ) )