(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-parser)} spids:[61])]
      spids: [59]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:SORTED)
          op: Equal
          rhs: {($ VSub_Name '$BASE_DIR') (/tmp/sorted.txt)}
          spids: [66]
        )
      ]
      spids: [64]
    )
    (FuncDef
      name: write-sorted-manifest
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:files)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(benchmarks) (Lit_Slash /) (osh-parser-files.txt)}
                          )
                        spids: [81 87]
                      )
                    }
                  spids: [80]
                )
              ]
              spids: [78]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:counts)
                  op: Equal
                  rhs: {($ VSub_Name '$BASE_DIR') (/tmp/line-counts.txt)}
                  spids: [92]
                )
              ]
              spids: [90]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:csv_out)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [99]
                )
              ]
              spids: [97]
            )
            (Pipeline
              children: [
                (C {(grep)} {(-v)} {(SQ <'^#'>)} {($ VSub_Name '$files')})
                (C {(xargs)} {(wc)} {(-l)})
                (SimpleCommand
                  words: [{(sort)} {(-n)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {($ VSub_Name '$counts')}
                      spids: [132]
                    )
                  ]
                )
              ]
              negated: F
            )
            (Pipeline
              children: [
                (C {(cat)} {($ VSub_Name '$counts')})
                (SimpleCommand
                  words: [{(awk)} {(SQ <'$2 != "total" { print $2 }'>)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {($ VSub_Name '$SORTED')}
                      spids: [155]
                    )
                  ]
                )
              ]
              negated: F
            )
            (Pipeline
              children: [
                (C {(cat)} {($ VSub_Name '$counts')})
                (SimpleCommand
                  words: [
                    {(awk)}
                    {
                      (SQ <'\n'> <'      BEGIN { print "num_lines,path" }\n'> 
                        <'      $2 != "total" { print $1 "," $2 }'>
                      )
                    }
                  ]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {($ VSub_Name '$csv_out')}
                      spids: [181]
                    )
                  ]
                )
              ]
              negated: F
            )
          ]
          spids: [75]
        )
      spids: [71 74]
    )
    (FuncDef
      name: parser-task
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:raw_dir)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [200]
                )
              ]
              spids: [198]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:job_id)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [209]
                )
              ]
              spids: [207]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:host)
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [215]
                )
              ]
              spids: [213]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:host_hash)
                  op: Equal
                  rhs: {($ VSub_Number '$4')}
                  spids: [221]
                )
              ]
              spids: [219]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sh_path)
                  op: Equal
                  rhs: {($ VSub_Number '$5')}
                  spids: [227]
                )
              ]
              spids: [225]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:shell_hash)
                  op: Equal
                  rhs: {($ VSub_Number '$6')}
                  spids: [233]
                )
              ]
              spids: [231]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:script_path)
                  op: Equal
                  rhs: {($ VSub_Number '$7')}
                  spids: [239]
                )
              ]
              spids: [237]
            )
            (C {(echo)} 
              {(DQ ('--- ') ($ VSub_Name '$sh_path') (' ') ($ VSub_Name '$script_path') (' ---'))}
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:times_out)
                  op: Equal
                  rhs: 
                    {
                      (DQ ($ VSub_Name '$raw_dir') (/) ($ VSub_Name '$host') (.) ($ VSub_Name '$job_id') 
                        (.times.csv)
                      )
                    }
                  spids: [258]
                )
              ]
              spids: [256]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:vm_out_dir)
                  op: Equal
                  rhs: 
                    {
                      (DQ ($ VSub_Name '$raw_dir') (/) ($ VSub_Name '$host') (.) ($ VSub_Name '$job_id') 
                        (.virtual-memory)
                      )
                    }
                  spids: [271]
                )
              ]
              spids: [269]
            )
            (C {(mkdir)} {(-p)} {($ VSub_Name '$vm_out_dir')})
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:shell_name) op:Equal spids:[292])]
              spids: [290]
            )
            (Assignment
              keyword: Assign_None
              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: [296 300]
                      )
                    }
                  spids: [295]
                )
              ]
              spids: [295]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:extra_args) op:Equal rhs:{(SQ )} spids:[308])]
              spids: [308]
            )
            (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:script_name) op:Equal spids:[333])]
                      spids: [331]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [(assign_pair lhs:(LhsName name:vm_out_path) op:Equal spids:[338])]
                      spids: [336]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:script_name)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(basename)} {($ VSub_Name '$script_path')})]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [342 346]
                              )
                            }
                          spids: [341]
                        )
                      ]
                      spids: [341]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:vm_out_path)
                          op: Equal
                          rhs: 
                            {
                              (DQ (${ VSub_Name vm_out_dir) (/) (${ VSub_Name shell_name) (-) 
                                (${ VSub_Name shell_hash) (__) (${ VSub_Name script_name) (.txt)
                              )
                            }
                          spids: [349]
                        )
                      ]
                      spids: [349]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:extra_args)
                          op: Equal
                          rhs: 
                            {
                              (DQ ('--ast-format none --parser-mem-dump ') 
                                ($ VSub_Name '$vm_out_path')
                              )
                            }
                          spids: [370]
                        )
                      ]
                      spids: [370]
                    )
                  ]
                  spids: [16777215 328]
                )
              ]
              spids: [16777215 382]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(benchmarks/time.py)} {(--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 '$script_path'))} {(--)} {(DQ ($ VSub_Name '$sh_path'))} {(-n)} 
                  {($ VSub_Name '$extra_args')} {(DQ ($ VSub_Name '$script_path'))}
                )
                (C {(echo)} {(FAILED)})
              ]
            )
          ]
          spids: [195]
        )
      spids: [191 194]
    )
    (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: [475]
                )
              ]
              spids: [473]
            )
            (Pipeline
              children: [
                (C {(cat)} {($ VSub_Name '$provenance')})
                (While
                  cond: [(Sentence child:(C {(read)} {(fields)}) terminator:<Op_Semi ';'>)]
                  body: 
                    (DoGroup
                      children: [
                        (Pipeline
                          children: [
                            (C {(cat)} {($ VSub_Name '$sorted')})
                            (C {(xargs)} {(-n)} {(1)} {(--)} {(echo)} {($ VSub_Name '$fields')})
                          ]
                          negated: F
                        )
                      ]
                      spids: [497 519]
                    )
                )
              ]
              negated: F
            )
          ]
          spids: [470]
        )
      spids: [466 469]
    )
    (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,path'>)}
          spids: [526]
        )
      ]
      spids: [524]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [(assign_pair lhs:(LhsName name:NUM_COLUMNS) op:Equal rhs:{(6)} spids:[534])]
      spids: [532]
    )
    (FuncDef
      name: measure
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:provenance)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [556]
                )
              ]
              spids: [554]
            )
            (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: {($ VSub_Name '$BASE_DIR') (Lit_Slash /) (raw)}
                          )
                        spids: [563 569]
                      )
                    }
                  spids: [562]
                )
              ]
              spids: [560]
            )
            (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: [580 584]
                      )
                    }
                  spids: [579]
                )
              ]
              spids: [577]
            )
            (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: [590 594]
                      )
                    }
                  spids: [589]
                )
              ]
              spids: [587]
            )
            (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: [603]
                )
              ]
              spids: [601]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lines_out)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$raw_dir') (/) ($ VSub_Name '$prefix') (.lines.csv))}
                  spids: [614]
                )
              ]
              spids: [612]
            )
            (C {(mkdir)} {(-p)} 
              (BracedWordTree
                parts: [
                  ($ VSub_Name '$BASE_DIR')
                  (/)
                  (BracedAltPart words:[{(tmp)} {(raw)} {(stage1)}])
                ]
              ) {($ VSub_Name '$raw_dir')}
            )
            (C {(write-sorted-manifest)} {(SQ )} {($ VSub_Name '$lines_out')})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sorted)
                  op: Equal
                  rhs: {($ VSub_Name '$SORTED')}
                  spids: [652]
                )
              ]
              spids: [650]
            )
            (SimpleCommand
              words: [{(echo)} {($ VSub_Name '$HEADER')}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$times_out')}
                  spids: [665]
                )
              ]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tasks)
                  op: Equal
                  rhs: {($ VSub_Name '$BASE_DIR') (/tasks.txt)}
                  spids: [673]
                )
              ]
              spids: [671]
            )
            (SimpleCommand
              words: [{(print-tasks)} {($ VSub_Name '$provenance')}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$tasks')}
                  spids: [682]
                )
              ]
            )
            (Pipeline
              children: [
                (C {(cat)} {($ VSub_Name '$tasks')})
                (C {(xargs)} {(-n)} {($ VSub_Name '$NUM_COLUMNS')} {(--)} {($ VSub_Number '$0')} 
                  {(parser-task)} {($ VSub_Name '$raw_dir')}
                )
              ]
              negated: F
            )
            (C {(cp)} {(-v)} {($ VSub_Name '$provenance')} {($ VSub_Name '$raw_dir')})
          ]
          spids: [551]
        )
      spids: [547 550]
    )
    (FuncDef
      name: fake-other-host
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dir)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(_tmp) (Lit_Slash /) (osh-parser) (Lit_Slash /) (raw)}
                          )
                        spids: [748 756]
                      )
                    }
                  spids: [747]
                )
              ]
              spids: [745]
            )
            (ForEach
              iter_name: entry
              iter_words: [{($ VSub_Name '$dir') (/lisa) (Lit_Other '*')}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:fake)
                          op: Equal
                          rhs: 
                            {
                              (BracedVarSub
                                token: <VSub_Name entry>
                                suffix_op: 
                                  (PatSub
                                    pat: {(lisa)}
                                    replace: {(flanders)}
                                    do_all: F
                                    do_prefix: F
                                    do_suffix: F
                                  )
                                spids: [776 782]
                              )
                            }
                          spids: [775]
                        )
                      ]
                      spids: [773]
                    )
                    (C {(mv)} {(-v)} {($ VSub_Name '$entry')} {($ VSub_Name '$fake')})
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: (C {(test)} {(-f)} {($ VSub_Name '$fake')})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(sed)} {(-i)} {(SQ <s/lisa/flanders/g>)} {($ VSub_Name '$fake')})
                          ]
                          spids: [16777215 816]
                        )
                      ]
                      spids: [16777215 830]
                    )
                  ]
                  spids: [770 833]
                )
              spids: [764 768]
            )
          ]
          spids: [742]
        )
      spids: [738 741]
    )
    (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: [858 864]
                      )
                    }
                  spids: [857]
                )
              ]
              spids: [855]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: {($ VSub_Name '$BASE_DIR') (/stage1)}
                  spids: [870]
                )
              ]
              spids: [868]
            )
            (C {(mkdir)} {(-p)} {($ VSub_Name '$out')})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:vm_csv)
                  op: Equal
                  rhs: {($ VSub_Name '$out') (/virtual-memory.csv)}
                  spids: [885]
                )
              ]
              spids: [883]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-a]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:x)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {($ VSub_Name '$raw_dir') (/flanders.) (Lit_Other '*') (.virtual-memory)}
                        ]
                      )
                    }
                  spids: [894]
                )
              ]
              spids: [890]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-a]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:y)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [{($ VSub_Name '$raw_dir') (/lisa.) (Lit_Other '*') (.virtual-memory)}]
                      )
                    }
                  spids: [907]
                )
              ]
              spids: [903]
            )
            (SimpleCommand
              words: [
                {(benchmarks/virtual_memory.py)}
                {(osh-parser)}
                {
                  (BracedVarSub
                    token: <VSub_Name x>
                    bracket_op: 
                      (ArrayIndex
                        expr: (ArithUnary op_id:Node_UnaryMinus child:(ArithWord w:{(Lit_Digits 1)}))
                      )
                    spids: [920 926]
                  )
                }
                {
                  (BracedVarSub
                    token: <VSub_Name y>
                    bracket_op: 
                      (ArrayIndex
                        expr: (ArithUnary op_id:Node_UnaryMinus child:(ArithWord w:{(Lit_Digits 1)}))
                      )
                    spids: [928 934]
                  )
                }
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$vm_csv')}
                  spids: [936]
                )
              ]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:times_csv)
                  op: Equal
                  rhs: {($ VSub_Name '$out') (/times.csv)}
                  spids: [944]
                )
              ]
              spids: [942]
            )
            (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: [957]
                )
              ]
              spids: [953]
            )
            (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: [970]
                )
              ]
              spids: [966]
            )
            (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: [981 987]
                  )
                }
                {
                  (BracedVarSub
                    token: <VSub_Name b>
                    bracket_op: 
                      (ArrayIndex
                        expr: (ArithUnary op_id:Node_UnaryMinus child:(ArithWord w:{(Lit_Digits 1)}))
                      )
                    spids: [989 995]
                  )
                }
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$times_csv')}
                  spids: [997]
                )
              ]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:raw_data_csv)
                  op: Equal
                  rhs: {($ VSub_Name '$out') (/raw-data.csv)}
                  spids: [1009]
                )
              ]
              spids: [1007]
            )
            (BraceGroup
              children: [
                (C {(echo)} {(SQ <path>)})
                (C {(echo)} 
                  {
                    (BracedVarSub
                      token: <VSub_Name a>
                      bracket_op: 
                        (ArrayIndex
                          expr: (ArithUnary op_id:Node_UnaryMinus child:(ArithWord w:{(Lit_Digits 1)}))
                        )
                      spids: [1025 1031]
                    )
                  }
                )
                (C {(echo)} 
                  {
                    (BracedVarSub
                      token: <VSub_Name b>
                      bracket_op: 
                        (ArrayIndex
                          expr: (ArithUnary op_id:Node_UnaryMinus child:(ArithWord w:{(Lit_Digits 1)}))
                        )
                      spids: [1036 1042]
                    )
                  }
                )
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$raw_data_csv')}
                  spids: [1047]
                )
              ]
              spids: [1014]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lines_csv)
                  op: Equal
                  rhs: {($ VSub_Name '$out') (/lines.csv)}
                  spids: [1059]
                )
              ]
              spids: [1057]
            )
            (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 '*') (.lines.csv)}]
                      )
                    }
                  spids: [1068]
                )
              ]
              spids: [1064]
            )
            (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 '*') (.lines.csv)}]
                      )
                    }
                  spids: [1081]
                )
              ]
              spids: [1077]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:left)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name c>
                        bracket_op: 
                          (ArrayIndex
                            expr: 
                              (ArithUnary
                                op_id: Node_UnaryMinus
                                child: (ArithWord w:{(Lit_Digits 1)})
                              )
                          )
                        spids: [1094 1100]
                      )
                    }
                  spids: [1093]
                )
              ]
              spids: [1091]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:right)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name d>
                        bracket_op: 
                          (ArrayIndex
                            expr: 
                              (ArithUnary
                                op_id: Node_UnaryMinus
                                child: (ArithWord w:{(Lit_Digits 1)})
                              )
                          )
                        spids: [1106 1112]
                      )
                    }
                  spids: [1105]
                )
              ]
              spids: [1103]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [(C {(diff)} {($ VSub_Name '$left')} {($ VSub_Name '$right')})]
                          negated: T
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(die)} 
                      {
                        (DQ ('Benchmarks were run on different files (') ($ VSub_Name '$left') (' != ') 
                          ($ VSub_Name '$right') (')')
                        )
                      }
                    )
                  ]
                  spids: [16777215 1127]
                )
              ]
              spids: [16777215 1141]
            )
            (SimpleCommand
              words: [{(cat)} {($ VSub_Name '$left')}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$lines_csv')}
                  spids: [1153]
                )
              ]
            )
            (C {(head)} {($ VSub_Name '$out') (/) (Lit_Other '*')})
            (C {(wc)} {(-l)} {($ VSub_Name '$out') (/) (Lit_Other '*')})
          ]
          spids: [852]
        )
      spids: [848 851]
    )
    (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: [1203]
                )
              ]
              spids: [1201]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:base_url)
                  op: Equal
                  rhs: {(SQ <../../web>)}
                  spids: [1209]
                )
              ]
              spids: [1207]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('<!DOCTYPE html>\n') ('<html>\n') ('  <head>\n') 
                        ('    <title>OSH Parser 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 Parser Performance</h2>\n') ('\n') 
                        ('    <p>We run <code>') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('sh -n ') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('file</code> for various files under various\n') 
                        ('    shells.  This means that shell startup time is included in the\n') ('    elapsed time measurements, but long files are chosen to minimize its\n') ('    effect.</p>\n') 
                        ('\n') ('    <h3>Parse Time Summary</h3>\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1218]
                )
              ]
            )
            (C {(csv2html)} {($ VSub_Name '$in_dir') (/summary.csv)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('    <h3>Memory Used to Parse</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')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1300]
                )
              ]
            )
            (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: [1318]
                )
              ]
            )
            (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 ('    <h3>Raw Data</h3>\n'))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1339]
                )
              ]
            )
            (C {(csv2html)} {($ VSub_Name '$in_dir') (/raw-data.csv)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('    <h3>Parse Time Breakdown by File</h3>\n') ('\n') 
                        ('    <h4>Elasped Time in milliseconds</h4>\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1353]
                )
              ]
            )
            (C {(csv2html)} {($ VSub_Name '$in_dir') (/elapsed.csv)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: {(DQ ('\n') ('    <h4>Parsing Rate in lines/millisecond</h4>\n'))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1369]
                )
              ]
            )
            (C {(csv2html)} {($ VSub_Name '$in_dir') (/rate.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: [1384]
                )
              ]
            )
          ]
          spids: [1198]
        )
      spids: [1194 1197]
    )
    (FuncDef
      name: time-test
      body: 
        (BraceGroup
          children: [
            (C {(benchmarks/time.py)} {(--field)} {(bash)} {(--field)} {(foo.txt)} {(--output)} 
              {(_tmp/bench.csv)} {(sleep)} {(0.123)}
            )
            (C {(cat)} {(_tmp/bench.csv)})
          ]
          spids: [1397]
        )
      spids: [1393 1396]
    )
    (C {(DQ ($ VSub_At '$@'))})
  ]
)