(List (FunctionDef balls::define_route [] (List (= scope= flags=0 words=[] bindings=[('verb', {[VarSub 1]})]) (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('path', {[VarSub 1]})]) (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('action', {[VarSub 1]})]) (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('route_line', {[DQ [ComSub (Com {[LIT_CHARS echo]} {[LIT_CHARS -e]} {[DQ [VarSub verb][\ LIT_ESCAPED_CHAR "\\t"][VarSub path][\ LIT_ESCAPED_CHAR "\\t"][VarSub action]]})]]})]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub ROUTES]]} {[LIT_OTHER "]"]}) (= scope= flags=0 words=[] bindings=[('ROUTES', {[DQ [VarSub route_line]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('ROUTES', {[DQ [VarSub ROUTES][LIT_CHARS "\n"][VarSub route_line]]})]) ) ) ) (FunctionDef b:GET [] (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS define_route]} {[LIT_CHARS GET]} {[DQ [VarSub @]]}) ) (FunctionDef b:POST [] (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS define_route]} {[LIT_CHARS POST]} {[DQ [VarSub @]]}) ) (FunctionDef b:PUT [] (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS define_route]} {[LIT_CHARS PUT]} {[DQ [VarSub @]]}) ) (FunctionDef b:DELETE [] (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS define_route]} {[LIT_CHARS DELETE]} {[DQ [VarSub @]]}) ) (FunctionDef balls::route [] (List (AndOr OP_AND_IF (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub BALLS_RELOAD]]} {[LIT_CHARS 1]}}) (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS load_app]}) ) (AndOr OP_AND_IF (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub REQUEST_METHOD]]} {[DQ [LIT_CHARS HEAD]]}}) (= scope= flags=0 words=[] bindings=[('body_sock', {[LIT_CHARS /dev/null]})]) ) (= scope= flags=0 words=[] bindings=[('action', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub ROUTES]]}) (Com {[LIT_CHARS grep]} {[DQ [LIT_CHARS "^"][VarSub REQUEST_METHOD]]}) (While (Com {[LIT_CHARS read]} {[LIT_CHARS line]}) (List (= scope= flags=0 words=[] bindings=[('arr', {[Array {[VarSub line]}]})]) (= scope= flags=0 words=[] bindings=[('path', {[VarSub arr bracket_op=(Index {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}})]})]) (= scope= flags=0 words=[] bindings=[('act', {[VarSub arr bracket_op=(Index {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 2]}})]})]) (If (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub REQUEST_PATH]]} {[DQ [VarSub path]]}}) (List (Com {[LIT_CHARS echo]} {[VarSub act]}) (Com {[LIT_CHARS break]}) ) ) ) ) )]})]) (If (AndOr OP_AND_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -n]} {[DQ [VarSub action]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS exists]} {[DQ [VarSub action]]}) ) (List (= scope= flags=0 words=[] bindings=[('headers_sock', {[VarSub BALLS_TMP] [LIT_CHARS /balls.headers.] [ComSub (Com {[LIT_CHARS _hash]})] [LIT_CHARS .sock]})]) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -p]} {[VarSub headers_sock]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS mkfifo]} {[VarSub headers_sock]}) ) (Pipeline (Subshell (Com {[VarSub action]} < (FilenameRedirectNode filename={[VarSub headers_sock]} "> 3), > ) ) (List (= scope= flags=0 words=[] bindings=[('headers', {[ComSub (Com redirects=[(FilenameRedirectNode filename={[VarSub headers_sock]} 0)]{[LIT_CHARS cat]})]})]) (= scope= flags=0 words=[] bindings=[('body', {[ComSub (Com {[LIT_CHARS cat]} {[LIT_CHARS -]})]})]) (= scope= flags=0 words=[] bindings=[('response', {[ComSub (List (Com {[LIT_CHARS echo]} {[DQ [VarSub headers]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Content-Length: "][VarSub body transform_ops=[(#len)]]]}) (Com {[LIT_CHARS echo]}) (Com {[LIT_CHARS echo]} {[DQ [VarSub body]]}) )]})]) (Com {[LIT_CHARS echo]} {[DQ [VarSub response]]}) ) ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub headers_sock]]}) ) (ElseTrue) (List (If (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub REQUEST_METHOD]]} {[DQ [LIT_CHARS HEAD]]}}) (List (= scope= flags=0 words=[] bindings=[('REQUEST_METHOD', {[LIT_CHARS GET]})]) (Com {[LIT_CHARS balls] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS route]}) ) (ElseTrue) (List (Com {[LIT_CHARS http] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS status]} {[LIT_CHARS 404]} < (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 3), > ) (Com {[LIT_CHARS http] [LIT_OTHER ":"] [LIT_OTHER ":"] [LIT_CHARS content_type]} {[LIT_CHARS text/plain]} < (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 3), > ) (Com {[LIT_CHARS echo]}) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "No route matched "][VarSub REQUEST_METHOD][LIT_CHARS " "][VarSub REQUEST_PATH]]}) (Com {[LIT_CHARS echo]}) ) ) ) ) )