(command.CommandList children: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<nounset>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<pipefail>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<errexit>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <source> more_env: [] words: [{<source>} {<'test/common.sh'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <source> more_env: [] words: [{<source>} {<'benchmarks/common.sh'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <readonly> more_env: [] words: [{<readonly>} {<Id.Lit_VarLike 'BASE_DIR='> <'_tmp/osh-runtime'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <readonly> more_env: [] words: [ {<readonly>} {<Id.Lit_VarLike 'TAR_DIR='> ($ Id.VSub_DollarName PWD) <'/_deps/osh-runtime'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <readonly> more_env: [] words: [ {<readonly>} {<-a>} {<Id.Lit_VarLike 'TAR_SUBDIRS='> (ShArrayLiteral left: <Id.Op_LParen _> words: [{<ocaml-4.06.0>} {<tcc-0.9.26>} {<yash-2.46>}] right: <Id.Right_ShArrayLiteral _> ) } ] redirects: [] do_fork: T ) (command.ShFunction name_tok: <tarballs> name: tarballs body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'tcc-0.9.26.tar.bz2\n'> <'yash-2.46.tar.xz\n'> <'ocaml-4.06.0.tar.xz\n'> ] ) ) ] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <download> name: download body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName TAR_DIR)}] redirects: [] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <tarballs> more_env: [] words: [{<tarballs>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <xargs> more_env: [] words: [ {<xargs>} {<-n>} {<1>} {<-I>} {<Id.Lit_LBrace '{'> <Id.Lit_RBrace '}'>} {<--verbose>} {<-->} {<wget>} {<--directory>} {($ Id.VSub_DollarName TAR_DIR)} {(SQ <'https://www.oilshell.org/blob/testdata/{}'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <extract> name: extract body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.TimeBlock keyword: <Id.KW_Time time> pipeline: (command.ForEach keyword: <Id.KW_For for> iter_names: [f] iterable: (for_iter.Words words: [ (word.BracedTree parts: [ ($ Id.VSub_DollarName TAR_DIR) <'/'> <Id.Lit_Star '*'> <.> (word_part.BracedTuple words: [{<bz2>} {<xz>}] ) ] ) ] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <tar> more_env: [] words: [ {<tar>} {<-x>} {<--directory>} {($ Id.VSub_DollarName TAR_DIR)} {<--file>} {($ Id.VSub_DollarName f)} ] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) ) (command.Simple blame_tok: <ls> more_env: [] words: [{<ls>} {<-l>} {($ Id.VSub_DollarName TAR_DIR)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <readonly> more_env: [] words: [{<readonly>} {<Id.Lit_VarLike 'PY27_DIR='> ($ Id.VSub_DollarName PWD) <'/Python-2.7.13'>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <cpython-configure> name: cpython-configure body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'sh_path='> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 1> var_name: 1 suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:{<bash>}) right: <Id.Right_DollarBrace '}'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'out_dir='> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 2> var_name: 2 suffix_op: (suffix_op.Unary op: <Id.VTest_ColonHyphen _> arg_word: {($ Id.VSub_DollarName BASE_DIR) <Id.Lit_Slash '/'> (${ Id.VSub_Name sh_path) <-cpython-configure> } ) right: <Id.Right_DollarBrace '}'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName out_dir)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <pushd> more_env: [] words: [{<pushd>} {($ Id.VSub_DollarName out_dir)}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.TimeBlock keyword: <Id.KW_Time time> pipeline: (command.Simple blame_tok: <Id.VSub_DollarName '$sh_path'> more_env: [] words: [ {($ Id.VSub_DollarName sh_path)} {($ Id.VSub_DollarName PY27_DIR) <'/configure'>} ] redirects: [] do_fork: T ) ) (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <popd> more_env: [] words: [{<popd>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <tree> more_env: [] words: [{<tree>} {($ Id.VSub_DollarName out_dir)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <osh-cpython-configure> name: osh-cpython-configure body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cpython-configure> more_env: [] words: [ {<cpython-configure>} {($ Id.VSub_DollarName OSH_OVM)} {($ Id.VSub_DollarName BASE_DIR) <'/osh-cpython-configure'>} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <runtime-task> name: runtime-task body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'raw_dir='> ($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'job_id='> ($ Id.VSub_Number 2)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'host='> ($ Id.VSub_Number 3)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'host_hash='> ($ Id.VSub_Number 4)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'sh_path='> ($ Id.VSub_Number 5)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'shell_hash='> ($ Id.VSub_Number 6)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'task_type='> ($ Id.VSub_Number 7)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'task_arg='> ($ Id.VSub_Number 8)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'shell_name='> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [{<basename>} {($ Id.VSub_DollarName sh_path)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'x='> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [{<basename>} {($ Id.VSub_DollarName task_arg)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'task_label='> (DQ (${ Id.VSub_Name shell_name) <-> (${ Id.VSub_Name shell_hash) <__> (${ Id.VSub_Name x) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'times_out='> (DQ ($ Id.VSub_DollarName PWD) <'/'> ($ Id.VSub_DollarName raw_dir) <'/'> ($ Id.VSub_DollarName host) <.> ($ Id.VSub_DollarName job_id) <.times.csv> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'vm_out_dir='> (DQ ($ Id.VSub_DollarName PWD) <'/'> ($ Id.VSub_DollarName raw_dir) <'/'> ($ Id.VSub_DollarName host) <.> ($ Id.VSub_DollarName job_id) <.virtual-memory> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'files_out_dir='> (DQ ($ Id.VSub_DollarName PWD) <'/'> ($ Id.VSub_DollarName raw_dir) <'/'> ($ Id.VSub_DollarName host) <.> ($ Id.VSub_DollarName job_id) <'.files/'> ($ Id.VSub_DollarName task_label) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <mkdir> more_env: [] words: [ {<mkdir>} {<-p>} {($ Id.VSub_DollarName vm_out_dir)} {($ Id.VSub_DollarName files_out_dir)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<-a>} {<Id.Lit_VarLike 'TIME_PREFIX='> (ShArrayLiteral left: <Id.Op_LParen _> words: [ {($ Id.VSub_DollarName PWD) <'/benchmarks/time.py'>} {<--output>} {($ Id.VSub_DollarName times_out)} {<--field>} {(DQ ($ Id.VSub_DollarName host))} {<--field>} {(DQ ($ Id.VSub_DollarName host_hash))} {<--field>} {(DQ ($ Id.VSub_DollarName shell_name))} {<--field>} {(DQ ($ Id.VSub_DollarName shell_hash))} {<--field>} {(DQ ($ Id.VSub_DollarName task_type))} {<--field>} {(DQ ($ Id.VSub_DollarName task_arg))} ] right: <Id.Right_ShArrayLiteral _> ) } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'extra_args='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'extra_args='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'extra_args='> name:extra_args) op: assign_op.Equal rhs: {(SQ )} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {(DQ ($ Id.VSub_DollarName shell_name))} {<Id.Lit_Equals '='>} {(SQ <osh>)} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'pdump='> (DQ (${ Id.VSub_Name vm_out_dir) <'/'> (${ Id.VSub_Name task_label) <__parser.txt> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'rdump='> (DQ (${ Id.VSub_Name vm_out_dir) <'/'> (${ Id.VSub_Name task_label) <__runtime.txt> ) } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'extra_args='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'extra_args='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'extra_args='> name:extra_args) op: assign_op.Equal rhs: { (DQ <'--parser-mem-dump '> ($ Id.VSub_DollarName pdump) <' --runtime-mem-dump '> ($ Id.VSub_DollarName rdump) ) } ) ] redirects: [] ) ] spids: [554 569] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'--- '> ($ Id.VSub_DollarName sh_path) <' '> ($ Id.VSub_DollarName task_type) <' '> ($ Id.VSub_DollarName task_arg) <' ---'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName task_type)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <abuild> pattern: (pat.Words words:[{<abuild>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <Id.Left_DoubleQuote '"'> more_env: [] words: [ { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name TIME_PREFIX> var_name: TIME_PREFIX bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) right: <Id.Right_DollarBrace '}'> ) ) } {<-->} {(DQ ($ Id.VSub_DollarName sh_path))} {($ Id.VSub_DollarName extra_args)} {<'testdata/osh-runtime/abuild'>} {<-h>} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName files_out_dir) <'/STDOUT.txt'>} ) ] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <cpython> pattern: (pat.Words words:[{<cpython>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <pushd> more_env: [] words: [{<pushd>} {($ Id.VSub_DollarName files_out_dir)}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <Id.Left_DoubleQuote '"'> more_env: [] words: [ { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name TIME_PREFIX> var_name: TIME_PREFIX bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) right: <Id.Right_DollarBrace '}'> ) ) } {<-->} {(DQ ($ Id.VSub_DollarName sh_path))} {($ Id.VSub_DollarName extra_args)} {($ Id.VSub_DollarName PY27_DIR) <'/configure'>} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName files_out_dir) <'/STDOUT.txt'>} ) ] do_fork: T ) (command.Simple blame_tok: <popd> more_env: [] words: [{<popd>}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <configure> pattern: (pat.Words words:[{<configure>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'conf_dir='> ($ Id.VSub_DollarName task_arg)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <pushd> more_env: [] words: [{<pushd>} {($ Id.VSub_DollarName conf_dir)}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <touch> more_env: [] words: [{<touch>} {<__TIMESTAMP>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Left_DoubleQuote '"'> more_env: [] words: [ { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name TIME_PREFIX> var_name: TIME_PREFIX bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) right: <Id.Right_DollarBrace '}'> ) ) } {<-->} {(DQ ($ Id.VSub_DollarName sh_path))} {($ Id.VSub_DollarName extra_args)} {<'./configure'>} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName files_out_dir) <'/STDOUT.txt'>} ) ] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <find> more_env: [] words: [{<find>} {<.>} {<-type>} {<f>} {<-newer>} {<__TIMESTAMP>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <xargs> more_env: [] words: [ {<xargs>} {<-I>} {<Id.Lit_LBrace '{'> <Id.Lit_RBrace '}'>} {<-->} {<cp>} {<--verbose>} {<Id.Lit_LBrace '{'> <Id.Lit_RBrace '}'>} {($ Id.VSub_DollarName files_out_dir)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Simple blame_tok: <popd> more_env: [] words: [{<popd>}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <die> more_env: [] words: [{<die>} {(DQ <'Invalid task type '> ($ Id.VSub_DollarName task_type))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <print-tasks> name: print-tasks body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'provenance='> ($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {($ Id.VSub_DollarName provenance)}] redirects: [] do_fork: T ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <read> more_env: [] words: [ {<read>} {<job_id>} {<host_name>} {<host_hash>} {<sh_path>} {<shell_hash>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName sh_path)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <mksh> pattern: (pat.Words words:[{<mksh>} {<zsh>} {<'bin/osh'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <log> more_env: [] words: [ {<log>} {(DQ <'--- Skipping '> ($ Id.VSub_DollarName sh_path))} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Continue continue> ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName sh_path)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'> <'/osh'>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'sh_path='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'sh_path='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'sh_path='> name: sh_path ) op: assign_op.Equal rhs: {($ Id.VSub_DollarName PWD) <'/'> ($ Id.VSub_DollarName sh_path) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'prefix='> (DQ ($ Id.VSub_DollarName job_id) <' '> ($ Id.VSub_DollarName host_name) <' '> ($ Id.VSub_DollarName host_hash) <' '> ($ Id.VSub_DollarName sh_path) <' '> ($ Id.VSub_DollarName shell_hash) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ ($ Id.VSub_DollarName prefix))} {<abuild>} {<abuild-help>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ ($ Id.VSub_DollarName prefix))} {<cpython>} {<cpython-configure>} ] redirects: [] do_fork: T ) (command.ForEach keyword: <Id.KW_For for> iter_names: [dir] iterable: (for_iter.Words words: [ { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name TAR_SUBDIRS> var_name: TAR_SUBDIRS bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) right: <Id.Right_DollarBrace '}'> ) ) } ] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ ($ Id.VSub_DollarName prefix))} {<configure>} {($ Id.VSub_DollarName TAR_DIR) <'/'> ($ Id.VSub_DollarName dir)} ] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] ops: [<Id.Op_Pipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <readonly> more_env: [] words: [ {<readonly>} {<Id.Lit_VarLike 'HEADER='> (SQ <'status,elapsed_secs,host_name,host_hash,shell_name,shell_hash,task_type,task_arg'>) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <readonly> more_env: [] words: [{<readonly>} {<Id.Lit_VarLike 'NUM_COLUMNS='> <7>}] redirects: [] do_fork: T ) (command.ShFunction name_tok: <measure> name: measure body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'provenance='> ($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'raw_dir='> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 2> var_name: 2 suffix_op: (suffix_op.Unary op: <Id.VTest_ColonHyphen _> arg_word: {($ Id.VSub_DollarName BASE_DIR) <Id.Lit_Slash '/'> <raw>} ) right: <Id.Right_DollarBrace '}'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'pattern='> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 3> var_name: 3 suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:{}) right: <Id.Right_DollarBrace '}'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'name='> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [{<basename>} {($ Id.VSub_DollarName provenance)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'prefix='> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name name> var_name: name suffix_op: (suffix_op.Unary op:<Id.VOp1_Percent '%'> arg_word:{<.provenance.txt>}) right: <Id.Right_DollarBrace '}'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'times_out='> (DQ ($ Id.VSub_DollarName raw_dir) <'/'> ($ Id.VSub_DollarName prefix) <.times.csv>) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <mkdir> more_env: [] words: [ {<mkdir>} {<-p>} (word.BracedTree parts: [ ($ Id.VSub_DollarName BASE_DIR) <'/'> (word_part.BracedTuple words:[{<raw>} {<stage1>}]) ] ) {($ Id.VSub_DollarName raw_dir)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {($ Id.VSub_DollarName HEADER)}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName times_out)} ) ] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'tasks='> ($ Id.VSub_DollarName BASE_DIR) <'/tasks.txt'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <print-tasks> more_env: [] words: [{<print-tasks>} {($ Id.VSub_DollarName provenance)}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName tasks)} ) ] do_fork: T ) (command.AndOr children: [ (command.TimeBlock keyword: <Id.KW_Time time> pipeline: (command.Pipeline children: [ (command.Simple blame_tok: <egrep> more_env: [] words: [ {<egrep>} {(DQ ($ Id.VSub_DollarName pattern))} {($ Id.VSub_DollarName tasks)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <xargs> more_env: [] words: [ {<xargs>} {<-n>} {($ Id.VSub_DollarName NUM_COLUMNS)} {<-->} {($ Id.VSub_Number 0)} {<runtime-task>} {($ Id.VSub_DollarName raw_dir)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ) (command.Simple blame_tok: <die> more_env: [] words: [{<die>} {(DQ <'*** Some tasks failed. ***'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <cp> more_env: [] words: [{<cp>} {<-v>} {($ Id.VSub_DollarName provenance)} {($ Id.VSub_DollarName raw_dir)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <stage1> name: stage1 body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'raw_dir='> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 1> var_name: 1 suffix_op: (suffix_op.Unary op: <Id.VTest_ColonHyphen _> arg_word: {($ Id.VSub_DollarName BASE_DIR) <Id.Lit_Slash '/'> <raw>} ) right: <Id.Right_DollarBrace '}'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'out_dir='> ($ Id.VSub_DollarName BASE_DIR) <'/stage1'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName out_dir)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'times_csv='> ($ Id.VSub_DollarName out_dir) <'/times.csv'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<-a>} {<Id.Lit_VarLike 'a='> (ShArrayLiteral left: <Id.Op_LParen _> words: [ {($ Id.VSub_DollarName raw_dir) <'/flanders.'> <Id.Lit_Star '*'> <.times.csv>} ] right: <Id.Right_ShArrayLiteral _> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<-a>} {<Id.Lit_VarLike 'b='> (ShArrayLiteral left: <Id.Op_LParen _> words: [{($ Id.VSub_DollarName raw_dir) <'/lisa.'> <Id.Lit_Star '*'> <.times.csv>}] right: <Id.Right_ShArrayLiteral _> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <csv-concat> more_env: [] words: [ {<csv-concat>} { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name a> var_name: a bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>}) ) right: <Id.Right_DollarBrace '}'> ) } { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name b> var_name: b bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>}) ) right: <Id.Right_DollarBrace '}'> ) } ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName times_csv)} ) ] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'vm_csv='> ($ Id.VSub_DollarName out_dir) <'/virtual-memory.csv'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<-a>} {<Id.Lit_VarLike 'c='> (ShArrayLiteral left: <Id.Op_LParen _> words: [ {($ Id.VSub_DollarName raw_dir) <'/flanders.'> <Id.Lit_Star '*'> <.virtual-memory> } ] right: <Id.Right_ShArrayLiteral _> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<-a>} {<Id.Lit_VarLike 'd='> (ShArrayLiteral left: <Id.Op_LParen _> words: [ {($ Id.VSub_DollarName raw_dir) <'/lisa.'> <Id.Lit_Star '*'> <.virtual-memory>} ] right: <Id.Right_ShArrayLiteral _> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <'benchmarks/virtual_memory.py'> more_env: [] words: [ {<'benchmarks/virtual_memory.py'>} {<osh-runtime>} { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name c> var_name: c bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>}) ) right: <Id.Right_DollarBrace '}'> ) } { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name d> var_name: d bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>}) ) right: <Id.Right_DollarBrace '}'> ) } ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName vm_csv)} ) ] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <print-report> name: print-report body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'in_dir='> ($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'base_url='> (SQ <'../../web'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'<!DOCTYPE html>\n'> <'<html>\n'> <' <head>\n'> <' <title>OSH Runtime Performance</title>\n'> <' <script type='> <Id.Right_DoubleQuote '"'> <'text/javascript'> <Id.Right_DoubleQuote '"'> <' src='> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName base_url) <'/table/table-sort.js'> <Id.Right_DoubleQuote '"'> <'></script>\n'> <' <link rel='> <Id.Right_DoubleQuote '"'> <stylesheet> <Id.Right_DoubleQuote '"'> <' type='> <Id.Right_DoubleQuote '"'> <'text/css'> <Id.Right_DoubleQuote '"'> <' href='> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName base_url) <'/table/table-sort.css'> <Id.Right_DoubleQuote '"'> <' />\n'> <' <link rel='> <Id.Right_DoubleQuote '"'> <stylesheet> <Id.Right_DoubleQuote '"'> <' type='> <Id.Right_DoubleQuote '"'> <'text/css'> <Id.Right_DoubleQuote '"'> <' href='> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName base_url) <'/benchmarks.css'> <Id.Right_DoubleQuote '"'> <' />\n'> <'\n'> <' </head>\n'> <' <body>\n'> <' <p id='> <Id.Right_DoubleQuote '"'> <home-link> <Id.Right_DoubleQuote '"'> <'>\n'> <' <a href='> <Id.Right_DoubleQuote '"'> <'/'> <Id.Right_DoubleQuote '"'> <'>oilshell.org</a>\n'> <' </p>\n'> <' <h2>OSH Runtime Performance</h2>\n'> <'\n'> <' <h3>Elapsed Time by Shell (milliseconds)</h3>\n'> <'\n'> < ' <p>Some benchmarks call many external tools, while some exercise the shell\n' > <' interpreter itself. Parse time is included.</p>\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <csv2html> more_env: [] words: [{<csv2html>} {($ Id.VSub_DollarName in_dir) <'/times.csv'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <' <h3>Memory Used to Run</h3>\n'> <'\n'> < ' <p>Running under <code>osh-ovm</code>. Memory usage is measured in MB\n' > <' (powers of 10), not MiB (powers of 2).</p>\n'> <'\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <csv2html> more_env: [] words: [{<csv2html>} {($ Id.VSub_DollarName in_dir) <'/virtual-memory.csv'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [<'\n'> <' <h3>Shell and Host Details</h3>\n'>] ) ) ] do_fork: T ) (command.Simple blame_tok: <csv2html> more_env: [] words: [{<csv2html>} {($ Id.VSub_DollarName in_dir) <'/shells.csv'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <csv2html> more_env: [] words: [{<csv2html>} {($ Id.VSub_DollarName in_dir) <'/hosts.csv'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [<' </body>\n'> <'</html>\n'>] ) ) ] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <abuild-h> name: abuild-h body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<Id.Lit_VarLike 'out_dir='> <'_tmp/osh-runtime'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName out_dir)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'out='> ($ Id.VSub_DollarName out_dir) <'/abuild-h-times.csv'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(SQ <'status,elapsed_secs,sh_path'>)}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName out)} ) ] do_fork: T ) (command.ForEach keyword: <Id.KW_For for> iter_names: [sh_path] iterable: (for_iter.Words words: [{<bash>} {<dash>} {<mksh>} {<zsh>} {($ Id.VSub_DollarName OSH_OVM)}] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <'benchmarks/time.py'> more_env: [] words: [ {<'benchmarks/time.py'>} {<--output>} {($ Id.VSub_DollarName out)} {<--field>} {(DQ ($ Id.VSub_DollarName sh_path))} {<-->} {($ Id.VSub_DollarName sh_path)} {<'benchmarks/testdata/abuild'>} {<-h>} ] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <qemu-old> name: qemu-old body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [ {<local>} {<Id.Lit_VarLike 'out_dir='> ($ Id.VSub_DollarName PWD) <'/_tmp/qemu-old'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName out_dir)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <configure-and-copy> more_env: [] words: [ {<configure-and-copy>} {(word_part.TildeSub token:<Id.Lit_TildeLike '~'>) <'/src/qemu-1.6.0'>} {($ Id.VSub_DollarName OSH_OVM)} {($ Id.VSub_DollarName out_dir)} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <self-exe> name: self-exe body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<Id.Lit_Other '+'> <o>} {<errexit>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <dash> more_env: [] words: [{<dash>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [<'/proc/self/exe -V\n'>] ) ) ] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <'_bin/osh'> more_env: [] words: [{<'_bin/osh'>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [<'/proc/self/exe -V\n'>] ) ) ] do_fork: T ) (command.Simple blame_tok: <'_tmp/shells/ash'> more_env: [] words: [{<'_tmp/shells/ash'>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [<'/proc/self/exe -V\n'>] ) ) ] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Simple blame_tok: <Id.Left_DoubleQuote '"'> more_env: [] words: [{(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] )