(CommandList
  children: [
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (C {(set)} {(-o)} {(errexit)})
    (C {(source)} {(test/common.sh)})
    (C {(source)} {(benchmarks/common.sh)})
    (Assignment
      keyword: Assign_Readonly
      pairs: [(assign_pair lhs:(LhsName name:BASE_DIR) op:Equal rhs:{(_tmp/osh-runtime)} spids:[52])]
      spids: [50]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:TAR_DIR)
          op: Equal
          rhs: {($ VSub_Name '$PWD') (/_deps/osh-runtime)}
          spids: [57]
        )
      ]
      spids: [55]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:OSH)
          op: Equal
          rhs: {($ VSub_Name '$PWD') (/_bin/osh)}
          spids: [73]
        )
      ]
      spids: [71]
    )
    (FuncDef
      name: files
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {(DQ ('tcc-0.9.26.tar.bz2\n') ('yash-2.46.tar.xz\n') ('ocaml-4.06.0.tar.xz\n'))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [100]
                )
              ]
            )
          ]
          spids: [95]
        )
      spids: [91 94]
    )
    (FuncDef
      name: conf-dirs
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ($ VSub_Name '$TAR_DIR') ('/ocaml-4.06.0\n') ($ VSub_Name '$TAR_DIR') 
                        ('/tcc-0.9.26\n') ($ VSub_Name '$TAR_DIR') ('/yash-2.46\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [119]
                )
              ]
            )
          ]
          spids: [114]
        )
      spids: [110 113]
    )
    (FuncDef
      name: download
      body: 
        (BraceGroup
          children: [
            (C {(mkdir)} {(-p)} {($ VSub_Name '$TAR_DIR')})
            (Pipeline
              children: [
                (C {(files)})
                (C {(xargs)} {(-n)} {(1)} {(-I)} {(Lit_LBrace '{') (Lit_RBrace '}')} {(--verbose)} {(--)} 
                  {(wget)} {(--directory)} {($ VSub_Name '$TAR_DIR')} {(SQ <'https://www.oilshell.org/blob/testdata/{}'>)}
                )
              ]
              negated: F
            )
          ]
          spids: [136]
        )
      spids: [132 135]
    )
    (FuncDef
      name: extract
      body: 
        (BraceGroup
          children: [
            (TimeBlock
              pipeline: 
                (ForEach
                  iter_name: f
                  iter_words: [
                    (BracedWordTree
                      parts: [
                        ($ VSub_Name '$TAR_DIR')
                        (/)
                        (Lit_Other '*')
                        (.)
                        (BracedAltPart words:[{(bz2)} {(xz)}])
                      ]
                    )
                  ]
                  do_arg_iter: F
                  body: 
                    (DoGroup
                      children: [
                        (C {(tar)} {(-x)} {(--directory)} {($ VSub_Name '$TAR_DIR')} {(--file)} 
                          {($ VSub_Name '$f')}
                        )
                      ]
                      spids: [206 223]
                    )
                  spids: [194 204]
                )
            )
            (C {(ls)} {(-l)} {($ VSub_Name '$TAR_DIR')})
          ]
          spids: [184]
        )
      spids: [180 183]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:PY27_DIR)
          op: Equal
          rhs: {($ VSub_Name '$PWD') (/Python-2.7.13)}
          spids: [247]
        )
      ]
      spids: [245]
    )
    (FuncDef
      name: cpython-configure
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sh_path)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(bash)})
                        spids: [262 266]
                      )
                    }
                  spids: [261]
                )
              ]
              spids: [259]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out_dir)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: 
                              {($ VSub_Name '$BASE_DIR') (Lit_Slash /) (${ VSub_Name sh_path) 
                                (-cpython-configure)
                              }
                          )
                        spids: [272 281]
                      )
                    }
                  spids: [271]
                )
              ]
              spids: [269]
            )
            (C {(mkdir)} {(-p)} {($ VSub_Name '$out_dir')})
            (C {(pushd)} {($ VSub_Name '$out_dir')})
            (AndOr
              ops: [Op_DPipe]
              children: [
                (TimeBlock
                  pipeline: (C {($ VSub_Name '$sh_path')} {($ VSub_Name '$PY27_DIR') (/configure)})
                )
                (C {(true)})
              ]
            )
            (C {(popd)})
            (C {(tree)} {($ VSub_Name '$out_dir')})
          ]
          spids: [256]
        )
      spids: [252 255]
    )
    (FuncDef
      name: osh-cpython-configure
      body: 
        (BraceGroup
          children: [
            (C {(cpython-configure)} {($ VSub_Name '$PWD') (/_bin/osh)} 
              {($ VSub_Name '$BASE_DIR') (/osh-cpython-configure)}
            )
          ]
          spids: [327]
        )
      spids: [323 326]
    )
    (FuncDef
      name: runtime-task
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:raw_dir)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [350]
                )
              ]
              spids: [348]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:job_id)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [359]
                )
              ]
              spids: [357]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:host)
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [365]
                )
              ]
              spids: [363]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:host_hash)
                  op: Equal
                  rhs: {($ VSub_Number '$4')}
                  spids: [371]
                )
              ]
              spids: [369]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sh_path)
                  op: Equal
                  rhs: {($ VSub_Number '$5')}
                  spids: [377]
                )
              ]
              spids: [375]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:shell_hash)
                  op: Equal
                  rhs: {($ VSub_Number '$6')}
                  spids: [383]
                )
              ]
              spids: [381]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:task_type)
                  op: Equal
                  rhs: {($ VSub_Number '$7')}
                  spids: [389]
                )
              ]
              spids: [387]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:task_arg)
                  op: Equal
                  rhs: {($ VSub_Number '$8')}
                  spids: [395]
                )
              ]
              spids: [393]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:shell_name)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {($ VSub_Name '$sh_path')})]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [403 407]
                      )
                    }
                  spids: [402]
                )
              ]
              spids: [400]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:x)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {($ VSub_Name '$task_arg')})]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [418 422]
                      )
                    }
                  spids: [417]
                )
              ]
              spids: [415]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:task_label)
                  op: Equal
                  rhs: 
                    {
                      (DQ (${ VSub_Name shell_name) (-) (${ VSub_Name shell_hash) (__) (${ VSub_Name x))
                    }
                  spids: [427]
                )
              ]
              spids: [425]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:times_out)
                  op: Equal
                  rhs: 
                    {
                      (DQ ($ VSub_Name '$PWD') (/) ($ VSub_Name '$raw_dir') (/) ($ VSub_Name '$host') (.) 
                        ($ VSub_Name '$job_id') (.times.csv)
                      )
                    }
                  spids: [446]
                )
              ]
              spids: [444]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:vm_out_dir)
                  op: Equal
                  rhs: 
                    {
                      (DQ ($ VSub_Name '$PWD') (/) ($ VSub_Name '$raw_dir') (/) ($ VSub_Name '$host') (.) 
                        ($ VSub_Name '$job_id') (.virtual-memory)
                      )
                    }
                  spids: [461]
                )
              ]
              spids: [459]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:files_out_dir)
                  op: Equal
                  rhs: 
                    {
                      (DQ ($ VSub_Name '$PWD') (/) ($ VSub_Name '$raw_dir') (/) ($ VSub_Name '$host') (.) 
                        ($ VSub_Name '$job_id') (.files/) ($ VSub_Name '$task_label')
                      )
                    }
                  spids: [476]
                )
              ]
              spids: [474]
            )
            (C {(mkdir)} {(-p)} {($ VSub_Name '$vm_out_dir')} {($ VSub_Name '$files_out_dir')})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:time_tool)
                  op: Equal
                  rhs: {($ VSub_Name '$PWD') (/benchmarks/time.py)}
                  spids: [502]
                )
              ]
              spids: [500]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-a]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:TIME_PREFIX)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {($ VSub_Name '$time_tool')}
                          {(--output)}
                          {($ VSub_Name '$times_out')}
                          {(--field)}
                          {(DQ ($ VSub_Name '$host'))}
                          {(--field)}
                          {(DQ ($ VSub_Name '$host_hash'))}
                          {(--field)}
                          {(DQ ($ VSub_Name '$shell_name'))}
                          {(--field)}
                          {(DQ ($ VSub_Name '$shell_hash'))}
                          {(--field)}
                          {(DQ ($ VSub_Name '$task_type'))}
                          {(--field)}
                          {(DQ ($ VSub_Name '$task_arg'))}
                        ]
                      )
                    }
                  spids: [511]
                )
              ]
              spids: [507]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:extra_args) op:Equal rhs:{(SQ )} spids:[574])]
              spids: [574]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(test)} {(DQ ($ VSub_Name '$shell_name'))} {(Lit_Other '=')} {(SQ <osh>)})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:pdump)
                          op: Equal
                          rhs: 
                            {
                              (DQ (${ VSub_Name vm_out_dir) (/) (${ VSub_Name task_label) (__parser.txt))
                            }
                          spids: [599]
                        )
                      ]
                      spids: [597]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:rdump)
                          op: Equal
                          rhs: 
                            {
                              (DQ (${ VSub_Name vm_out_dir) (/) (${ VSub_Name task_label) 
                                (__runtime.txt)
                              )
                            }
                          spids: [614]
                        )
                      ]
                      spids: [612]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:extra_args)
                          op: Equal
                          rhs: 
                            {
                              (DQ ('--parser-mem-dump ') ($ VSub_Name '$pdump') 
                                (' --runtime-mem-dump ') ($ VSub_Name '$rdump')
                              )
                            }
                          spids: [627]
                        )
                      ]
                      spids: [627]
                    )
                  ]
                  spids: [16777215 594]
                )
              ]
              spids: [16777215 641]
            )
            (C {(echo)})
            (C {(echo)} 
              {
                (DQ ('--- ') ($ VSub_Name '$sh_path') (' ') ($ VSub_Name '$task_type') (' ') 
                  ($ VSub_Name '$task_arg') (' ---')
                )
              }
            )
            (C {(echo)})
            (Case
              to_match: {($ VSub_Name '$task_type')}
              arms: [
                (case_arm
                  pat_list: [{(abuild)}]
                  action: [
                    (SimpleCommand
                      words: [
                        {
                          (DQ 
                            (BracedVarSub
                              token: <VSub_Name TIME_PREFIX>
                              bracket_op: (WholeArray op_id:Lit_At)
                              spids: [683 688]
                            )
                          )
                        }
                        {(--)}
                        {(DQ ($ VSub_Name '$sh_path'))}
                        {($ VSub_Name '$extra_args')}
                        {(testdata/osh-runtime/abuild)}
                        {(-h)}
                      ]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: {($ VSub_Name '$files_out_dir') (/STDOUT.txt)}
                          spids: [707]
                        )
                      ]
                    )
                  ]
                  spids: [672 673 713 16777215]
                )
                (case_arm
                  pat_list: [{(cpython)}]
                  action: [
                    (SimpleCommand
                      words: [{(pushd)} {($ VSub_Name '$files_out_dir')}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: {(/dev/null)}
                          spids: [743]
                        )
                      ]
                    )
                    (SimpleCommand
                      words: [
                        {
                          (DQ 
                            (BracedVarSub
                              token: <VSub_Name TIME_PREFIX>
                              bracket_op: (WholeArray op_id:Lit_At)
                              spids: [749 754]
                            )
                          )
                        }
                        {(--)}
                        {(DQ ($ VSub_Name '$sh_path'))}
                        {($ VSub_Name '$extra_args')}
                        {($ VSub_Name '$PY27_DIR') (/configure)}
                      ]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: {($ VSub_Name '$files_out_dir') (/STDOUT.txt)}
                          spids: [772]
                        )
                      ]
                    )
                    (SimpleCommand
                      words: [{(popd)}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: {(/dev/null)}
                          spids: [781]
                        )
                      ]
                    )
                  ]
                  spids: [717 718 785 16777215]
                )
                (case_arm
                  pat_list: [{(configure)}]
                  action: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:conf_dir)
                          op: Equal
                          rhs: {($ VSub_Name '$task_arg')}
                          spids: [795]
                        )
                      ]
                      spids: [793]
                    )
                    (SimpleCommand
                      words: [{(pushd)} {($ VSub_Name '$conf_dir')}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: {(/dev/null)}
                          spids: [804]
                        )
                      ]
                    )
                    (C {(touch)} {(__TIMESTAMP)})
                    (SimpleCommand
                      words: [
                        {
                          (DQ 
                            (BracedVarSub
                              token: <VSub_Name TIME_PREFIX>
                              bracket_op: (WholeArray op_id:Lit_At)
                              spids: [815 820]
                            )
                          )
                        }
                        {(--)}
                        {(DQ ($ VSub_Name '$sh_path'))}
                        {($ VSub_Name '$extra_args')}
                        {(./configure)}
                      ]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: {($ VSub_Name '$files_out_dir') (/STDOUT.txt)}
                          spids: [835]
                        )
                      ]
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(.)} {(-type)} {(f)} {(-newer)} {(__TIMESTAMP)})
                        (C {(xargs)} {(-I)} {(Lit_LBrace '{') (Lit_RBrace '}')} {(--)} {(cp)} {(--verbose)} 
                          {(Lit_LBrace '{') (Lit_RBrace '}')} {($ VSub_Name '$files_out_dir')}
                        )
                      ]
                      negated: F
                    )
                    (SimpleCommand
                      words: [{(popd)}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: {(/dev/null)}
                          spids: [879]
                        )
                      ]
                    )
                  ]
                  spids: [789 790 883 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [(C {(die)} {(DQ ('Invalid task type ') ($ VSub_Name '$task_type'))})]
                  spids: [887 888 899 16777215]
                )
              ]
              spids: [665 669 902]
            )
          ]
          spids: [345]
        )
      spids: [341 344]
    )
    (FuncDef
      name: print-tasks
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:provenance)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [986]
                )
              ]
              spids: [984]
            )
            (Pipeline
              children: [
                (C {(cat)} {($ VSub_Name '$provenance')})
                (While
                  cond: [
                    (Sentence
                      child: 
                        (C {(read)} {(job_id)} {(host_name)} {(host_hash)} {(sh_path)} {(shell_hash)})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  body: 
                    (DoGroup
                      children: [
                        (Case
                          to_match: {($ VSub_Name '$sh_path')}
                          arms: [
                            (case_arm
                              pat_list: [{(mksh)} {(zsh)} {(bin/osh)}]
                              action: [
                                (C {(log)} {(DQ ('--- Skipping ') ($ VSub_Name '$sh_path'))})
                                (ControlFlow
                                  token: <ControlFlow_Continue continue>
                                )
                              ]
                              spids: [1029 1034 1048 16777215]
                            )
                          ]
                          spids: [1022 1026 1051]
                        )
                        (Case
                          to_match: {($ VSub_Name '$sh_path')}
                          arms: [
                            (case_arm
                              pat_list: [{(Lit_Other '*') (/osh)}]
                              action: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:sh_path)
                                      op: Equal
                                      rhs: {($ VSub_Name '$PWD') (/) ($ VSub_Name '$sh_path')}
                                      spids: [1071]
                                    )
                                  ]
                                  spids: [1071]
                                )
                              ]
                              spids: [1066 1068 1077 16777215]
                            )
                          ]
                          spids: [1059 1063 1080]
                        )
                        (Assignment
                          keyword: Assign_Local
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:prefix)
                              op: Equal
                              rhs: 
                                {
                                  (DQ ($ VSub_Name '$job_id') (' ') ($ VSub_Name '$host_name') (' ') 
                                    ($ VSub_Name '$host_hash') (' ') ($ VSub_Name '$sh_path') (' ') ($ VSub_Name '$shell_hash')
                                  )
                                }
                              spids: [1085]
                            )
                          ]
                          spids: [1083]
                        )
                        (C {(echo)} {(DQ ($ VSub_Name '$prefix'))} {(abuild)} {(abuild-help)})
                        (C {(echo)} {(DQ ($ VSub_Name '$prefix'))} {(cpython)} {(cpython-configure)})
                        (Pipeline
                          children: [
                            (C {(conf-dirs)})
                            (C {(xargs)} {(-n)} {(1)} {(--)} {(echo)} {(DQ ($ VSub_Name '$prefix'))} 
                              {(configure)}
                            )
                          ]
                          negated: F
                        )
                      ]
                      spids: [1018 1149]
                    )
                )
              ]
              negated: F
            )
          ]
          spids: [981]
        )
      spids: [977 980]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:HEADER)
          op: Equal
          rhs: 
            {
              (SQ 
                <
'status,elapsed_secs,host_name,host_hash,shell_name,shell_hash,task_type,task_arg'
                >
              )
            }
          spids: [1156]
        )
      ]
      spids: [1154]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [(assign_pair lhs:(LhsName name:NUM_COLUMNS) op:Equal rhs:{(7)} spids:[1163])]
      spids: [1161]
    )
    (FuncDef
      name: measure
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:provenance)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [1179]
                )
              ]
              spids: [1177]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:raw_dir)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(_tmp) (Lit_Slash /) (osh-runtime) (Lit_Slash /) (raw)}
                          )
                        spids: [1186 1194]
                      )
                    }
                  spids: [1185]
                )
              ]
              spids: [1183]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:pattern)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 3>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                        spids: [1200 1203]
                      )
                    }
                  spids: [1199]
                )
              ]
              spids: [1197]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:name)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {($ VSub_Name '$provenance')})]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [1219 1223]
                      )
                    }
                  spids: [1218]
                )
              ]
              spids: [1216]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:prefix)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name name>
                        suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(.provenance.txt)})
                        spids: [1229 1233]
                      )
                    }
                  spids: [1228]
                )
              ]
              spids: [1226]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:times_out)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$raw_dir') (/) ($ VSub_Name '$prefix') (.times.csv))}
                  spids: [1242]
                )
              ]
              spids: [1240]
            )
            (C {(mkdir)} {(-p)} 
              (BracedWordTree
                parts: [($ VSub_Name '$BASE_DIR') (/) (BracedAltPart words:[{(raw)} {(stage1)}])]
              )
            )
            (SimpleCommand
              words: [{(echo)} {($ VSub_Name '$HEADER')}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$times_out')}
                  spids: [1273]
                )
              ]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tasks)
                  op: Equal
                  rhs: {($ VSub_Name '$BASE_DIR') (/tasks.txt)}
                  spids: [1281]
                )
              ]
              spids: [1279]
            )
            (SimpleCommand
              words: [{(print-tasks)} {($ VSub_Name '$provenance')}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$tasks')}
                  spids: [1290]
                )
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (TimeBlock
                  pipeline: 
                    (Pipeline
                      children: [
                        (C {(egrep)} {(DQ ($ VSub_Name '$pattern'))} {($ VSub_Name '$tasks')})
                        (C {(xargs)} {(-n)} {($ VSub_Name '$NUM_COLUMNS')} {(--)} {($ VSub_Number '$0')} 
                          {(runtime-task)} {($ VSub_Name '$raw_dir')}
                        )
                      ]
                      negated: F
                    )
                )
                (C {(die)} {(DQ ('*** Some tasks failed. ***'))})
              ]
            )
            (C {(cp)} {(-v)} {($ VSub_Name '$provenance')} {($ VSub_Name '$raw_dir')})
          ]
          spids: [1174]
        )
      spids: [1170 1173]
    )
    (FuncDef
      name: stage1
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:raw_dir)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {($ VSub_Name '$BASE_DIR') (Lit_Slash /) (raw)}
                          )
                        spids: [1359 1365]
                      )
                    }
                  spids: [1358]
                )
              ]
              spids: [1356]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out_dir)
                  op: Equal
                  rhs: {($ VSub_Name '$BASE_DIR') (/stage1)}
                  spids: [1370]
                )
              ]
              spids: [1368]
            )
            (C {(mkdir)} {(-p)} {($ VSub_Name '$out_dir')})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:times_csv)
                  op: Equal
                  rhs: {($ VSub_Name '$out_dir') (/times.csv)}
                  spids: [1386]
                )
              ]
              spids: [1384]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-a]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:a)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [{($ VSub_Name '$raw_dir') (/flanders.) (Lit_Other '*') (.times.csv)}]
                      )
                    }
                  spids: [1399]
                )
              ]
              spids: [1395]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-a]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:b)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [{($ VSub_Name '$raw_dir') (/lisa.) (Lit_Other '*') (.times.csv)}]
                      )
                    }
                  spids: [1412]
                )
              ]
              spids: [1408]
            )
            (SimpleCommand
              words: [
                {(csv-concat)}
                {
                  (BracedVarSub
                    token: <VSub_Name a>
                    bracket_op: 
                      (ArrayIndex
                        expr: (ArithUnary op_id:Node_UnaryMinus child:(ArithWord w:{(Lit_Digits 1)}))
                      )
                    spids: [1423 1429]
                  )
                }
                {
                  (BracedVarSub
                    token: <VSub_Name b>
                    bracket_op: 
                      (ArrayIndex
                        expr: (ArithUnary op_id:Node_UnaryMinus child:(ArithWord w:{(Lit_Digits 1)}))
                      )
                    spids: [1431 1437]
                  )
                }
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$times_csv')}
                  spids: [1439]
                )
              ]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:vm_csv)
                  op: Equal
                  rhs: {($ VSub_Name '$out_dir') (/virtual-memory.csv)}
                  spids: [1447]
                )
              ]
              spids: [1445]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-a]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:c)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {($ VSub_Name '$raw_dir') (/flanders.) (Lit_Other '*') (.virtual-memory)}
                        ]
                      )
                    }
                  spids: [1457]
                )
              ]
              spids: [1453]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-a]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:d)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [{($ VSub_Name '$raw_dir') (/lisa.) (Lit_Other '*') (.virtual-memory)}]
                      )
                    }
                  spids: [1470]
                )
              ]
              spids: [1466]
            )
            (SimpleCommand
              words: [
                {(benchmarks/virtual_memory.py)}
                {(osh-runtime)}
                {
                  (BracedVarSub
                    token: <VSub_Name c>
                    bracket_op: 
                      (ArrayIndex
                        expr: (ArithUnary op_id:Node_UnaryMinus child:(ArithWord w:{(Lit_Digits 1)}))
                      )
                    spids: [1483 1489]
                  )
                }
                {
                  (BracedVarSub
                    token: <VSub_Name d>
                    bracket_op: 
                      (ArrayIndex
                        expr: (ArithUnary op_id:Node_UnaryMinus child:(ArithWord w:{(Lit_Digits 1)}))
                      )
                    spids: [1491 1497]
                  )
                }
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$vm_csv')}
                  spids: [1499]
                )
              ]
            )
          ]
          spids: [1353]
        )
      spids: [1349 1352]
    )
    (FuncDef
      name: print-report
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:in_dir)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [1520]
                )
              ]
              spids: [1518]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:base_url)
                  op: Equal
                  rhs: {(SQ <../../web>)}
                  spids: [1526]
                )
              ]
              spids: [1524]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('<!DOCTYPE html>\n') ('<html>\n') ('  <head>\n') 
                        ('    <title>OSH Runtime Performance</title>\n') ('    <script type=') (Right_DoubleQuote '"') (text/javascript) (Right_DoubleQuote '"') (' src=') 
                        (Right_DoubleQuote '"') ($ VSub_Name '$base_url') (/table/table-sort.js) (Right_DoubleQuote '"') ('></script>\n') 
                        ('    <link rel=') (Right_DoubleQuote '"') (stylesheet) (Right_DoubleQuote '"') (' type=') (Right_DoubleQuote '"') (text/css) 
                        (Right_DoubleQuote '"') (' href=') (Right_DoubleQuote '"') ($ VSub_Name '$base_url') (/table/table-sort.css) 
                        (Right_DoubleQuote '"') (' />\n') ('    <link rel=') (Right_DoubleQuote '"') (stylesheet) (Right_DoubleQuote '"') (' type=') 
                        (Right_DoubleQuote '"') (text/css) (Right_DoubleQuote '"') (' href=') (Right_DoubleQuote '"') ($ VSub_Name '$base_url') 
                        (/benchmarks.css) (Right_DoubleQuote '"') (' />\n') ('\n') ('  </head>\n') ('  <body>\n') ('    <p id=') 
                        (Right_DoubleQuote '"') (home-link) (Right_DoubleQuote '"') ('>\n') ('      <a href=') (Right_DoubleQuote '"') (/) 
                        (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_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1535]
                )
              ]
            )
            (C {(csv2html)} {($ VSub_Name '$in_dir') (/times.csv)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('    <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_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1611]
                )
              ]
            )
            (C {(csv2html)} {($ VSub_Name '$in_dir') (/virtual-memory.csv)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: {(DQ ('\n') ('    <h3>Shell and Host Details</h3>\n'))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1630]
                )
              ]
            )
            (C {(csv2html)} {($ VSub_Name '$in_dir') (/shells.csv)})
            (C {(csv2html)} {($ VSub_Name '$in_dir') (/hosts.csv)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: {(DQ ('  </body>\n') ('</html>\n'))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1652]
                )
              ]
            )
          ]
          spids: [1515]
        )
      spids: [1511 1514]
    )
    (FuncDef
      name: abuild-h
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out_dir)
                  op: Equal
                  rhs: {(_tmp/osh-runtime)}
                  spids: [1680]
                )
              ]
              spids: [1678]
            )
            (C {(mkdir)} {(-p)} {($ VSub_Name '$out_dir')})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: {($ VSub_Name '$out_dir') (/abuild-h-times.csv)}
                  spids: [1698]
                )
              ]
              spids: [1696]
            )
            (SimpleCommand
              words: [{(echo)} {(SQ <'status,elapsed_secs,sh_path'>)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$out')}
                  spids: [1710]
                )
              ]
            )
            (ForEach
              iter_name: sh_path
              iter_words: [{(bash)} {(dash)} {(mksh)} {(zsh)} {($ VSub_Name '$OSH')}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (C {(benchmarks/time.py)} {(--output)} {($ VSub_Name '$out')} {(--field)} 
                      {(DQ ($ VSub_Name '$sh_path'))} {(--)} {($ VSub_Name '$sh_path')} {(benchmarks/testdata/abuild)} {(-h)}
                    )
                  ]
                  spids: [1732 1758]
                )
              spids: [1720 1730]
            )
          ]
          spids: [1675]
        )
      spids: [1671 1674]
    )
    (FuncDef
      name: qemu-old
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out_dir)
                  op: Equal
                  rhs: {($ VSub_Name '$PWD') (/_tmp/qemu-old)}
                  spids: [1785]
                )
              ]
              spids: [1783]
            )
            (C {(mkdir)} {(-p)} {($ VSub_Name '$out_dir')})
            (C {(configure-and-copy)} {(TildeSubPart prefix:'') (/src/qemu-1.6.0)} 
              {($ VSub_Name '$OSH')} {($ VSub_Name '$out_dir')}
            )
          ]
          spids: [1780]
        )
      spids: [1776 1779]
    )
    (FuncDef
      name: self-exe
      body: 
        (BraceGroup
          children: [
            (C {(set)} {(Lit_Other '+') (o)} {(errexit)})
            (SimpleCommand
              words: [{(dash)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: {(DQ ('/proc/self/exe -V\n'))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1832]
                )
              ]
            )
            (C {(echo)})
            (SimpleCommand
              words: [{(_bin/osh)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: {(DQ ('/proc/self/exe -V\n'))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1844]
                )
              ]
            )
            (SimpleCommand
              words: [{(_tmp/shells/ash)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: {(DQ ('/proc/self/exe -V\n'))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1853]
                )
              ]
            )
          ]
          spids: [1819]
        )
      spids: [1815 1818]
    )
    (C {(DQ ($ VSub_At '$@'))})
  ]
)