(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 {(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: (Token id:Id.Op_LParen val:'(' span_id:80)
          words: [{(ocaml-4.06.0)} {(tcc-0.9.26)} {(yash-2.46)}]
        )
      }
    )
    (command.ShFunction
      name: tarballs
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:103)
                  fd: -1
                  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')
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: download
      body: 
        (command.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 
                      (Token
                        id: Id.Lit_Chars
                        val: 'https://www.oilshell.org/blob/testdata/{}'
                        span_id: 156
                      )
                    )
                  }
                )
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: extract
      body: 
        (command.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: 
        (command.BraceGroup
          children: [
            (C {(local)} 
              {(Id.Lit_VarLike 'sh_path=') 
                (braced_var_sub
                  token: (Token id:Id.VSub_Number val:1 span_id:245)
                  suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(bash)})
                )
              }
            )
            (C {(local)} 
              {(Id.Lit_VarLike 'out_dir=') 
                (braced_var_sub
                  token: (Token id:Id.VSub_Number val:2 span_id:255)
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: 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: 
        (command.BraceGroup
          children: [
            (C {(cpython-configure)} {($ Id.VSub_DollarName '$OSH_OVM')} 
              {($ Id.VSub_DollarName '$BASE_DIR') (/osh-cpython-configure)}
            )
          ]
        )
    )
    (command.ShFunction
      name: runtime-task
      body: 
        (command.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: (Token id:Id.Left_DollarParen val:'$(' span_id:384)
                  command_list: 
                    (command.CommandList
                      children: [(C {(basename)} {($ Id.VSub_DollarName '$sh_path')})]
                    )
                )
              }
            )
            (C {(local)} 
              {(Id.Lit_VarLike 'x=') 
                (command_sub
                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:399)
                  command_list: 
                    (command.CommandList
                      children: [(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: (Token id:Id.Op_LParen val:'(' span_id:486)
                  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: [
                    (command.Sentence
                      child: 
                        (C {(test)} {(DQ ($ Id.VSub_DollarName '$shell_name'))} {(Id.Lit_Equals '=')} 
                          {(SQ (Token id:Id.Lit_Chars val:osh span_id:565))}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:567)
                    )
                  ]
                  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: (Token id:Id.VSub_Name val:TIME_PREFIX span_id:659)
                              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.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:682)
                          fd: -1
                          arg_word: {($ Id.VSub_DollarName '$files_out_dir') (/STDOUT.txt)}
                        )
                      ]
                    )
                  ]
                  spids: [647 648 688 -1]
                )
                (case_arm
                  pat_list: [{(cpython)}]
                  action: [
                    (command.Simple
                      words: [{(pushd)} {($ Id.VSub_DollarName '$files_out_dir')}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:718)
                          fd: -1
                          arg_word: {(/dev/null)}
                        )
                      ]
                    )
                    (command.Simple
                      words: [
                        {
                          (DQ 
                            (braced_var_sub
                              token: (Token id:Id.VSub_Name val:TIME_PREFIX span_id:725)
                              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.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:747)
                          fd: -1
                          arg_word: {($ Id.VSub_DollarName '$files_out_dir') (/STDOUT.txt)}
                        )
                      ]
                    )
                    (command.Simple
                      words: [{(popd)}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:756)
                          fd: -1
                          arg_word: {(/dev/null)}
                        )
                      ]
                    )
                  ]
                  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.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:779)
                          fd: -1
                          arg_word: {(/dev/null)}
                        )
                      ]
                    )
                    (C {(touch)} {(__TIMESTAMP)})
                    (command.Simple
                      words: [
                        {
                          (DQ 
                            (braced_var_sub
                              token: (Token id:Id.VSub_Name val:TIME_PREFIX span_id:791)
                              bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                            )
                          )
                        }
                        {(--)}
                        {(DQ ($ Id.VSub_DollarName '$sh_path'))}
                        {($ Id.VSub_DollarName '$extra_args')}
                        {(./configure)}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:810)
                          fd: -1
                          arg_word: {($ Id.VSub_DollarName '$files_out_dir') (/STDOUT.txt)}
                        )
                      ]
                    )
                    (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.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:854)
                          fd: -1
                          arg_word: {(/dev/null)}
                        )
                      ]
                    )
                  ]
                  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: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'provenance=') ($ Id.VSub_Number '$1')})
            (command.Pipeline
              children: [
                (C {(cat)} {($ Id.VSub_DollarName '$provenance')})
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:976)
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(read)} {(job_id)} {(host_name)} {(host_hash)} {(sh_path)} {(shell_hash)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:991)
                    )
                  ]
                  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: (Token id:Id.ControlFlow_Continue val:continue span_id:1020)
                                )
                              ]
                              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: (Token id:Id.VSub_Name val:TAR_SUBDIRS span_id:1110)
                                  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 
          (Token
            id: Id.Lit_Chars
            val: 'status,elapsed_secs,host_name,host_hash,shell_name,shell_hash,task_type,task_arg'
            span_id: 1146
          )
        )
      }
    )
    (C {(readonly)} {(Id.Lit_VarLike 'NUM_COLUMNS=') (7)})
    (command.ShFunction
      name: measure
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'provenance=') ($ Id.VSub_Number '$1')})
            (C {(local)} 
              {(Id.Lit_VarLike 'raw_dir=') 
                (braced_var_sub
                  token: (Token id:Id.VSub_Number val:2 span_id:1175)
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {($ Id.VSub_DollarName '$BASE_DIR') (Id.Lit_Slash /) (raw)}
                    )
                )
              }
            )
            (C {(local)} 
              {(Id.Lit_VarLike 'pattern=') 
                (braced_var_sub
                  token: (Token id:Id.VSub_Number val:3 span_id:1187)
                  suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{})
                )
              }
            )
            (C {(local)} 
              {(Id.Lit_VarLike 'name=') 
                (command_sub
                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1205)
                  command_list: 
                    (command.CommandList
                      children: [(C {(basename)} {($ Id.VSub_DollarName '$provenance')})]
                    )
                )
              }
            )
            (C {(local)} 
              {(Id.Lit_VarLike 'prefix=') 
                (braced_var_sub
                  token: (Token id:Id.VSub_Name val:name span_id:1216)
                  suffix_op: (suffix_op.Unary op_id: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.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:1261)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$times_out')}
                )
              ]
            )
            (C {(local)} {(Id.Lit_VarLike 'tasks=') ($ Id.VSub_DollarName '$BASE_DIR') (/tasks.txt)})
            (command.Simple
              words: [{(print-tasks)} {($ Id.VSub_DollarName '$provenance')}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:1278)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$tasks')}
                )
              ]
            )
            (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: 
        (command.BraceGroup
          children: [
            (C {(local)} 
              {(Id.Lit_VarLike 'raw_dir=') 
                (braced_var_sub
                  token: (Token id:Id.VSub_Number val:1 span_id:1348)
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: 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: (Token id:Id.Op_LParen val:'(' span_id:1388)
                  words: [
                    {($ Id.VSub_DollarName '$raw_dir') (/flanders.) (Id.Lit_Star '*') (.times.csv)}
                  ]
                )
              }
            )
            (C {(local)} {(-a)} 
              {(Id.Lit_VarLike 'b=') 
                (sh_array_literal
                  left: (Token id:Id.Op_LParen val:'(' span_id:1401)
                  words: [{($ Id.VSub_DollarName '$raw_dir') (/lisa.) (Id.Lit_Star '*') (.times.csv)}]
                )
              }
            )
            (command.Simple
              words: [
                {(csv-concat)}
                {
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:a span_id:1412)
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: 
                          (arith_expr.Unary
                            op_id: Id.Node_UnaryMinus
                            child: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                          )
                      )
                  )
                }
                {
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:b span_id:1420)
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: 
                          (arith_expr.Unary
                            op_id: Id.Node_UnaryMinus
                            child: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                          )
                      )
                  )
                }
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:1427)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$times_csv')}
                )
              ]
            )
            (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: (Token id:Id.Op_LParen val:'(' span_id:1446)
                  words: [
                    {($ Id.VSub_DollarName '$raw_dir') (/flanders.) (Id.Lit_Star '*') (.virtual-memory)}
                  ]
                )
              }
            )
            (C {(local)} {(-a)} 
              {(Id.Lit_VarLike 'd=') 
                (sh_array_literal
                  left: (Token id:Id.Op_LParen val:'(' span_id:1459)
                  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: (Token id:Id.VSub_Name val:c span_id:1472)
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: 
                          (arith_expr.Unary
                            op_id: Id.Node_UnaryMinus
                            child: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                          )
                      )
                  )
                }
                {
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:d span_id:1480)
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: 
                          (arith_expr.Unary
                            op_id: Id.Node_UnaryMinus
                            child: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                          )
                      )
                  )
                }
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:1487)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$vm_csv')}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: print-report
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'in_dir=') ($ Id.VSub_Number '$1')})
            (C {(local)} 
              {(Id.Lit_VarLike 'base_url=') (SQ (Token id:Id.Lit_Chars val:../../web span_id:1516))}
            )
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1523)
                  fd: -1
                  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')
                  ]
                )
              ]
            )
            (C {(csv2html)} {($ Id.VSub_DollarName '$in_dir') (/times.csv)})
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1600)
                  fd: -1
                  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')
                  ]
                )
              ]
            )
            (C {(csv2html)} {($ Id.VSub_DollarName '$in_dir') (/virtual-memory.csv)})
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1620)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 1626
                  stdin_parts: [('\n') ('    <h3>Shell and Host Details</h3>\n')]
                )
              ]
            )
            (C {(csv2html)} {($ Id.VSub_DollarName '$in_dir') (/shells.csv)})
            (C {(csv2html)} {($ Id.VSub_DollarName '$in_dir') (/hosts.csv)})
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1643)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 1649
                  stdin_parts: [('  </body>\n') ('</html>\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: abuild-h
      body: 
        (command.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 (Token id:Id.Lit_Chars val:'status,elapsed_secs,sh_path' span_id:1699))}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:1702)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$out')}
                )
              ]
            )
            (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: 
        (command.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:(Token id:Id.Lit_TildeLike val:'~' span_id:1791)) 
                (/src/qemu-1.6.0)
              } {($ Id.VSub_DollarName '$OSH_OVM')} {($ Id.VSub_DollarName '$out_dir')}
            )
          ]
        )
    )
    (command.ShFunction
      name: self-exe
      body: 
        (command.BraceGroup
          children: [
            (C {(Id.KW_Set set)} {(Id.Lit_Other '+') (o)} {(errexit)})
            (command.Simple
              words: [{(dash)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1824)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 1829
                  stdin_parts: [('/proc/self/exe -V\n')]
                )
              ]
            )
            (C {(echo)})
            (command.Simple
              words: [{(_bin/osh)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1837)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 1842
                  stdin_parts: [('/proc/self/exe -V\n')]
                )
              ]
            )
            (command.Simple
              words: [{(_tmp/shells/ash)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1847)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 1852
                  stdin_parts: [('/proc/self/exe -V\n')]
                )
              ]
            )
          ]
        )
    )
    (C {(DQ ($ Id.VSub_At '$@'))})
  ]
)