(command.CommandList
  children: [
    (C {<set>} {<-o>} {<nounset>})
    (C {<set>} {<-o>} {<pipefail>})
    (C {<set>} {<-o>} {<errexit>})
    (C {<source>} {<'test/common.sh'>})
    (C {<source>} {<'benchmarks/common.sh'>})
    (C {<readonly>} {<Id.Lit_VarLike 'BASE_DIR='> <'_tmp/osh-runtime'>})
    (C {<readonly>} {<Id.Lit_VarLike 'TAR_DIR='> ($ Id.VSub_DollarName '$PWD') <'/_deps/osh-runtime'>})
    (C {<readonly>} {<-a>} 
      {<Id.Lit_VarLike 'TAR_SUBDIRS='> 
        (sh_array_literal
          left: <Id.Op_LParen _>
          words: [{<ocaml-4.06.0>} {<tcc-0.9.26>} {<yash-2.46>}]
        )
      }
    )
    (command.ShFunction
      name: tarballs
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 110
                      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
            )
          ]
        )
    )
    (command.ShFunction
      name: download
      body: 
        (BraceGroup
          children: [
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$TAR_DIR')})
            (command.Pipeline
              children: [
                (C {<tarballs>})
                (C {<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/{}'>)}
                )
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: extract
      body: 
        (BraceGroup
          children: [
            (command.TimeBlock
              pipeline: 
                (command.ForEach
                  iter_name: f
                  iter_words: [
                    (word.BracedTree
                      parts: [
                        ($ Id.VSub_DollarName '$TAR_DIR')
                        <'/'>
                        <Id.Lit_Star '*'>
                        <.>
                        (word_part.BracedTuple words:[{<bz2>} {<xz>}])
                      ]
                    )
                  ]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (C {<tar>} {<-x>} {<--directory>} {($ Id.VSub_DollarName '$TAR_DIR')} {<--file>} 
                          {($ Id.VSub_DollarName '$f')}
                        )
                      ]
                    )
                )
            )
            (C {<ls>} {<-l>} {($ Id.VSub_DollarName '$TAR_DIR')})
          ]
        )
    )
    (C {<readonly>} {<Id.Lit_VarLike 'PY27_DIR='> ($ Id.VSub_DollarName '$PWD') <'/Python-2.7.13'>})
    (command.ShFunction
      name: cpython-configure
      body: 
        (BraceGroup
          children: [
            (C {<local>} 
              {<Id.Lit_VarLike 'sh_path='> 
                (braced_var_sub
                  token: <Id.VSub_Number 1>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<bash>})
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'out_dir='> 
                (braced_var_sub
                  token: <Id.VSub_Number 2>
                  suffix_op: 
                    (suffix_op.Unary
                      tok: <Id.VTest_ColonHyphen ':-'>
                      arg_word: 
                        {($ Id.VSub_DollarName '$BASE_DIR') <Id.Lit_Slash '/'> 
                          (${ Id.VSub_Name sh_path) <-cpython-configure>
                        }
                    )
                )
              }
            )
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$out_dir')})
            (C {<pushd>} {($ Id.VSub_DollarName '$out_dir')})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.TimeBlock
                  pipeline: 
                    (C {($ Id.VSub_DollarName '$sh_path')} 
                      {($ Id.VSub_DollarName '$PY27_DIR') <'/configure'>}
                    )
                )
                (C {<true>})
              ]
            )
            (C {<popd>})
            (C {<tree>} {($ Id.VSub_DollarName '$out_dir')})
          ]
        )
    )
    (command.ShFunction
      name: osh-cpython-configure
      body: 
        (BraceGroup
          children: [
            (C {<cpython-configure>} {($ Id.VSub_DollarName '$OSH_OVM')} 
              {($ Id.VSub_DollarName '$BASE_DIR') <'/osh-cpython-configure'>}
            )
          ]
        )
    )
    (command.ShFunction
      name: runtime-task
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'raw_dir='> ($ Id.VSub_Number '$1')})
            (C {<local>} {<Id.Lit_VarLike 'job_id='> ($ Id.VSub_Number '$2')})
            (C {<local>} {<Id.Lit_VarLike 'host='> ($ Id.VSub_Number '$3')})
            (C {<local>} {<Id.Lit_VarLike 'host_hash='> ($ Id.VSub_Number '$4')})
            (C {<local>} {<Id.Lit_VarLike 'sh_path='> ($ Id.VSub_Number '$5')})
            (C {<local>} {<Id.Lit_VarLike 'shell_hash='> ($ Id.VSub_Number '$6')})
            (C {<local>} {<Id.Lit_VarLike 'task_type='> ($ Id.VSub_Number '$7')})
            (C {<local>} {<Id.Lit_VarLike 'task_arg='> ($ Id.VSub_Number '$8')})
            (C {<local>} 
              {<Id.Lit_VarLike 'shell_name='> 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: (C {<basename>} {($ Id.VSub_DollarName '$sh_path')})
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'x='> 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: (C {<basename>} {($ Id.VSub_DollarName '$task_arg')})
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'task_label='> 
                (DQ (${ Id.VSub_Name shell_name) <-> (${ Id.VSub_Name shell_hash) <__> 
                  (${ Id.VSub_Name x)
                )
              }
            )
            (C {<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>
                )
              }
            )
            (C {<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>
                )
              }
            )
            (C {<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')
                )
              }
            )
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$vm_out_dir')} 
              {($ Id.VSub_DollarName '$files_out_dir')}
            )
            (C {<local>} {<-a>} 
              {<Id.Lit_VarLike 'TIME_PREFIX='> 
                (sh_array_literal
                  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'))}
                  ]
                )
              }
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:extra_args)
                  op: assign_op.Equal
                  rhs: {(SQ )}
                  spids: [549]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<test>} {(DQ ($ Id.VSub_DollarName '$shell_name'))} 
                              {<Id.Lit_Equals '='>} {(SQ <osh>)}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<local>} 
                      {<Id.Lit_VarLike 'pdump='> 
                        (DQ (${ Id.VSub_Name vm_out_dir) <'/'> (${ Id.VSub_Name task_label) 
                          <__parser.txt>
                        )
                      }
                    )
                    (C {<local>} 
                      {<Id.Lit_VarLike 'rdump='> 
                        (DQ (${ Id.VSub_Name vm_out_dir) <'/'> (${ Id.VSub_Name task_label) 
                          <__runtime.txt>
                        )
                      }
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:extra_args)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ <'--parser-mem-dump '> ($ Id.VSub_DollarName '$pdump') 
                                <' --runtime-mem-dump '> ($ Id.VSub_DollarName '$rdump')
                              )
                            }
                          spids: [602]
                        )
                      ]
                    )
                  ]
                  spids: [554 569]
                )
              ]
            )
            (C {<echo>})
            (C {<echo>} 
              {
                (DQ <'--- '> ($ Id.VSub_DollarName '$sh_path') <' '> ($ Id.VSub_DollarName '$task_type') 
                  <' '> ($ Id.VSub_DollarName '$task_arg') <' ---'>
                )
              }
            )
            (C {<echo>})
            (command.Case
              to_match: {($ Id.VSub_DollarName '$task_type')}
              arms: [
                (case_arm
                  pat_list: [{<abuild>}]
                  action: [
                    (command.Simple
                      words: [
                        {
                          (DQ 
                            (braced_var_sub
                              token: <Id.VSub_Name TIME_PREFIX>
                              bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                            )
                          )
                        }
                        {<-->}
                        {(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
                    )
                  ]
                  spids: [647 648 688 -1]
                )
                (case_arm
                  pat_list: [{<cpython>}]
                  action: [
                    (command.Simple
                      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
                      words: [
                        {
                          (DQ 
                            (braced_var_sub
                              token: <Id.VSub_Name TIME_PREFIX>
                              bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                            )
                          )
                        }
                        {<-->}
                        {(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
                      words: [{<popd>}]
                      redirects: [
                        (redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<'/dev/null'>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  spids: [692 693 760 -1]
                )
                (case_arm
                  pat_list: [{<configure>}]
                  action: [
                    (C {<local>} {<Id.Lit_VarLike 'conf_dir='> ($ Id.VSub_DollarName '$task_arg')})
                    (command.Simple
                      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
                    )
                    (C {<touch>} {<__TIMESTAMP>})
                    (command.Simple
                      words: [
                        {
                          (DQ 
                            (braced_var_sub
                              token: <Id.VSub_Name TIME_PREFIX>
                              bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                            )
                          )
                        }
                        {<-->}
                        {(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: [
                        (C {<find>} {<.>} {<-type>} {<f>} {<-newer>} {<__TIMESTAMP>})
                        (C {<xargs>} {<-I>} {<Id.Lit_LBrace '{'> <Id.Lit_RBrace '}'>} {<-->} {<cp>} 
                          {<--verbose>} {<Id.Lit_LBrace '{'> <Id.Lit_RBrace '}'>} {($ Id.VSub_DollarName '$files_out_dir')}
                        )
                      ]
                      negated: F
                    )
                    (command.Simple
                      words: [{<popd>}]
                      redirects: [
                        (redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<'/dev/null'>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  spids: [764 765 858 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [(C {<die>} {(DQ <'Invalid task type '> ($ Id.VSub_DollarName '$task_type'))})]
                  spids: [862 863 874 -1]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: print-tasks
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'provenance='> ($ Id.VSub_Number '$1')})
            (command.Pipeline
              children: [
                (C {<cat>} {($ Id.VSub_DollarName '$provenance')})
                (command.WhileUntil
                  keyword: <Id.KW_While while>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<read>} {<job_id>} {<host_name>} {<host_hash>} {<sh_path>} {<shell_hash>})
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  body: 
                    (command.DoGroup
                      children: [
                        (command.Case
                          to_match: {($ Id.VSub_DollarName '$sh_path')}
                          arms: [
                            (case_arm
                              pat_list: [{<mksh>} {<zsh>} {<'bin/osh'>}]
                              action: [
                                (C {<log>} {(DQ <'--- Skipping '> ($ Id.VSub_DollarName '$sh_path'))})
                                (command.ControlFlow
                                  token: <Id.ControlFlow_Continue continue>
                                )
                              ]
                              spids: [1004 1009 1023 -1]
                            )
                          ]
                        )
                        (command.Case
                          to_match: {($ Id.VSub_DollarName '$sh_path')}
                          arms: [
                            (case_arm
                              pat_list: [{<Id.Lit_Star '*'> <'/osh'>}]
                              action: [
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:sh_path)
                                      op: assign_op.Equal
                                      rhs: 
                                        {($ Id.VSub_DollarName '$PWD') <'/'> 
                                          ($ Id.VSub_DollarName '$sh_path')
                                        }
                                      spids: [1046]
                                    )
                                  ]
                                )
                              ]
                              spids: [1041 1043 1052 -1]
                            )
                          ]
                        )
                        (C {<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')
                            )
                          }
                        )
                        (C {<echo>} {(DQ ($ Id.VSub_DollarName '$prefix'))} {<abuild>} {<abuild-help>})
                        (C {<echo>} {(DQ ($ Id.VSub_DollarName '$prefix'))} {<cpython>} 
                          {<cpython-configure>}
                        )
                        (command.ForEach
                          iter_name: dir
                          iter_words: [
                            {
                              (DQ 
                                (braced_var_sub
                                  token: <Id.VSub_Name TAR_SUBDIRS>
                                  bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                )
                              )
                            }
                          ]
                          do_arg_iter: F
                          body: 
                            (command.DoGroup
                              children: [
                                (C {<echo>} {(DQ ($ Id.VSub_DollarName '$prefix'))} {<configure>} 
                                  {($ Id.VSub_DollarName '$TAR_DIR') <'/'> 
                                    ($ Id.VSub_DollarName '$dir')
                                  }
                                )
                              ]
                            )
                        )
                      ]
                    )
                )
              ]
              negated: F
            )
          ]
        )
    )
    (C {<readonly>} 
      {<Id.Lit_VarLike 'HEADER='> 
        (SQ <'status,elapsed_secs,host_name,host_hash,shell_name,shell_hash,task_type,task_arg'>)
      }
    )
    (C {<readonly>} {<Id.Lit_VarLike 'NUM_COLUMNS='> <7>})
    (command.ShFunction
      name: measure
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'provenance='> ($ Id.VSub_Number '$1')})
            (C {<local>} 
              {<Id.Lit_VarLike 'raw_dir='> 
                (braced_var_sub
                  token: <Id.VSub_Number 2>
                  suffix_op: 
                    (suffix_op.Unary
                      tok: <Id.VTest_ColonHyphen ':-'>
                      arg_word: {($ Id.VSub_DollarName '$BASE_DIR') <Id.Lit_Slash '/'> <raw>}
                    )
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'pattern='> 
                (braced_var_sub
                  token: <Id.VSub_Number 3>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{})
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'name='> 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: (C {<basename>} {($ Id.VSub_DollarName '$provenance')})
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'prefix='> 
                (braced_var_sub
                  token: <Id.VSub_Name name>
                  suffix_op: (suffix_op.Unary tok:<Id.VOp1_Percent '%'> arg_word:{<.provenance.txt>})
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'times_out='> 
                (DQ ($ Id.VSub_DollarName '$raw_dir') <'/'> ($ Id.VSub_DollarName '$prefix') 
                  <.times.csv>
                )
              }
            )
            (C {<mkdir>} {<-p>} 
              (word.BracedTree
                parts: [
                  ($ Id.VSub_DollarName '$BASE_DIR')
                  <'/'>
                  (word_part.BracedTuple words:[{<raw>} {<stage1>}])
                ]
              ) {($ Id.VSub_DollarName '$raw_dir')}
            )
            (command.Simple
              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
            )
            (C {<local>} {<Id.Lit_VarLike 'tasks='> ($ Id.VSub_DollarName '$BASE_DIR') <'/tasks.txt'>})
            (command.Simple
              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
              ops: [Id.Op_DPipe]
              children: [
                (command.TimeBlock
                  pipeline: 
                    (command.Pipeline
                      children: [
                        (C {<egrep>} {(DQ ($ Id.VSub_DollarName '$pattern'))} 
                          {($ Id.VSub_DollarName '$tasks')}
                        )
                        (C {<xargs>} {<-n>} {($ Id.VSub_DollarName '$NUM_COLUMNS')} {<-->} 
                          {($ Id.VSub_Number '$0')} {<runtime-task>} {($ Id.VSub_DollarName '$raw_dir')}
                        )
                      ]
                      negated: F
                    )
                )
                (C {<die>} {(DQ <'*** Some tasks failed. ***'>)})
              ]
            )
            (C {<cp>} {<-v>} {($ Id.VSub_DollarName '$provenance')} {($ Id.VSub_DollarName '$raw_dir')})
          ]
        )
    )
    (command.ShFunction
      name: stage1
      body: 
        (BraceGroup
          children: [
            (C {<local>} 
              {<Id.Lit_VarLike 'raw_dir='> 
                (braced_var_sub
                  token: <Id.VSub_Number 1>
                  suffix_op: 
                    (suffix_op.Unary
                      tok: <Id.VTest_ColonHyphen ':-'>
                      arg_word: {($ Id.VSub_DollarName '$BASE_DIR') <Id.Lit_Slash '/'> <raw>}
                    )
                )
              }
            )
            (C {<local>} {<Id.Lit_VarLike 'out_dir='> ($ Id.VSub_DollarName '$BASE_DIR') <'/stage1'>})
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$out_dir')})
            (C {<local>} 
              {<Id.Lit_VarLike 'times_csv='> ($ Id.VSub_DollarName '$out_dir') <'/times.csv'>}
            )
            (C {<local>} {<-a>} 
              {<Id.Lit_VarLike 'a='> 
                (sh_array_literal
                  left: <Id.Op_LParen _>
                  words: [
                    {($ Id.VSub_DollarName '$raw_dir') <'/flanders.'> <Id.Lit_Star '*'> <.times.csv>}
                  ]
                )
              }
            )
            (C {<local>} {<-a>} 
              {<Id.Lit_VarLike 'b='> 
                (sh_array_literal
                  left: <Id.Op_LParen _>
                  words: [
                    {($ Id.VSub_DollarName '$raw_dir') <'/lisa.'> <Id.Lit_Star '*'> <.times.csv>}
                  ]
                )
              }
            )
            (command.Simple
              words: [
                {<csv-concat>}
                {
                  (braced_var_sub
                    token: <Id.VSub_Name a>
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                      )
                  )
                }
                {
                  (braced_var_sub
                    token: <Id.VSub_Name b>
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                      )
                  )
                }
              ]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName '$times_csv')}
                )
              ]
              do_fork: T
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'vm_csv='> ($ Id.VSub_DollarName '$out_dir') <'/virtual-memory.csv'>}
            )
            (C {<local>} {<-a>} 
              {<Id.Lit_VarLike 'c='> 
                (sh_array_literal
                  left: <Id.Op_LParen _>
                  words: [
                    {($ Id.VSub_DollarName '$raw_dir') <'/flanders.'> <Id.Lit_Star '*'> 
                      <.virtual-memory>
                    }
                  ]
                )
              }
            )
            (C {<local>} {<-a>} 
              {<Id.Lit_VarLike 'd='> 
                (sh_array_literal
                  left: <Id.Op_LParen _>
                  words: [
                    {($ Id.VSub_DollarName '$raw_dir') <'/lisa.'> <Id.Lit_Star '*'> <.virtual-memory>}
                  ]
                )
              }
            )
            (command.Simple
              words: [
                {<'benchmarks/virtual_memory.py'>}
                {<osh-runtime>}
                {
                  (braced_var_sub
                    token: <Id.VSub_Name c>
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                      )
                  )
                }
                {
                  (braced_var_sub
                    token: <Id.VSub_Name d>
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                      )
                  )
                }
              ]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName '$vm_csv')}
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: print-report
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'in_dir='> ($ Id.VSub_Number '$1')})
            (C {<local>} {<Id.Lit_VarLike 'base_url='> (SQ <'../../web'>)})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 1589
                      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
            )
            (C {<csv2html>} {($ Id.VSub_DollarName '$in_dir') <'/times.csv'>})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 1609
                      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
            )
            (C {<csv2html>} {($ Id.VSub_DollarName '$in_dir') <'/virtual-memory.csv'>})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 1626
                      stdin_parts: [<'\n'> <'    <h3>Shell and Host Details</h3>\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (C {<csv2html>} {($ Id.VSub_DollarName '$in_dir') <'/shells.csv'>})
            (C {<csv2html>} {($ Id.VSub_DollarName '$in_dir') <'/hosts.csv'>})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 1649
                      stdin_parts: [<'  </body>\n'> <'</html>\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: abuild-h
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'out_dir='> <'_tmp/osh-runtime'>})
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$out_dir')})
            (C {<local>} 
              {<Id.Lit_VarLike 'out='> ($ Id.VSub_DollarName '$out_dir') <'/abuild-h-times.csv'>}
            )
            (command.Simple
              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
              iter_name: sh_path
              iter_words: [{<bash>} {<dash>} {<mksh>} {<zsh>} {($ Id.VSub_DollarName '$OSH_OVM')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {<'benchmarks/time.py'>} {<--output>} {($ Id.VSub_DollarName '$out')} {<--field>} 
                      {(DQ ($ Id.VSub_DollarName '$sh_path'))} {<-->} {($ Id.VSub_DollarName '$sh_path')} {<'benchmarks/testdata/abuild'>} {<-h>}
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: qemu-old
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'out_dir='> ($ Id.VSub_DollarName '$PWD') <'/_tmp/qemu-old'>})
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$out_dir')})
            (C {<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')}
            )
          ]
        )
    )
    (command.ShFunction
      name: self-exe
      body: 
        (BraceGroup
          children: [
            (C {<set>} {<Id.Lit_Other '+'> <o>} {<errexit>})
            (command.Simple
              words: [{<dash>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 1829
                      stdin_parts: [<'/proc/self/exe -V\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (C {<echo>})
            (command.Simple
              words: [{<'_bin/osh'>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 1842
                      stdin_parts: [<'/proc/self/exe -V\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              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_span_id: 1852
                      stdin_parts: [<'/proc/self/exe -V\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (C {(DQ ($ Id.VSub_At '$@'))})
  ]
)