(command.CommandList children: [ (C {(Id.KW_Set set)} {(-o)} {(nounset)}) (C {(Id.KW_Set set)} {(-o)} {(pipefail)}) (C {(Id.KW_Set set)} {(-o)} {(errexit)}) (C {(readonly)} {(Id.Lit_VarLike 'TIMEFORMAT=') (SQ (Token id:Id.Lit_Chars val:'%R' span_id:36))}) (command.ShFunction name: strace-callback body: (command.BraceGroup children: [ (command.Pipeline children: [ (command.Simple words: [{(strace)} {(DQ ($ Id.VSub_At '$@'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:107) fd: 2 arg_word: {(1)} ) ] ) (C {(wc)} {(-l)}) ] negated: F ) ] ) ) (command.ShFunction name: time-callback body: (command.BraceGroup children: [ (command.TimeBlock pipeline: (command.Simple words: [{(DQ ($ Id.VSub_At '$@'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:132) fd: -1 arg_word: {(/dev/null)} ) ] ) ) ] ) ) (command.ShFunction name: compare body: (command.BraceGroup children: [ (C {(local)} {(Id.Lit_VarLike 'callback=') (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:149) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(strace-callback)}) ) } ) (command.ForEach iter_name: sh iter_words: [{(bash)} {(dash)} {(mksh)} {(zsh)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(echo)} {($ Id.VSub_DollarName '$sh')}) (C {($ Id.VSub_DollarName '$callback')} {($ Id.VSub_DollarName '$sh')} {(-c)} {(SQ (Token id:Id.Lit_Chars val:'echo "hi" > /dev/null' span_id:190))} ) (C {(echo)}) ] ) ) (command.ForEach iter_name: awk iter_words: [{(gawk)} {(mawk)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(echo)} {($ Id.VSub_DollarName '$awk')}) (command.Simple words: [ {($ Id.VSub_DollarName '$callback')} {($ Id.VSub_DollarName '$awk')} {(SQ (Token id:Id.Lit_Chars val:'{ print "hi" } ' span_id:229))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:232) fd: -1 arg_word: {(/dev/null)} ) ] ) (C {(echo)}) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(which)} {(lua)}) terminator: (Token id:Id.Op_Semi val:';' span_id:249) ) ] action: [ (C {(echo)} {(lua)}) (C {($ Id.VSub_DollarName '$callback')} {(lua)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'print "hi"' span_id:266))} ) (C {(echo)}) ] spids: [244 251] ) ] ) (C {(echo)} {(perl)}) (C {($ Id.VSub_DollarName '$callback')} {(perl)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'print "hi\\n"' span_id:289))} ) (C {(echo)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(which)} {(ruby)}) terminator: (Token id:Id.Op_Semi val:';' span_id:306) ) ] action: [ (C {(echo)} {(ruby)}) (C {($ Id.VSub_DollarName '$callback')} {(ruby)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'print "hi\\n"' span_id:323))} ) (C {(echo)}) ] spids: [301 308] ) ] ) (command.ForEach iter_name: py iter_words: [{(python)} {(python3)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(echo)} {($ Id.VSub_DollarName '$py')} {(-S)}) (C {($ Id.VSub_DollarName '$callback')} {($ Id.VSub_DollarName '$py')} {(-S)} {(-c)} {(SQ (Token id:Id.Lit_Chars val:'print("hi")' span_id:368))} ) (C {(echo)}) ] ) ) (command.ForEach iter_name: py iter_words: [{(python)} {(python3)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(echo)} {($ Id.VSub_DollarName '$py')} {(import)}) (C {($ Id.VSub_DollarName '$callback')} {($ Id.VSub_DollarName '$py')} {(-S)} {(-c)} {(SQ (Token id:Id.Lit_Chars val:'import json;print("hi")' span_id:409))} ) (C {(echo)}) ] ) ) (command.ForEach iter_name: py iter_words: [{(python)} {(python3)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(echo)} {($ Id.VSub_DollarName '$py')} {(import)}) (C {($ Id.VSub_DollarName '$callback')} {($ Id.VSub_DollarName '$py')} {(-S)} {(-c)} {(SQ (Token id:Id.Lit_Chars val:'import json;print("hi")' span_id:450))} ) (C {(echo)}) ] ) ) (C {(echo)} {(SQ (Token id:Id.Lit_Chars val:'Small app.zip' span_id:464))}) (C {($ Id.VSub_DollarName '$callback')} {(python)} {(-S)} {(_tmp/app.zip)}) (C {(echo)}) (C {(echo)} {(SQ (Token id:Id.Lit_Chars val:'hello app bundle' span_id:488))}) (command.AndOr ops: [Id.Op_DPipe] children: [(C {($ Id.VSub_DollarName '$callback')} {(_bin/hello.ovm)}) (C {(true)})] ) (C {(echo)}) (C {(echo)} {(SQ (Token id:Id.Lit_Chars val:'OSH app bundle true' span_id:508))}) (C {($ Id.VSub_DollarName '$callback')} {(_bin/true)}) (C {(echo)}) (C {(echo)} {(SQ (Token id:Id.Lit_Chars val:'OSH app bundle Hello World' span_id:524))}) (C {($ Id.VSub_DollarName '$callback')} {(_bin/osh)} {(-c)} {(SQ (Token id:Id.Lit_Chars val:'echo hi' span_id:535))} ) (C {(echo)}) ] ) ) (command.ShFunction name: compare-strace body: (command.BraceGroup children:[(C {(compare)} {(strace-callback)})]) ) (command.ShFunction name: compare-time body: (command.BraceGroup children:[(C {(compare)} {(time-callback)})]) ) (command.ShFunction name: import-stats body: (command.BraceGroup children: [ (C {(echo)} {(json)}) (command.Pipeline children: [ (command.Simple words: [ {(strace)} {(python)} {(-c)} {(SQ (Token id:Id.Lit_Chars val:'import json' span_id:595))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:598) fd: 2 arg_word: {(1)} ) ] ) (C {(grep)} {(json)}) (C {(wc)} {(-l)}) ] negated: F ) (C {(echo)} {(nonexistent___)}) (command.Pipeline children: [ (command.Simple words: [ {(strace)} {(python)} {(-c)} {(SQ (Token id:Id.Lit_Chars val:'import nonexistent___' span_id:627))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:630) fd: 2 arg_word: {(1)} ) ] ) (C {(grep)} {(nonexistent___)}) (C {(wc)} {(-l)}) ] negated: F ) ] ) ) (command.ShFunction name: make-zip body: (command.BraceGroup children: [ (C {(rm)} {(-r)} {(-f)} {(_tmp/app)}) (C {(rm)} {(-f)} {(_tmp/app.zip)}) (C {(mkdir)} {(-p)} {(_tmp/app)}) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:682) fd: -1 arg_word: {(_tmp/app/lib1.py)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:686) fd: -1 here_begin: {(EOF)} here_end_span_id: 695 stdin_parts: [ ('print ') (Id.Right_DoubleQuote '"') ('hi from lib1') (Id.Right_DoubleQuote '"') ('\n') ] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:700) fd: -1 arg_word: {(_tmp/app/lib2.py)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:704) fd: -1 here_begin: {(EOF)} here_end_span_id: 713 stdin_parts: [ ('print ') (Id.Right_DoubleQuote '"') ('hi from lib2') (Id.Right_DoubleQuote '"') ('\n') ] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:718) fd: -1 arg_word: {(_tmp/app/__main__.py)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:722) fd: -1 here_begin: {(EOF)} here_end_span_id: 735 stdin_parts: [ ('import sys\n') ('sys.path = [sys.argv[0]]\n') ('import lib1\n') ('import lib2\n') ('print ') (Id.Right_DoubleQuote '"') ('hi from zip') (Id.Right_DoubleQuote '"') ('\n') ] ) ] ) (C {(pushd)} {(_tmp/app)}) (C {(zip)} {(-r)} {(../app.zip)} {(.)}) (C {(popd)}) ] ) ) (command.ShFunction name: test-zip body: (command.BraceGroup children:[(C {(python)} {(-S)} {(_tmp/app.zip)})]) ) (command.ShFunction name: strace-zip body: (command.BraceGroup children:[(C {(strace)} {(python)} {(-S)} {(_tmp/app.zip)})]) ) (C {(DQ ($ Id.VSub_At '$@'))}) ] )