(command.CommandList
  children: [
    (command.Simple
      blame_tok: <set>
      more_env: []
      words: [{<set>} {<-o>} {<nounset>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <set>
      more_env: []
      words: [{<set>} {<-o>} {<pipefail>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <set>
      more_env: []
      words: [{<set>} {<-o>} {<errexit>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <source>
      more_env: []
      words: [{<source>} {<'test/common.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <source>
      more_env: []
      words: [{<source>} {<'benchmarks/common.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <readonly>
      more_env: []
      words: [{<readonly>} {<Id.Lit_VarLike 'BASE_DIR='> <'_tmp/osh-parser'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <readonly>
      more_env: []
      words: [
        {<readonly>}
        {<Id.Lit_VarLike 'SORTED='> ($ Id.VSub_DollarName BASE_DIR) <'/tmp/sorted.txt'>}
      ]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <write-sorted-manifest>
      name: write-sorted-manifest
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'files='> 
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Number 1>
                    var_name: 1
                    suffix_op: 
                      (suffix_op.Unary
                        op: <Id.VTest_ColonHyphen _>
                        arg_word: {<benchmarks> <Id.Lit_Slash '/'> <osh-parser-files.txt>}
                      )
                    right: <Id.Right_DollarBrace '}'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'counts='> ($ Id.VSub_DollarName BASE_DIR) <'/tmp/line-counts.txt'>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'csv_out='> ($ Id.VSub_Number 2)}]
              redirects: []
              do_fork: T
            )
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <grep>
                  more_env: []
                  words: [{<grep>} {<-v>} {(SQ <'^#'>)} {($ Id.VSub_DollarName files)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <xargs>
                  more_env: []
                  words: [{<xargs>} {<wc>} {<-l>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <sort>
                  more_env: []
                  words: [{<sort>} {<-n>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {($ Id.VSub_DollarName counts)}
                    )
                  ]
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <cat>
                  more_env: []
                  words: [{<cat>} {($ Id.VSub_DollarName counts)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <awk>
                  more_env: []
                  words: [{<awk>} {(SQ <'$2 != "total" { print $2 }'>)}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {($ Id.VSub_DollarName SORTED)}
                    )
                  ]
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <cat>
                  more_env: []
                  words: [{<cat>} {($ Id.VSub_DollarName counts)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <awk>
                  more_env: []
                  words: [
                    {<awk>}
                    {
                      (SQ <'\n'> <'      BEGIN { print "num_lines,path" }\n'> 
                        <'      $2 != "total" { print $1 "," $2 }'>
                      )
                    }
                  ]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {($ Id.VSub_DollarName csv_out)}
                    )
                  ]
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <parser-task>
      name: parser-task
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'raw_dir='> ($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'job_id='> ($ Id.VSub_Number 2)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'host='> ($ Id.VSub_Number 3)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'host_hash='> ($ Id.VSub_Number 4)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'sh_path='> ($ Id.VSub_Number 5)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'shell_hash='> ($ Id.VSub_Number 6)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'script_path='> ($ Id.VSub_Number 7)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [
                {<echo>}
                {
                  (DQ <'--- '> ($ Id.VSub_DollarName sh_path) <' '> ($ Id.VSub_DollarName script_path) 
                    <' ---'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'times_out='> 
                  (DQ ($ Id.VSub_DollarName raw_dir) <'/'> ($ Id.VSub_DollarName host) <.> 
                    ($ Id.VSub_DollarName job_id) <.times.csv>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'vm_out_dir='> 
                  (DQ ($ Id.VSub_DollarName raw_dir) <'/'> ($ Id.VSub_DollarName host) <.> 
                    ($ Id.VSub_DollarName job_id) <.virtual-memory>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName vm_out_dir)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<shell_name>}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'shell_name='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'shell_name='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'shell_name='> name:shell_name)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Simple
                            blame_tok: <basename>
                            more_env: []
                            words: [{<basename>} {($ Id.VSub_DollarName sh_path)}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'extra_args='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'extra_args='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'extra_args='> name:extra_args)
                  op: assign_op.Equal
                  rhs: {(SQ )}
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <test>
                              more_env: []
                              words: [
                                {<test>}
                                {(DQ ($ Id.VSub_DollarName shell_name))}
                                {<Id.Lit_Equals '='>}
                                {(SQ <osh>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <local>
                      more_env: []
                      words: [{<local>} {<script_name>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <local>
                      more_env: []
                      words: [{<local>} {<vm_out_path>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'script_name='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'script_name='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'script_name='>
                              name: script_name
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <basename>
                                    more_env: []
                                    words: [{<basename>} {($ Id.VSub_DollarName script_path)}]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'vm_out_path='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'vm_out_path='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'vm_out_path='>
                              name: vm_out_path
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ (${ Id.VSub_Name vm_out_dir) <'/'> (${ Id.VSub_Name shell_name) <-> 
                                (${ Id.VSub_Name shell_hash) <__> (${ Id.VSub_Name script_name) <.txt>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'extra_args='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'extra_args='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'extra_args='> name:extra_args)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ <'--ast-format none --parser-mem-dump '> 
                                ($ Id.VSub_DollarName vm_out_path)
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [313 328]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <'benchmarks/time.py'>
                  more_env: []
                  words: [
                    {<'benchmarks/time.py'>}
                    {<--output>}
                    {($ Id.VSub_DollarName times_out)}
                    {<--field>}
                    {(DQ ($ Id.VSub_DollarName host))}
                    {<--field>}
                    {(DQ ($ Id.VSub_DollarName host_hash))}
                    {<--field>}
                    {(DQ ($ Id.VSub_DollarName shell_name))}
                    {<--field>}
                    {(DQ ($ Id.VSub_DollarName shell_hash))}
                    {<--field>}
                    {(DQ ($ Id.VSub_DollarName script_path))}
                    {<-->}
                    {(DQ ($ Id.VSub_DollarName sh_path))}
                    {<-n>}
                    {($ Id.VSub_DollarName extra_args)}
                    {(DQ ($ Id.VSub_DollarName script_path))}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {<FAILED>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <print-tasks>
      name: print-tasks
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'provenance='> ($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <cat>
                  more_env: []
                  words: [{<cat>} {($ Id.VSub_DollarName provenance)}]
                  redirects: []
                  do_fork: T
                )
                (command.WhileUntil
                  keyword: <Id.KW_While while>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <read>
                              more_env: []
                              words: [{<read>} {<fields>}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  body: 
                    (command.DoGroup
                      left: <Id.KW_Do do>
                      children: [
                        (command.Pipeline
                          children: [
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {($ Id.VSub_DollarName sorted)}]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <xargs>
                              more_env: []
                              words: [
                                {<xargs>}
                                {<-n>}
                                {<1>}
                                {<-->}
                                {<echo>}
                                {($ Id.VSub_DollarName fields)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          ops: [<Id.Op_Pipe _>]
                        )
                      ]
                      right: <Id.KW_Done done>
                    )
                  redirects: []
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <readonly>
      more_env: []
      words: [
        {<readonly>}
        {<Id.Lit_VarLike 'HEADER='> 
          (SQ <'status,elapsed_secs,host_name,host_hash,shell_name,shell_hash,path'>)
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <readonly>
      more_env: []
      words: [{<readonly>} {<Id.Lit_VarLike 'NUM_COLUMNS='> <6>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <measure>
      name: measure
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'provenance='> ($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'raw_dir='> 
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Number 2>
                    var_name: 2
                    suffix_op: 
                      (suffix_op.Unary
                        op: <Id.VTest_ColonHyphen _>
                        arg_word: {($ Id.VSub_DollarName BASE_DIR) <Id.Lit_Slash '/'> <raw>}
                      )
                    right: <Id.Right_DollarBrace '}'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'name='> 
                  (CommandSub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (command.Simple
                        blame_tok: <basename>
                        more_env: []
                        words: [{<basename>} {($ Id.VSub_DollarName provenance)}]
                        redirects: []
                        do_fork: T
                      )
                    right: <Id.Eof_RParen _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'prefix='> 
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Name name>
                    var_name: name
                    suffix_op: (suffix_op.Unary op:<Id.VOp1_Percent '%'> arg_word:{<.provenance.txt>})
                    right: <Id.Right_DollarBrace '}'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'times_out='> 
                  (DQ ($ Id.VSub_DollarName raw_dir) <'/'> ($ Id.VSub_DollarName prefix) <.times.csv>)
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'lines_out='> 
                  (DQ ($ Id.VSub_DollarName raw_dir) <'/'> ($ Id.VSub_DollarName prefix) <.lines.csv>)
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [
                {<mkdir>}
                {<-p>}
                (word.BracedTree
                  parts: [
                    ($ Id.VSub_DollarName BASE_DIR)
                    <'/'>
                    (word_part.BracedTuple words:[{<tmp>} {<raw>} {<stage1>}])
                  ]
                )
                {($ Id.VSub_DollarName raw_dir)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <write-sorted-manifest>
              more_env: []
              words: [{<write-sorted-manifest>} {(SQ )} {($ Id.VSub_DollarName lines_out)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'sorted='> ($ Id.VSub_DollarName SORTED)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {($ Id.VSub_DollarName HEADER)}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName times_out)}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'tasks='> ($ Id.VSub_DollarName BASE_DIR) <'/tasks.txt'>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <print-tasks>
              more_env: []
              words: [{<print-tasks>} {($ Id.VSub_DollarName provenance)}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName tasks)}
                )
              ]
              do_fork: T
            )
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <cat>
                  more_env: []
                  words: [{<cat>} {($ Id.VSub_DollarName tasks)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <xargs>
                  more_env: []
                  words: [
                    {<xargs>}
                    {<-n>}
                    {($ Id.VSub_DollarName NUM_COLUMNS)}
                    {<-->}
                    {($ Id.VSub_Number 0)}
                    {<parser-task>}
                    {($ Id.VSub_DollarName raw_dir)}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Simple
              blame_tok: <cp>
              more_env: []
              words: [{<cp>} {<-v>} {($ Id.VSub_DollarName provenance)} {($ Id.VSub_DollarName raw_dir)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <fake-other-host>
      name: fake-other-host
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'dir='> 
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Number 1>
                    var_name: 1
                    suffix_op: 
                      (suffix_op.Unary
                        op: <Id.VTest_ColonHyphen _>
                        arg_word: {<_tmp> <Id.Lit_Slash '/'> <osh-parser> <Id.Lit_Slash '/'> <raw>}
                      )
                    right: <Id.Right_DollarBrace '}'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [entry]
              iterable: 
                (for_iter.Words
                  words: [{($ Id.VSub_DollarName dir) <'/lisa'> <Id.Lit_Star '*'>}]
                )
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <local>
                      more_env: []
                      words: [
                        {<local>}
                        {<Id.Lit_VarLike 'fake='> 
                          (BracedVarSub
                            left: <Id.Left_DollarBrace '${'>
                            token: <Id.VSub_Name entry>
                            var_name: entry
                            suffix_op: 
                              (suffix_op.PatSub
                                pat: {<lisa>}
                                replace: {<flanders>}
                                replace_mode: Id.Undefined_Tok
                                slash_tok: <Id.VOp2_Slash _>
                              )
                            right: <Id.Right_DollarBrace '}'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <mv>
                      more_env: []
                      words: [{<mv>} {<-v>} {($ Id.VSub_DollarName entry)} {($ Id.VSub_DollarName fake)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <test>
                                      more_env: []
                                      words: [{<test>} {<-f>} {($ Id.VSub_DollarName fake)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <sed>
                              more_env: []
                              words: [
                                {<sed>}
                                {<-i>}
                                {(SQ <'s/lisa/flanders/g'>)}
                                {($ Id.VSub_DollarName fake)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [807 816]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <stage1>
      name: stage1
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'raw_dir='> 
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Number 1>
                    var_name: 1
                    suffix_op: 
                      (suffix_op.Unary
                        op: <Id.VTest_ColonHyphen _>
                        arg_word: {($ Id.VSub_DollarName BASE_DIR) <Id.Lit_Slash '/'> <raw>}
                      )
                    right: <Id.Right_DollarBrace '}'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'out='> ($ Id.VSub_DollarName BASE_DIR) <'/stage1'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName out)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'vm_csv='> ($ Id.VSub_DollarName out) <'/virtual-memory.csv'>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<-a>}
                {<Id.Lit_VarLike 'x='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [
                      {($ Id.VSub_DollarName raw_dir) <'/flanders.'> <Id.Lit_Star '*'> 
                        <.virtual-memory>
                      }
                    ]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<-a>}
                {<Id.Lit_VarLike 'y='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [
                      {($ Id.VSub_DollarName raw_dir) <'/lisa.'> <Id.Lit_Star '*'> <.virtual-memory>}
                    ]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <'benchmarks/virtual_memory.py'>
              more_env: []
              words: [
                {<'benchmarks/virtual_memory.py'>}
                {<osh-parser>}
                {
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Name x>
                    var_name: x
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                      )
                    right: <Id.Right_DollarBrace '}'>
                  )
                }
                {
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Name y>
                    var_name: y
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                      )
                    right: <Id.Right_DollarBrace '}'>
                  )
                }
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName vm_csv)}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'times_csv='> ($ Id.VSub_DollarName out) <'/times.csv'>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<-a>}
                {<Id.Lit_VarLike 'a='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [
                      {($ Id.VSub_DollarName raw_dir) <'/flanders.'> <Id.Lit_Star '*'> <.times.csv>}
                    ]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<-a>}
                {<Id.Lit_VarLike 'b='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [{($ Id.VSub_DollarName raw_dir) <'/lisa.'> <Id.Lit_Star '*'> <.times.csv>}]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <csv-concat>
              more_env: []
              words: [
                {<csv-concat>}
                {
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Name a>
                    var_name: a
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                      )
                    right: <Id.Right_DollarBrace '}'>
                  )
                }
                {
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Name b>
                    var_name: b
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                      )
                    right: <Id.Right_DollarBrace '}'>
                  )
                }
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName times_csv)}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'raw_data_csv='> ($ Id.VSub_DollarName out) <'/raw-data.csv'>}
              ]
              redirects: []
              do_fork: T
            )
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(SQ <path>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [
                    {<echo>}
                    {
                      (BracedVarSub
                        left: <Id.Left_DollarBrace '${'>
                        token: <Id.VSub_Name a>
                        var_name: a
                        bracket_op: 
                          (bracket_op.ArrayIndex
                            expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                          )
                        right: <Id.Right_DollarBrace '}'>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [
                    {<echo>}
                    {
                      (BracedVarSub
                        left: <Id.Left_DollarBrace '${'>
                        token: <Id.VSub_Name b>
                        var_name: b
                        bracket_op: 
                          (bracket_op.ArrayIndex
                            expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                          )
                        right: <Id.Right_DollarBrace '}'>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName raw_data_csv)}
                )
              ]
              right: <Id.Lit_RBrace '}'>
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'lines_csv='> ($ Id.VSub_DollarName out) <'/lines.csv'>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<-a>}
                {<Id.Lit_VarLike 'c='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [
                      {($ Id.VSub_DollarName raw_dir) <'/flanders.'> <Id.Lit_Star '*'> <.lines.csv>}
                    ]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<-a>}
                {<Id.Lit_VarLike 'd='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [{($ Id.VSub_DollarName raw_dir) <'/lisa.'> <Id.Lit_Star '*'> <.lines.csv>}]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'left='> 
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Name c>
                    var_name: c
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                      )
                    right: <Id.Right_DollarBrace '}'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'right='> 
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Name d>
                    var_name: d
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                      )
                    right: <Id.Right_DollarBrace '}'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <diff>
                                  more_env: []
                                  words: [
                                    {<diff>}
                                    {($ Id.VSub_DollarName left)}
                                    {($ Id.VSub_DollarName right)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <die>
                      more_env: []
                      words: [
                        {<die>}
                        {
                          (DQ <'Benchmarks were run on different files ('> ($ Id.VSub_DollarName left) 
                            <' != '> ($ Id.VSub_DollarName right) <')'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [1116 1127]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>} {($ Id.VSub_DollarName left)}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName lines_csv)}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <head>
              more_env: []
              words: [{<head>} {($ Id.VSub_DollarName out) <'/'> <Id.Lit_Star '*'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <wc>
              more_env: []
              words: [{<wc>} {<-l>} {($ Id.VSub_DollarName out) <'/'> <Id.Lit_Star '*'>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <print-report>
      name: print-report
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'in_dir='> ($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'base_url='> (SQ <'../../web'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'<!DOCTYPE html>\n'>
                        <'<html>\n'>
                        <'  <head>\n'>
                        <'    <title>OSH Parser Performance</title>\n'>
                        <'    <script type='>
                        <Id.Right_DoubleQuote '"'>
                        <'text/javascript'>
                        <Id.Right_DoubleQuote '"'>
                        <' src='>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName base_url)
                        <'/table/table-sort.js'>
                        <Id.Right_DoubleQuote '"'>
                        <'></script>\n'>
                        <'    <link rel='>
                        <Id.Right_DoubleQuote '"'>
                        <stylesheet>
                        <Id.Right_DoubleQuote '"'>
                        <' type='>
                        <Id.Right_DoubleQuote '"'>
                        <'text/css'>
                        <Id.Right_DoubleQuote '"'>
                        <' href='>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName base_url)
                        <'/table/table-sort.css'>
                        <Id.Right_DoubleQuote '"'>
                        <' />\n'>
                        <'    <link rel='>
                        <Id.Right_DoubleQuote '"'>
                        <stylesheet>
                        <Id.Right_DoubleQuote '"'>
                        <' type='>
                        <Id.Right_DoubleQuote '"'>
                        <'text/css'>
                        <Id.Right_DoubleQuote '"'>
                        <' href='>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName base_url)
                        <'/benchmarks.css'>
                        <Id.Right_DoubleQuote '"'>
                        <' />\n'>
                        <'\n'>
                        <'  </head>\n'>
                        <'  <body>\n'>
                        <'    <p id='>
                        <Id.Right_DoubleQuote '"'>
                        <home-link>
                        <Id.Right_DoubleQuote '"'>
                        <'>\n'>
                        <'      <a href='>
                        <Id.Right_DoubleQuote '"'>
                        <'/'>
                        <Id.Right_DoubleQuote '"'>
                        <'>oilshell.org</a>\n'>
                        <'    </p>\n'>
                        <'    <h2>OSH Parser Performance</h2>\n'>
                        <'\n'>
                        <'    <p>We run <code>'>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'sh -n '>
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\$'>
                          ch: '$'
                        )
                        <'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_fork: T
            )
            (command.Simple
              blame_tok: <csv2html>
              more_env: []
              words: [{<csv2html>} {($ Id.VSub_DollarName in_dir) <'/summary.csv'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'    <h3>Memory Used to 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_fork: T
            )
            (command.Simple
              blame_tok: <csv2html>
              more_env: []
              words: [{<csv2html>} {($ Id.VSub_DollarName in_dir) <'/virtual-memory.csv'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [<'\n'> <'    <h3>Shell and Host Details</h3>\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <csv2html>
              more_env: []
              words: [{<csv2html>} {($ Id.VSub_DollarName in_dir) <'/shells.csv'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <csv2html>
              more_env: []
              words: [{<csv2html>} {($ Id.VSub_DollarName in_dir) <'/hosts.csv'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [<'    <h3>Raw Data</h3>\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <csv2html>
              more_env: []
              words: [{<csv2html>} {($ Id.VSub_DollarName in_dir) <'/raw-data.csv'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'    <h3>Parse Time Breakdown by File</h3>\n'>
                        <'\n'>
                        <'    <h4>Elasped Time in milliseconds</h4>\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <csv2html>
              more_env: []
              words: [{<csv2html>} {($ Id.VSub_DollarName in_dir) <'/elapsed.csv'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [<'\n'> <'    <h4>Parsing Rate in lines/millisecond</h4>\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <csv2html>
              more_env: []
              words: [{<csv2html>} {($ Id.VSub_DollarName in_dir) <'/rate.csv'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [<'  </body>\n'> <'</html>\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <time-test>
      name: time-test
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <'benchmarks/time.py'>
              more_env: []
              words: [
                {<'benchmarks/time.py'>}
                {<--field>}
                {<bash>}
                {<--field>}
                {<foo.txt>}
                {<--output>}
                {<'_tmp/bench.csv'>}
                {<sleep>}
                {<0.123>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>} {<'_tmp/bench.csv'>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <Id.Left_DoubleQuote '"'>
      more_env: []
      words: [{(DQ ($ Id.VSub_At '@'))}]
      redirects: []
      do_fork: T
    )
  ]
)