(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RM) op: assign_op.Equal rhs: {(DQ ('rm -f'))} spids: [19] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:MP_PY) op: assign_op.Equal rhs: {(micropython)} spids: [24] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:numtests) op: assign_op.Equal rhs: {(0)} spids: [28] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:numtestcases) op: assign_op.Equal rhs: {(0)} spids: [31] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:numpassed) op: assign_op.Equal rhs: {(0)} spids: [34] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:numskipped) op: assign_op.Equal rhs: {(0)} spids: [37] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:numfailed) op: assign_op.Equal rhs: {(0)} spids: [40] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:nameskipped) op: assign_op.Equal rhs: (word.Empty) spids: [43] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:namefailed) op: assign_op.Equal rhs: (word.Empty) spids: [45] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} {(0)} {(Id.Lit_RBracket ']')}) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tests) op: assign_op.Equal rhs: { (DQ ( 'basics/*.py micropython/*.py float/*.py import/*.py io/*.py misc/*.py unicode/*.py extmod/*.py unix/*.py' ) ) } spids: [63] ) ] ) ] spids: [48 60] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tests) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_At '$@'))} spids: [71] ) ] ) ] ) (command.ForEach iter_name: infile iter_words: [{($ Id.VSub_DollarName '$tests')}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:basename) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:91) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_DollarName '$infile')} {(.py)})] ) ) } spids: [90] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:outfile) op: assign_op.Equal rhs: {(${ Id.VSub_Name basename) (.py.out)} spids: [102] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expfile) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$infile') (.exp)} spids: [109] ) ] ) (command.Simple words: [{($ Id.VSub_DollarName '$MP_PY')} {($ Id.VSub_DollarName '$infile')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:119) fd: -1 arg_word: {($ Id.VSub_DollarName '$outfile')} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:numtestcases) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:125) command_list: (command.CommandList children: [ (C {(expr)} {($ Id.VSub_DollarName '$numtestcases')} {(Id.Lit_Other '+')} { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:132) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(cat)} {($ Id.VSub_DollarName '$expfile')}) (C {(wc)} {(-l)}) ] negated: F ) ] ) ) } ) ] ) ) } spids: [124] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(grep)} {(-q)} { (DQ (SKIP) (Id.Lit_Other '\\') ('|SyntaxError: invalid micropython decorator')) } {($ Id.VSub_DollarName '$outfile')} ) ] action: [ (C {(echo)} {(DQ ('skip ') ($ Id.VSub_DollarName '$infile'))}) (C {($ Id.VSub_DollarName '$RM')} {($ Id.VSub_DollarName '$outfile')}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:numskipped) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:187) command_list: (command.CommandList children: [ (C {(expr)} {($ Id.VSub_DollarName '$numskipped')} {(Id.Lit_Other '+')} {(1)} ) ] ) ) } spids: [186] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:nameskipped) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$nameskipped') (' ') ($ Id.VSub_DollarName '$basename') ) } spids: [198] ) ] ) ] spids: [147 162] ) ] else_action: [ (command.Simple words: [ {(diff)} {(--brief)} {($ Id.VSub_DollarName '$expfile')} {($ Id.VSub_DollarName '$outfile')} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:217) fd: -1 arg_word: {(/dev/null)} ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-eq)} {(0)} {(Id.Lit_RBracket ']')} ) ] action: [ (C {(echo)} {(DQ ('pass ') ($ Id.VSub_DollarName '$infile'))}) (C {($ Id.VSub_DollarName '$RM')} {($ Id.VSub_DollarName '$outfile')}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:numpassed) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:253) command_list: (command.CommandList children: [ (C {(expr)} {($ Id.VSub_DollarName '$numpassed')} {(Id.Lit_Other '+')} {(1)} ) ] ) ) } spids: [252] ) ] ) ] spids: [223 236] ) ] else_action: [ (C {(echo)} {(DQ ('FAIL ') ($ Id.VSub_DollarName '$infile'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:numfailed) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:276) command_list: (command.CommandList children: [ (C {(expr)} {($ Id.VSub_DollarName '$numfailed')} {(Id.Lit_Other '+')} {(1)} ) ] ) ) } spids: [275] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:namefailed) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$namefailed') (' ') ($ Id.VSub_DollarName '$basename') ) } spids: [287] ) ] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:numtests) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:303) command_list: (command.CommandList children: [ (C {(expr)} {($ Id.VSub_DollarName '$numtests')} {(Id.Lit_Other '+')} {(1)}) ] ) ) } spids: [302] ) ] ) ] ) ) (C {(echo)} { (DQ ($ Id.VSub_DollarName '$numtests') (' tests performed (') ($ Id.VSub_DollarName '$numtestcases') (' individual testcases)') ) } ) (C {(echo)} {(DQ ($ Id.VSub_DollarName '$numpassed') (' tests passed'))}) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$numskipped')} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)} {(Id.Lit_RBracket ']')} ) ] action: [ (C {(echo)} { (DQ ($ Id.VSub_DollarName '$numskipped') (' tests skipped -') ($ Id.VSub_DollarName '$nameskipped') ) } ) ] spids: [332 345] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$numfailed')} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)} {(Id.Lit_RBracket ']')} ) ] action: [ (C {(echo)} { (DQ ($ Id.VSub_DollarName '$numfailed') (' tests failed -') ($ Id.VSub_DollarName '$namefailed') ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:383) arg_word: {(1)} ) ] spids: [358 371] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:390) arg_word: {(0)} ) ] ) ] )