(command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} { (braced_var_sub token: <Id.VSub_Name PARSER_SH> suffix_op: (suffix_op.Unary op_id:Id.VTest_Plus arg_word:{<true>}) ) } {<Id.Lit_RBracket ']'>} ) (command.ControlFlow token:<Id.ControlFlow_Return return>) ] ) (C {<declare>} {<-g>} {<Id.Lit_VarLike 'PARSER_SH='> <true>}) (C {<.>} { (braced_var_sub token: <Id.VSub_Name BASH_SOURCE> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash /> <'*'>}) ) </common.sh> } ) (C {<.>} { (braced_var_sub token: <Id.VSub_Name BASH_SOURCE> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash /> <'*'>}) ) </variables.sh> } ) (C {<.>} { (braced_var_sub token: <Id.VSub_Name BASH_SOURCE> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash /> <'*'>}) ) </variables.linkedlist.sh> } ) (C {<declare>} {<-g>} {<Id.Lit_VarLike 'PARSER_DEBUG='> <0>}) (C {<declare>} {<-g>} {<PARSER_PARSED>}) (C {<declare>} {<-g>} {<PARSER_PARSED_COUNT>}) (command.ShFunction name: 'parser::parse' body: (command.BraceGroup children: [ (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <substring> } {(DQ (${ Id.VSub_At '@'))} ) ] ) ) (command.ShFunction name: 'parser::parse::multiExpression' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} {(DQ (${ Id.VSub_Name FUNCNAME) <' '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [136 151] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'text='> (DQ (${ Id.VSub_Number 1))}) (C {<declare>} {<Id.Lit_VarLike 'originalOffset='> (DQ (braced_var_sub token: <Id.VSub_Number 2> suffix_op: (suffix_op.Unary op_id:Id.VTest_Hyphen arg_word:{<0>}) ) ) } ) (C {<declare>} {<Id.Lit_VarLike 'offset='> ($ Id.VSub_DollarName '$originalOffset')}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} { (DQ <'Trying to parse multiExpr from:\n'> (braced_var_sub token: <Id.VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ Id.VSub_Name offset)}) ) ) ) } ) terminator: <Id.Op_Semi _> ) ] spids: [200 215] ) ] ) (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <new> } ) terminator: <Id.Op_Semi _> ) (C {<declare>} {<Id.Lit_VarLike 'items='> (DQ (${ Id.VSub_Name RESULT))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <whitespace> } {(DQ ($ Id.VSub_DollarName '$text'))} {(${ Id.VSub_Name offset)} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (sh_lhs_expr.Name name:offset) right: (arith_expr.ArithWord w:{(${ Id.VSub_Name PARSER_PARSED_COUNT)}) ) ) ] spids: [294 313] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ (${ Id.VSub_Name text))} {(${ Id.VSub_Name offset)} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <append> } {(DQ ($ Id.VSub_DollarName '$items'))} {(${ Id.VSub_Name PARSER_PARSED)} ) (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (sh_lhs_expr.Name name:offset) right: (arith_expr.ArithWord w:{(${ Id.VSub_Name PARSER_PARSED_COUNT)}) ) ) ] spids: [338 356] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name items))} spids: [397] ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) right: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike offset>) right: (arith_expr.VarRef token:<Id.Lit_ArithVarLike originalOffset>) ) ) ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: [(command.Sentence child:(C {<true>}) terminator:<Id.Op_Semi _>)] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <whitespace> } {(DQ ($ Id.VSub_DollarName '$text'))} {(${ Id.VSub_Name offset)} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name items))} spids: [474] ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) right: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike offset>) right: (arith_expr.VarRef token: <Id.Lit_ArithVarLike originalOffset> ) ) ) ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [446 467] ) ] ) (command.Sentence child: (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (sh_lhs_expr.Name name:offset) right: (arith_expr.ArithWord w:{(${ Id.VSub_Name PARSER_PARSED_COUNT)}) ) ) terminator: <Id.Op_Semi _> ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ (${ Id.VSub_Name text))} {(${ Id.VSub_Name offset)} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name items))} spids: [553] ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) right: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike offset>) right: (arith_expr.VarRef token: <Id.Lit_ArithVarLike originalOffset> ) ) ) ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [526 546] ) ] ) (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <append> } {(DQ ($ Id.VSub_DollarName '$items'))} {(DQ (${ Id.VSub_Name PARSER_PARSED))} ) (command.Sentence child: (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (sh_lhs_expr.Name name:offset) right: (arith_expr.ArithWord w:{(${ Id.VSub_Name PARSER_PARSED_COUNT)}) ) ) terminator: <Id.Op_Semi _> ) ] ) ) (C {<stderr>} {(DQ <'Should never get here'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (command.ShFunction name: 'parser::parse::substring' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} {(DQ (${ Id.VSub_Name FUNCNAME) <' '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [659 674] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'text='> (DQ (${ Id.VSub_Number 1))}) (C {<declare>} {<Id.Lit_VarLike 'offset='> (DQ (braced_var_sub token: <Id.VSub_Number 2> suffix_op: (suffix_op.Unary op_id:Id.VTest_Hyphen arg_word:{<0>}) ) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <atom> } {(DQ (${ Id.VSub_Name text))} {(DQ (${ Id.VSub_Name offset))} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name PARSER_PARSED))} spids: [747] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name PARSER_PARSED_COUNT))} spids: [755] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [717 740] ) (if_arm cond: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <sexp> } {(DQ (${ Id.VSub_Name text))} {(DQ (${ Id.VSub_Name offset))} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name PARSER_PARSED))} spids: [798] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name PARSER_PARSED_COUNT))} spids: [806] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [768 791] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>}) ] ) ) (command.ShFunction name: 'parser::parse::atom' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} {(DQ (${ Id.VSub_Name FUNCNAME) <' '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [851 866] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <real> } {(DQ (${ Id.VSub_Name text))} {(DQ (${ Id.VSub_Name offset))} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name PARSER_PARSED))} spids: [916] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name PARSER_PARSED_COUNT))} spids: [924] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [886 909] ) (if_arm cond: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <integer> } {(DQ (${ Id.VSub_Name text))} {(DQ (${ Id.VSub_Name offset))} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name PARSER_PARSED))} spids: [967] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name PARSER_PARSED_COUNT))} spids: [975] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [937 960] ) (if_arm cond: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <identifier> } {(DQ (${ Id.VSub_Name text))} {(DQ (${ Id.VSub_Name offset))} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name PARSER_PARSED))} spids: [1018] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name PARSER_PARSED_COUNT))} spids: [1026] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [988 1011] ) (if_arm cond: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <string> } {(DQ (${ Id.VSub_Name text))} {(DQ (${ Id.VSub_Name offset))} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name PARSER_PARSED))} spids: [1069] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name PARSER_PARSED_COUNT))} spids: [1077] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [1039 1062] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>}) ] ) ) (command.ShFunction name: 'parser::parse::real' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} {(DQ (${ Id.VSub_Name FUNCNAME) <' '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [1115 1130] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} { (DQ <'Trying to parse real from:\n'> (braced_var_sub token: <Id.VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ Id.VSub_Name offset)}) ) ) ) } ) terminator: <Id.Op_Semi _> ) ] spids: [1149 1164] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>}) ] ) ) (C {<declare>} {<-g>} {<Id.Lit_VarLike 'PARSER_INTEGER_REGEX='> (SQ <'\\(-\\?[1-9][0-9]*\\)'>)}) (C {<declare>} {<-g>} {<Id.Lit_VarLike 'PARSER_INTEGER_0_REGEX='> (SQ <'\\(0\\)'>)}) (command.ShFunction name: 'parser::parse::integer' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} {(DQ (${ Id.VSub_Name FUNCNAME) <' '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [1233 1248] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'text='> (DQ (${ Id.VSub_Number 1))}) (C {<declare>} {<Id.Lit_VarLike 'offset='> (DQ (braced_var_sub token: <Id.VSub_Number 2> suffix_op: (suffix_op.Unary op_id:Id.VTest_Hyphen arg_word:{<0>}) ) ) } ) (C {<declare>} {<Id.Lit_VarLike 'subtext='> (DQ (braced_var_sub token: <Id.VSub_Number 1> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ Id.VSub_Name offset)}) ) ) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} { (DQ <'Trying to parse integer from:\n'> (braced_var_sub token: <Id.VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ Id.VSub_Name offset)}) ) ) ) } ) terminator: <Id.Op_Semi _> ) ] spids: [1305 1320] ) ] ) (command.Sentence child:(C {<declare>} {<value>}) terminator:<Id.Op_Semi _>) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:value) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<expr>} {<match>} {(DQ (${ Id.VSub_Name subtext))} {($ Id.VSub_DollarName '$PARSER_INTEGER_REGEX')} ) ] ) ) } spids: [1347] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_QMark '$?')} right: {<0>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <new>} {<Integer>} {(DQ (${ Id.VSub_Name value))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [1393] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: <Id.VSub_Name value> prefix_op: (Id.VSub_Pound) ) ) } spids: [1401] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [1363 1376] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (braced_var_sub token: <Id.VSub_Name subtext> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) length: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) } right: {(DQ <0>)} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <new>} {<Integer>} {(DQ <0>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [1457] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) op: assign_op.Equal rhs: {<1>} spids: [1465] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [1419 1442] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>}) ] ) ) (C {<declare>} {<-g>} {<Id.Lit_VarLike 'PARSER_IDENTIFIER_REGEX='> (SQ <'\\([a-zA-Z!?*+<=>_:-][a-zA-Z0-9!?*+<=>_:-]*\\)'>) } ) (command.ShFunction name: 'parser::parse::identifier' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} {(DQ (${ Id.VSub_Name FUNCNAME) <' '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [1518 1533] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'text='> (DQ (${ Id.VSub_Number 1))}) (C {<declare>} {<Id.Lit_VarLike 'offset='> (DQ (braced_var_sub token: <Id.VSub_Number 2> suffix_op: (suffix_op.Unary op_id:Id.VTest_Hyphen arg_word:{<0>}) ) ) } ) (C {<declare>} {<Id.Lit_VarLike 'subtext='> (DQ (braced_var_sub token: <Id.VSub_Number 1> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ Id.VSub_Name offset)}) ) ) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} {(DQ <'Trying to parse identifier from:\n'> (${ Id.VSub_Name subtext))} ) terminator: <Id.Op_Semi _> ) ] spids: [1590 1605] ) ] ) (command.Sentence child:(C {<declare>} {<value>}) terminator:<Id.Op_Semi _>) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:value) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<expr>} {<match>} {(DQ (${ Id.VSub_Name subtext))} {($ Id.VSub_DollarName '$PARSER_IDENTIFIER_REGEX')} ) ] ) ) } spids: [1628] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_QMark '$?')} right: {<0>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <new>} {<Identifier>} {(DQ (${ Id.VSub_Name value))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [1674] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: <Id.VSub_Name value> prefix_op: (Id.VSub_Pound) ) ) } spids: [1682] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [1644 1657] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>}) ] ) ) (C {<declare>} {<-g>} {<Id.Lit_VarLike 'PARSER_STRING_REGEX='> (SQ <'\\([^"]*\\)'>)}) (command.ShFunction name: 'parser::parse::string' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} {(DQ (${ Id.VSub_Name FUNCNAME) <' '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [1740 1755] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'text='> (DQ (${ Id.VSub_Number 1))}) (C {<declare>} {<Id.Lit_VarLike 'offset='> (DQ (braced_var_sub token: <Id.VSub_Number 2> suffix_op: (suffix_op.Unary op_id:Id.VTest_Hyphen arg_word:{<0>}) ) ) } ) (C {<declare>} {<Id.Lit_VarLike 'subtext='> (DQ (braced_var_sub token: <Id.VSub_Number 1> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ Id.VSub_Name offset)}) ) ) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} {(DQ <'Trying to parse string from:\n'> (${ Id.VSub_Name subtext))} ) terminator: <Id.Op_Semi _> ) ] spids: [1812 1827] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (DQ (braced_var_sub token: <Id.VSub_Name subtext> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) length: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) } right: {(DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>))} ) ) terminator: <Id.Op_Semi _> ) ] action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>})] spids: [1844 1867] ) ] ) (command.Sentence child:(C {<declare>} {<value>}) terminator:<Id.Op_Semi _>) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:value) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<expr>} {<match>} { (DQ (braced_var_sub token: <Id.VSub_Name subtext> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) } {($ Id.VSub_DollarName '$PARSER_STRING_REGEX')} ) ] ) ) } spids: [1885] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: {($ Id.VSub_QMark '$?')} right: {<0>} ) ) terminator: <Id.Op_Semi _> ) ] action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>})] spids: [1903 1916] ) ] ) (C {<declare>} {<endIndex>}) (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (sh_lhs_expr.Name name:endIndex) right: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) right: (arith_expr.ArithWord w: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<expr>} {<length>} {(DQ (${ Id.VSub_Name value))})] ) ) } ) ) ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (DQ (braced_var_sub token: <Id.VSub_Name subtext> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ Id.VSub_Name endIndex)}) length: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) } right: {(DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>))} ) ) terminator: <Id.Op_Semi _> ) ] action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>})] spids: [1964 1989] ) ] ) (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <new>} {<String>} {(DQ (${ Id.VSub_Name value))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name RESULT))} spids: [2015] ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) right: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<expr>} {<length>} {(DQ (${ Id.VSub_Name value))})] ) ) } ) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 2>}) ) ) ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>}) ] ) ) (command.ShFunction name: 'parser::parse::sexp' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} {(DQ (${ Id.VSub_Name FUNCNAME) <' '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [2081 2096] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'text='> (DQ (${ Id.VSub_Number 1))}) (C {<declare>} {<Id.Lit_VarLike 'originalOffset='> (DQ (braced_var_sub token: <Id.VSub_Number 2> suffix_op: (suffix_op.Unary op_id:Id.VTest_Hyphen arg_word:{<0>}) ) ) } ) (C {<declare>} {<Id.Lit_VarLike 'offset='> ($ Id.VSub_DollarName '$originalOffset')}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} { (DQ <'Trying to parse sexp from:\n'> (braced_var_sub token: <Id.VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ Id.VSub_Name offset)}) ) ) ) } ) terminator: <Id.Op_Semi _> ) ] spids: [2145 2160] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (DQ (braced_var_sub token: <Id.VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ Id.VSub_Name offset)}) length: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) } right: {(DQ <'('>)} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ )} spids: [2209] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) op: assign_op.Equal rhs: {<0>} spids: [2214] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] spids: [2181 2206] ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (sh_lhs_expr.Name name:offset) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <new> } ) terminator: <Id.Op_Semi _> ) (C {<declare>} {<Id.Lit_VarLike 'items='> (DQ (${ Id.VSub_Name RESULT))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <whitespace> } {(DQ ($ Id.VSub_DollarName '$text'))} {(${ Id.VSub_Name offset)} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (sh_lhs_expr.Name name:offset) right: (arith_expr.ArithWord w:{(${ Id.VSub_Name PARSER_PARSED_COUNT)}) ) ) ] spids: [2297 2316] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (braced_var_sub token: <Id.VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ Id.VSub_Name offset)}) length: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) } right: {(DQ <')'>)} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (sh_lhs_expr.Name name:offset) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(${ Id.VSub_Name items)} spids: [2381] ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) right: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike offset>) right: (arith_expr.VarRef token:<Id.Lit_ArithVarLike originalOffset>) ) ) ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [2341 2366] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ (${ Id.VSub_Name text))} {(${ Id.VSub_Name offset)} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <append> } {(DQ ($ Id.VSub_DollarName '$items'))} {(${ Id.VSub_Name PARSER_PARSED)} ) (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (sh_lhs_expr.Name name:offset) right: (arith_expr.ArithWord w:{(${ Id.VSub_Name PARSER_PARSED_COUNT)}) ) ) ] spids: [2416 2434] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: [(command.Sentence child:(C {<true>}) terminator:<Id.Op_Semi _>)] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <whitespace> } {(DQ ($ Id.VSub_DollarName '$text'))} {(${ Id.VSub_Name offset)} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (sh_lhs_expr.Name name:offset) right: (arith_expr.ArithWord w: {(${ Id.VSub_Name PARSER_PARSED_COUNT)} ) ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (braced_var_sub token: <Id.VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w: {(${ Id.VSub_Name offset)} ) length: (arith_expr.ArithWord w: {<Id.Lit_Digits 1>} ) ) ) ) } right: {(DQ <')'>)} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (sh_lhs_expr.Name name:offset) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(${ Id.VSub_Name items)} spids: [2575] ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) right: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.VarRef token: <Id.Lit_ArithVarLike offset> ) right: (arith_expr.VarRef token: <Id.Lit_ArithVarLike originalOffset> ) ) ) ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [2535 2560] ) (if_arm cond: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ (${ Id.VSub_Name text))} {(${ Id.VSub_Name offset)} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <append> } {(DQ ($ Id.VSub_DollarName '$items'))} {(DQ (${ Id.VSub_Name PARSER_PARSED))} ) (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (sh_lhs_expr.Name name:offset) right: (arith_expr.ArithWord w: {(${ Id.VSub_Name PARSER_PARSED_COUNT)} ) ) ) ] spids: [2602 2620] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ )} spids: [2659] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) op: assign_op.Equal rhs: {<0>} spids: [2664] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ) ] spids: [2496 2515] ) ] else_action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (braced_var_sub token: <Id.VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w: {(${ Id.VSub_Name offset)} ) length: (arith_expr.ArithWord w: {<Id.Lit_Digits 1>} ) ) ) ) } right: {(DQ <')'>)} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (sh_lhs_expr.Name name:offset) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(${ Id.VSub_Name items)} spids: [2723] ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) right: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike offset>) right: (arith_expr.VarRef token: <Id.Lit_ArithVarLike originalOffset> ) ) ) ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [2683 2708] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ )} spids: [2754] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) op: assign_op.Equal rhs: {<0>} spids: [2759] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ) ] ) ] ) ) (C {<stderr>} {(DQ <'Should never get here'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (C {<declare>} {<-g>} {<Id.Lit_VarLike 'PARSER_WHITESPACE_REGEX='> (SQ <'\\([ \t\n'> <'][ \t\n'> <']*\\)'>)} ) (command.ShFunction name: 'parser::parse::whitespace' body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} {(DQ (${ Id.VSub_Name FUNCNAME) <' '> (${ Id.VSub_At '@'))}) terminator: <Id.Op_Semi _> ) ] spids: [2827 2842] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'text='> (DQ (${ Id.VSub_Number 1))}) (C {<declare>} {<Id.Lit_VarLike 'originalOffset='> (DQ (braced_var_sub token: <Id.VSub_Number 2> suffix_op: (suffix_op.Unary op_id:Id.VTest_Hyphen arg_word:{<0>}) ) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(${ Id.VSub_Name PARSER_DEBUG)} right: {<1>} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Sentence child: (C {<stderr>} { (DQ <'Trying to parse whitespace from:\n'> (braced_var_sub token: <Id.VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ Id.VSub_Name originalOffset)}) ) ) ) } ) terminator: <Id.Op_Semi _> ) ] spids: [2885 2900] ) ] ) (C {<declare>} {<Id.Lit_VarLike 'offset='> (${ Id.VSub_Name originalOffset)}) (C {<declare>} {<Id.Lit_VarLike 'char='> (DQ (braced_var_sub token: <Id.VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ Id.VSub_Name offset)}) length: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) } ) (C {<declare>} {<Id.Lit_VarLike 'parsed='> (DQ )}) (command.WhileUntil keyword: <Id.KW_While while> cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalOr left: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$char')} right: {(DQ <' '>)} ) right: (bool_expr.LogicalOr left: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$char')} right: {(DQ <'\t'>)} ) right: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$char')} right: {(DQ <'\n'>)} ) ) ) ) terminator: <Id.Op_Semi _> ) ] body: (command.DoGroup children: [ (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (sh_lhs_expr.Name name:offset) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:parsed) op: assign_op.PlusEqual rhs: {(DQ (${ Id.VSub_Name char))} spids: [3003] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:char) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: <Id.VSub_Name text> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(${ Id.VSub_Name offset)}) length: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) } spids: [3011] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: {($ Id.VSub_DollarName '$offset')} right: {($ Id.VSub_DollarName '$originalOffset')} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name parsed))} spids: [3045] ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) right: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike offset>) right: (arith_expr.VarRef token:<Id.Lit_ArithVarLike originalOffset>) ) ) ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [3029 3042] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED) op: assign_op.Equal rhs: {(DQ )} spids: [3077] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PARSER_PARSED_COUNT) op: assign_op.Equal rhs: {<0>} spids: [3082] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Number '$0')} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {($ Id.VSub_DollarName '$BASH_SOURCE')} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [(command.ControlFlow token:<Id.ControlFlow_Return return>)] spids: [3103 3117] ) ] ) (C {<.>} { (braced_var_sub token: <Id.VSub_Name BASH_SOURCE> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash /> <'*'>}) ) </test.sh> } ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ <1>)}) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ <'parse 1 succeeds'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <debug>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <'Integer :: 1'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'parse 1'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<1>} {(DQ (${ Id.VSub_Name PARSER_PARSED_COUNT))} {(DQ <'parse 1 / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ <123456>)}) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ <'parse 123456 succeeds'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <debug>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <'Integer :: 123456'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'parse 123456'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<6>} {(DQ (${ Id.VSub_Name PARSER_PARSED_COUNT))} {(DQ <'parse 123456 / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ <0>)}) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ <'parse 0 succeeds'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <debug>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <'Integer :: 0'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'parse 0'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<1>} {(DQ (${ Id.VSub_Name PARSER_PARSED_COUNT))} {(DQ <'parse 0 / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ <-10>)}) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ <'parse -10 succeeds'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <debug>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <'Integer :: -10'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'parse -10'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<3>} {(DQ (${ Id.VSub_Name PARSER_PARSED_COUNT))} {(DQ <'parse 1 / count'>)} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:output) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ <-0>)})] ) ) } spids: [3457] ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<1>} {($ Id.VSub_QMark '$?')} {(DQ <'parse -0 should fail'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ <v>)}) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} { (DQ <'parse '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <abc> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' succeeds'> ) } ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <debug>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <'Identifier :: v'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'parse v'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ <'a?'>)}) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} { (DQ <'parse '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <abc> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' succeeds'> ) } ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <debug>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <'Identifier :: a?'>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'parse a?'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(SQ <'"abc"'>)}) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} { (DQ <'parse '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <abc> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' succeeds'> ) } ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <debug>} {(DQ (${ Id.VSub_Name RESULT))} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <'String :: abc'>)} {(DQ (${ Id.VSub_Name RESULT))} { (DQ <'parse '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <abc> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) ) } ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<5>} {(DQ (${ Id.VSub_Name PARSER_PARSED_COUNT))} { (DQ <'parse '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <abc> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' / count'> ) } ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <whitespace> } {(SQ <' \t '>)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ <'match whitespace / code'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<3>} {(${ Id.VSub_Name PARSER_PARSED_COUNT)} {(DQ <'match whitepace / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <whitespace> } {(SQ <'abc def'>)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<1>} {($ Id.VSub_QMark '$?')} {(DQ <'match non-whitespace / code'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <whitespace> } {(SQ )} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<1>} {($ Id.VSub_QMark '$?')} {(DQ <'match empty non-whitespace / code'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <whitespace> } {(SQ <')'>)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<1>} {($ Id.VSub_QMark '$?')} {(DQ <'match close paren against whitespace / code'>)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TEST) op: assign_op.Equal rhs: {(DQ <'multiExpression - single expr'>)} spids: [3872] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <multiExpression> } {(DQ <a>)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ (${ Id.VSub_Name TEST) <' / code'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<1>} {(${ Id.VSub_Name PARSER_PARSED_COUNT)} {(DQ (${ Id.VSub_Name TEST) <' / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <type>} {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <LinkedList>)} {(${ Id.VSub_Name RESULT)} {(DQ (${ Id.VSub_Name TEST) <' / type'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <length> } {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<1>} {(${ Id.VSub_Name RESULT)} {(DQ (${ Id.VSub_Name TEST) <' / length'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <first> } {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <value>} {(${ Id.VSub_Name RESULT)}) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <a>)} {(DQ (${ Id.VSub_Name RESULT))} {(DQ (${ Id.VSub_Name TEST) <' / value'>)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TEST) op: assign_op.Equal rhs: {(DQ <'multiExpression - multiple expressions'>)} spids: [4040] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <multiExpression> } {(DQ <'a b'>)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ (${ Id.VSub_Name TEST) <' / code'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<3>} {(${ Id.VSub_Name PARSER_PARSED_COUNT)} {(DQ (${ Id.VSub_Name TEST) <' / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <type>} {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <LinkedList>)} {(${ Id.VSub_Name RESULT)} {(DQ (${ Id.VSub_Name TEST) <' / type'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <length> } {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<2>} {(${ Id.VSub_Name RESULT)} {(DQ (${ Id.VSub_Name TEST) <' / length'>)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TEST) op: assign_op.Equal rhs: {(DQ <'multiExpression - whitespaces'>)} spids: [4157] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <multiExpression> } {(DQ <' b '>)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ (${ Id.VSub_Name TEST) <' / code'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<3>} {(${ Id.VSub_Name PARSER_PARSED_COUNT)} {(DQ (${ Id.VSub_Name TEST) <' / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <type>} {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <LinkedList>)} {(${ Id.VSub_Name RESULT)} {(DQ (${ Id.VSub_Name TEST) <' / type'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <length> } {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<1>} {(${ Id.VSub_Name RESULT)} {(DQ (${ Id.VSub_Name TEST) <' / length'>)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TEST) op: assign_op.Equal rhs: {(DQ <'multiExpression - integer'>)} spids: [4274] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <multiExpression> } {(DQ <1>)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ (${ Id.VSub_Name TEST) <' / code'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<1>} {(${ Id.VSub_Name PARSER_PARSED_COUNT)} {(DQ (${ Id.VSub_Name TEST) <' / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <type>} {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <LinkedList>)} {(${ Id.VSub_Name RESULT)} {(DQ (${ Id.VSub_Name TEST) <' / type'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <length> } {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<1>} {(${ Id.VSub_Name RESULT)} {(DQ (${ Id.VSub_Name TEST) <' / length'>)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TEST) op: assign_op.Equal rhs: {(DQ <'multiExpression - sexp'>)} spids: [4391] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <multiExpression> } {(DQ <'(a)'>)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ (${ Id.VSub_Name TEST) <' / code'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<3>} {(${ Id.VSub_Name PARSER_PARSED_COUNT)} {(DQ (${ Id.VSub_Name TEST) <' / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <type>} {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <LinkedList>)} {(${ Id.VSub_Name RESULT)} {(DQ (${ Id.VSub_Name TEST) <' / type'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <length> } {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<1>} {(${ Id.VSub_Name RESULT)} {(DQ (${ Id.VSub_Name TEST) <' / length'>)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TEST) op: assign_op.Equal rhs: {(DQ <'multiExpression - sexps'>)} spids: [4508] ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <multiExpression> } {(DQ <'(a) (b)'>)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ (${ Id.VSub_Name TEST) <' / code'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<7>} {(${ Id.VSub_Name PARSER_PARSED_COUNT)} {(DQ (${ Id.VSub_Name TEST) <' / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <type>} {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <LinkedList>)} {(${ Id.VSub_Name RESULT)} {(DQ (${ Id.VSub_Name TEST) <' / type'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <length> } {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<2>} {(${ Id.VSub_Name RESULT)} {(DQ (${ Id.VSub_Name TEST) <' / length'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ <'()'>)}) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ <'match empty sexp / code'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<2>} {(${ Id.VSub_Name PARSER_PARSED_COUNT)} {(DQ <'match empty sexp / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <type>} {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <LinkedList>)} {(${ Id.VSub_Name RESULT)} {(DQ <'match empty sexp / type'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <length> } {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {(${ Id.VSub_Name RESULT)} {(DQ <'match empty sexp / length'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ <'( )'>)}) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ <'match almost empty sexp / code'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<3>} {(${ Id.VSub_Name PARSER_PARSED_COUNT)} {(DQ <'match almost empty sexp / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <type>} {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <LinkedList>)} {(${ Id.VSub_Name RESULT)} {(DQ <'match almost empty sexp / type'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <length> } {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {(${ Id.VSub_Name RESULT)} {(DQ <'match almost empty sexp / length'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ <'(a)'>)}) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ <'single element sexp / code'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<3>} {(${ Id.VSub_Name PARSER_PARSED_COUNT)} {(DQ <'single element sexp / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <type>} {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <LinkedList>)} {(${ Id.VSub_Name RESULT)} {(DQ <'single element sexp / type'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <length> } {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<1>} {(${ Id.VSub_Name RESULT)} {(DQ <'single element sexp / length'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ <'( a )'>)}) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ <'single element sexp / code'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<5>} {(${ Id.VSub_Name PARSER_PARSED_COUNT)} {(DQ <'single element sexp / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <type>} {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <LinkedList>)} {(${ Id.VSub_Name RESULT)} {(DQ <'single element sexp / type'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <length> } {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<1>} {(${ Id.VSub_Name RESULT)} {(DQ <'single element sexp / length'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ <'(a b)'>)}) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ <'two element sexp / code'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<5>} {(${ Id.VSub_Name PARSER_PARSED_COUNT)} {(DQ <'two element sexp / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <type>} {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <LinkedList>)} {(${ Id.VSub_Name RESULT)} {(DQ <'two element sexp / type'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <length> } {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<2>} {(${ Id.VSub_Name RESULT)} {(DQ <'two element sexp / length'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<parser> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <parse>} {(DQ <'((a) (b) c)'>)}) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<0>} {($ Id.VSub_QMark '$?')} {(DQ <'nested element sexp / code'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<11>} {(${ Id.VSub_Name PARSER_PARSED_COUNT)} {(DQ <'nested element sexp / count'>)} ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <type>} {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <LinkedList>)} {(${ Id.VSub_Name RESULT)} {(DQ <'nested element sexp / type'>)} ) ] ) (command.CommandList children: [ (command.Sentence child: (C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <LinkedList> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <length> } {(${ Id.VSub_Name PARSER_PARSED)} ) terminator: <Id.Op_Semi _> ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {<3>} {(${ Id.VSub_Name RESULT)} {(DQ <'nested element sexp / length'>)} ) ] ) (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <report>}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} { (braced_var_sub token: <Id.VSub_Number 1> suffix_op: (suffix_op.Unary op_id:Id.VTest_Plus arg_word:{<isset>}) ) } {<Id.Lit_RBracket ']'>} ) (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <debug>)} {<Id.Lit_RBracket ']'>} ) ] ) terminator: <Id.Op_Semi _> ) ] action: [(C {<variable> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <printMetadata>})] spids: [5222 5252] ) ] ) ] )