(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:all_obj_meta_file) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [29] ) ] ) (command.ShFunction name: lexicographic_compare_le body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:sorted) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<echo>} {(DQ ($ Id.VSub_Number '$1')) (single_quoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [<Id.Char_OneChar '\\n'>] multiline: F ) (DQ ($ Id.VSub_Number '$2')) } ) (command.Simple words: [{<sort>}] more_env: [(env_pair name:LANG val:{<C>} spids:[61])] do_fork: T ) ] negated: F ) ) ) } spids: [43] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$sorted'))} right: {(DQ ($ Id.VSub_Number '$1')) (single_quoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [<Id.Char_OneChar '\\n'>] multiline: F ) (DQ ($ Id.VSub_Number '$2')) } ) ) terminator: <Id.Op_Semi _> ) ] ) action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>})] spids: [70 93] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$sorted'))} right: {(DQ ($ Id.VSub_Number '$2')) (single_quoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [<Id.Char_OneChar '\\n'>] multiline: F ) (DQ ($ Id.VSub_Number '$1')) } ) ) terminator: <Id.Op_Semi _> ) ] ) action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>})] spids: [108 131] ) ] else_action: [ (command.Simple words: [{<echo>} {(DQ <'lexicographic_compare_le: internal error'>)}] redirects: [(redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<99>} ) ] ) ] ) ) (command.ShFunction name: lexicographic_compare_lt body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_Number '$1'))} right: {(DQ ($ Id.VSub_Number '$2'))} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>})] spids: [179 196] ) ] else_action: [ (C {<lexicographic_compare_le>} {(DQ ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_Number '$2'))} ) ] ) ] ) ) (command.ShFunction name: lexicographic_compare_gt body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<lexicographic_compare_le>} {(DQ ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_Number '$2'))} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>})] spids: [238 253] ) ] else_action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>})] ) ] ) ) (command.ShFunction name: lexicographic_compare_ge body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<lexicographic_compare_lt>} {(DQ ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_Number '$2'))} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>})] spids: [291 306] ) ] else_action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>})] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:all_source_meta_file) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [337] ) ] ) (command.Simple words: [{<echo>} {(DQ <'all_source_meta_file: '> ($ Id.VSub_DollarName '$all_source_meta_file'))}] redirects: [(redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple words: [{<echo>} {(DQ <'all_obj_meta_file: '> ($ Id.VSub_DollarName '$all_obj_meta_file'))}] redirects: [(redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keep_old_source_line) op: assign_op.Equal rhs: {<0>} spids: [366] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:have_matched_this_source_line) op: assign_op.Equal rhs: {<0>} spids: [369] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (C {<read>} {<-r>} {<obj>} {<Id.KW_Func func>} {<addr>} {<sourcefile>} {<sourceline>} {<sourceline_end>} {<typ>} {<rest>} ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup children: [ (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [(command.Sentence child:(C {<true>}) terminator:<Id.Op_Semi _>)] ) body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_eq left: {($ Id.VSub_DollarName '$keep_old_source_line')} right: {<0>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:have_matched_this_source_line) op: assign_op.Equal rhs: {<0>} spids: [441] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [ {<read>} {<-r>} {<srcmeta_sourcefile>} {<srcmeta_sourceline>} {<srcmeta_sourceline_end>} {<srcmeta_rest>} ] redirects: [ (redir op: <Id.Redir_LessAnd '<&'> loc: (redir_loc.Fd fd:0) arg: {<3>} ) ] do_fork: T ) (command.ControlFlow token: <Id.ControlFlow_Break break> arg_word: {<2>} ) ] ) ] spids: [421 434] ) ] else_action: [(C {<true>})] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$srcmeta_sourcefile'))} right: {(DQ ($ Id.VSub_DollarName '$sourcefile'))} ) ) (C {<lexicographic_compare_ge>} {(DQ ($ Id.VSub_DollarName '$srcmeta_sourceline'))} {(DQ ($ Id.VSub_DollarName '$sourceline'))} ) (C {<lexicographic_compare_lt>} {(DQ ($ Id.VSub_DollarName '$srcmeta_sourceline'))} {(DQ ($ Id.VSub_DollarName '$sourceline_end'))} ) ] ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ ($ Id.VSub_DollarName '$obj')) (single_quoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [<Id.Char_OneChar '\\t'>] multiline: F ) (DQ ($ Id.VSub_DollarName '$func')) (single_quoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [<Id.Char_OneChar '\\t'>] multiline: F ) (DQ ($ Id.VSub_DollarName '$addr')) (single_quoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [<Id.Char_OneChar '\\t'>] multiline: F ) (DQ ($ Id.VSub_DollarName '$sourcefile')) (single_quoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [<Id.Char_OneChar '\\t'>] multiline: F ) (DQ ($ Id.VSub_DollarName '$sourceline')) (single_quoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [<Id.Char_OneChar '\\t'>] multiline: F ) (DQ ($ Id.VSub_DollarName '$sourceline_end')) (single_quoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [<Id.Char_OneChar '\\t'>] multiline: F ) (DQ ($ Id.VSub_DollarName '$srcmeta_rest')) (single_quoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [<Id.Char_OneChar '\\t'>] multiline: F ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:have_matched_this_source_line) op: assign_op.Equal rhs: {<1>} spids: [648] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keep_old_source_line) op: assign_op.Equal rhs: {<1>} spids: [662] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Continue continue> arg_word: {<2>} ) ] spids: [538 583] ) ] else_action: [ (command.Simple words: [ {<echo>} { (DQ <'NO MATCH: found '> ($ Id.VSub_DollarName '$srcmeta_sourcefile') <' != '> ($ Id.VSub_DollarName '$sourcefile') <' or '> ) } { (DQ <'NOT lexicographic_compare_ge '> ($ Id.VSub_DollarName '$srcmeta_sourceline') <' '> ($ Id.VSub_DollarName '$sourceline') <' or'> ) } { (DQ <'NOT lexicographic_compare_lt '> ($ Id.VSub_DollarName '$srcmeta_sourceline') <' '> ($ Id.VSub_DollarName '$sourceline_end') ) } ] redirects: [ (redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<lexicographic_compare_lt>} {(DQ ($ Id.VSub_DollarName '$srcmeta_sourcefile'))} {(DQ ($ Id.VSub_DollarName '$sourcefile'))} ) (command.Subshell child: (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ ($ Id.VSub_DollarName '$srcmeta_sourcefile' ) ) } right: { (DQ ($ Id.VSub_DollarName '$sourcefile') ) } ) ) (C {<lexicographic_compare_lt>} { (DQ ($ Id.VSub_DollarName '$srcmeta_sourceline') ) } {(DQ ($ Id.VSub_DollarName '$sourceline_end'))} ) ] ) ) ] ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_eq left: { ($ Id.VSub_DollarName '$have_matched_this_source_line' ) } right: {<1>} ) ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Simple words: [ {<echo>} { (DQ < 'warning: skipping source meta line, comparing lt next obj entry (which has file ' > (${ Id.VSub_Name sourcefile) <', lines '> (${ Id.VSub_Name sourceline) <-> (${ Id.VSub_Name sourceline_end) <', address '> (${ Id.VSub_Name obj) <'<'> (${ Id.VSub_Name func) <'> @'> (${ Id.VSub_Name addr) <'): '> ($ Id.VSub_DollarName '$srcmeta_sourcefile') ) (single_quoted left:<Id.Left_DollarSingleQuote '$\''> tokens:[<Id.Char_OneChar '\\t'>] multiline:F) (DQ ($ Id.VSub_DollarName '$srcmeta_sourceline')) (single_quoted left:<Id.Left_DollarSingleQuote '$\''> tokens:[<Id.Char_OneChar '\\t'>] multiline:F) (DQ ($ Id.VSub_DollarName '$srcmeta_rest')) } ] redirects: [ (redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] spids: [773 788] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keep_old_source_line) op: assign_op.Equal rhs: {<0>} spids: [845] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Continue continue> arg_word: {<1>} ) ] spids: [713 762] ) ] else_action: [ (command.Simple words: [ {<echo>} { (DQ < 'warning: skipping objdump meta line, comparing lt next source entry (which has file ' > (${ Id.VSub_Name srcmeta_sourcefile) <', line '> (${ Id.VSub_Name srcmeta_sourceline) <'): '> ($ Id.VSub_DollarName '$obj') <' '> ($ Id.VSub_DollarName '$func') <' '> ($ Id.VSub_DollarName '$addr') <' '> ($ Id.VSub_DollarName '$sourcefile') <' '> ($ Id.VSub_DollarName '$sourceline') <' '> ($ Id.VSub_DollarName '$sourceline_end') <' '> ($ Id.VSub_DollarName '$srcmeta_rest') ) } ] redirects: [ (redir op: <Id.Redir_GreatAnd '1>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:keep_old_source_line) op: assign_op.Equal rhs: {<1>} spids: [913] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Continue continue> arg_word: {<2>} ) ] ) ] ) ] ) ) ] ) redirects: [ (redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {(DQ ($ Id.VSub_DollarName '$all_obj_meta_file'))} ) (redir op: <Id.Redir_Less '3<'> loc: (redir_loc.Fd fd:3) arg: {(DQ ($ Id.VSub_DollarName '$all_source_meta_file'))} ) ] ) ] )