(command.CommandList
  children: [
    (C {<Id.KW_Set set>} {<-o>} {<nounset>})
    (C {<Id.KW_Set set>} {<-o>} {<pipefail>})
    (C {<Id.KW_Set set>} {<-o>} {<errexit>})
    (C {<source>} {<'test/common.sh'>})
    (C {<source>} {<'benchmarks/common.sh'>})
    (C {<readonly>} {<Id.Lit_VarLike 'BASE_DIR='> <'_tmp/osh-parser'>})
    (C {<readonly>} {<Id.Lit_VarLike 'SORTED='> ($ Id.VSub_DollarName '$BASE_DIR') <'/tmp/sorted.txt'>})
    (command.ShFunction
      name: write-sorted-manifest
      body: 
        (BraceGroup
          children: [
            (C {<local>} 
              {<Id.Lit_VarLike 'files='> 
                (braced_var_sub
                  token: <Id.VSub_Number 1>
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {<benchmarks> <Id.Lit_Slash '/'> <osh-parser-files.txt>}
                    )
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'counts='> ($ Id.VSub_DollarName '$BASE_DIR') <'/tmp/line-counts.txt'>}
            )
            (C {<local>} {<Id.Lit_VarLike 'csv_out='> ($ Id.VSub_Number '$2')})
            (command.Pipeline
              children: [
                (C {<grep>} {<-v>} {(SQ <'^#'>)} {($ Id.VSub_DollarName '$files')})
                (C {<xargs>} {<wc>} {<-l>})
                (command.Simple
                  words: [{<sort>} {<-n>}]
                  redirects: [
                    (redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {($ Id.VSub_DollarName '$counts')}
                    )
                  ]
                  do_fork: T
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (C {<cat>} {($ Id.VSub_DollarName '$counts')})
                (command.Simple
                  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
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (C {<cat>} {($ Id.VSub_DollarName '$counts')})
                (command.Simple
                  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
                )
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: parser-task
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'raw_dir='> ($ Id.VSub_Number '$1')})
            (C {<local>} {<Id.Lit_VarLike 'job_id='> ($ Id.VSub_Number '$2')})
            (C {<local>} {<Id.Lit_VarLike 'host='> ($ Id.VSub_Number '$3')})
            (C {<local>} {<Id.Lit_VarLike 'host_hash='> ($ Id.VSub_Number '$4')})
            (C {<local>} {<Id.Lit_VarLike 'sh_path='> ($ Id.VSub_Number '$5')})
            (C {<local>} {<Id.Lit_VarLike 'shell_hash='> ($ Id.VSub_Number '$6')})
            (C {<local>} {<Id.Lit_VarLike 'script_path='> ($ Id.VSub_Number '$7')})
            (C {<echo>} 
              {
                (DQ <'--- '> ($ Id.VSub_DollarName '$sh_path') <' '> 
                  ($ Id.VSub_DollarName '$script_path') <' ---'>
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'times_out='> 
                (DQ ($ Id.VSub_DollarName '$raw_dir') <'/'> ($ Id.VSub_DollarName '$host') <.> 
                  ($ Id.VSub_DollarName '$job_id') <.times.csv>
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'vm_out_dir='> 
                (DQ ($ Id.VSub_DollarName '$raw_dir') <'/'> ($ Id.VSub_DollarName '$host') <.> 
                  ($ Id.VSub_DollarName '$job_id') <.virtual-memory>
                )
              }
            )
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$vm_out_dir')})
            (C {<local>} {<shell_name>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:shell_name)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<basename>} {($ Id.VSub_DollarName '$sh_path')})
                      )
                    }
                  spids: [295]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:extra_args)
                  op: assign_op.Equal
                  rhs: {(SQ )}
                  spids: [308]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<test>} {(DQ ($ Id.VSub_DollarName '$shell_name'))} {<Id.Lit_Equals '='>} 
                          {(SQ <osh>)}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<local>} {<script_name>})
                    (C {<local>} {<vm_out_path>})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:script_name)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: <Id.Left_DollarParen '$('>
                                child: (C {<basename>} {($ Id.VSub_DollarName '$script_path')})
                              )
                            }
                          spids: [341]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name 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>
                              )
                            }
                          spids: [349]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:extra_args)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ <'--ast-format none --parser-mem-dump '> 
                                ($ Id.VSub_DollarName '$vm_out_path')
                              )
                            }
                          spids: [370]
                        )
                      ]
                    )
                  ]
                  spids: [313 328]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<'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'))}
                )
                (C {<echo>} {<FAILED>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: print-tasks
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'provenance='> ($ Id.VSub_Number '$1')})
            (command.Pipeline
              children: [
                (C {<cat>} {($ Id.VSub_DollarName '$provenance')})
                (command.WhileUntil
                  keyword: <Id.KW_While while>
                  cond: [(command.Sentence child:(C {<read>} {<fields>}) terminator:<Id.Op_Semi _>)]
                  body: 
                    (command.DoGroup
                      children: [
                        (command.Pipeline
                          children: [
                            (C {<cat>} {($ Id.VSub_DollarName '$sorted')})
                            (C {<xargs>} {<-n>} {<1>} {<-->} {<echo>} {($ Id.VSub_DollarName '$fields')})
                          ]
                          negated: F
                        )
                      ]
                    )
                )
              ]
              negated: F
            )
          ]
        )
    )
    (C {<readonly>} 
      {<Id.Lit_VarLike 'HEADER='> 
        (SQ <'status,elapsed_secs,host_name,host_hash,shell_name,shell_hash,path'>)
      }
    )
    (C {<readonly>} {<Id.Lit_VarLike 'NUM_COLUMNS='> <6>})
    (command.ShFunction
      name: measure
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'provenance='> ($ Id.VSub_Number '$1')})
            (C {<local>} 
              {<Id.Lit_VarLike 'raw_dir='> 
                (braced_var_sub
                  token: <Id.VSub_Number 2>
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {($ Id.VSub_DollarName '$BASE_DIR') <Id.Lit_Slash '/'> <raw>}
                    )
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'name='> 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: (C {<basename>} {($ Id.VSub_DollarName '$provenance')})
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'prefix='> 
                (braced_var_sub
                  token: <Id.VSub_Name name>
                  suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<.provenance.txt>})
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'times_out='> 
                (DQ ($ Id.VSub_DollarName '$raw_dir') <'/'> ($ Id.VSub_DollarName '$prefix') 
                  <.times.csv>
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'lines_out='> 
                (DQ ($ Id.VSub_DollarName '$raw_dir') <'/'> ($ Id.VSub_DollarName '$prefix') 
                  <.lines.csv>
                )
              }
            )
            (C {<mkdir>} {<-p>} 
              (word.BracedTree
                parts: [
                  ($ Id.VSub_DollarName '$BASE_DIR')
                  <'/'>
                  (word_part.BracedTuple words:[{<tmp>} {<raw>} {<stage1>}])
                ]
              ) {($ Id.VSub_DollarName '$raw_dir')}
            )
            (C {<write-sorted-manifest>} {(SQ )} {($ Id.VSub_DollarName '$lines_out')})
            (C {<local>} {<Id.Lit_VarLike 'sorted='> ($ Id.VSub_DollarName '$SORTED')})
            (command.Simple
              words: [{<echo>} {($ Id.VSub_DollarName '$HEADER')}]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName '$times_out')}
                )
              ]
              do_fork: T
            )
            (C {<local>} {<Id.Lit_VarLike 'tasks='> ($ Id.VSub_DollarName '$BASE_DIR') <'/tasks.txt'>})
            (command.Simple
              words: [{<print-tasks>} {($ Id.VSub_DollarName '$provenance')}]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName '$tasks')}
                )
              ]
              do_fork: T
            )
            (command.Pipeline
              children: [
                (C {<cat>} {($ Id.VSub_DollarName '$tasks')})
                (C {<xargs>} {<-n>} {($ Id.VSub_DollarName '$NUM_COLUMNS')} {<-->} 
                  {($ Id.VSub_Number '$0')} {<parser-task>} {($ Id.VSub_DollarName '$raw_dir')}
                )
              ]
              negated: F
            )
            (C {<cp>} {<-v>} {($ Id.VSub_DollarName '$provenance')} {($ Id.VSub_DollarName '$raw_dir')})
          ]
        )
    )
    (command.ShFunction
      name: fake-other-host
      body: 
        (BraceGroup
          children: [
            (C {<local>} 
              {<Id.Lit_VarLike 'dir='> 
                (braced_var_sub
                  token: <Id.VSub_Number 1>
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {<_tmp> <Id.Lit_Slash '/'> <osh-parser> <Id.Lit_Slash '/'> <raw>}
                    )
                )
              }
            )
            (command.ForEach
              iter_name: entry
              iter_words: [{($ Id.VSub_DollarName '$dir') <'/lisa'> <Id.Lit_Star '*'>}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {<local>} 
                      {<Id.Lit_VarLike 'fake='> 
                        (braced_var_sub
                          token: <Id.VSub_Name entry>
                          suffix_op: 
                            (suffix_op.PatSub
                              pat: {<lisa>}
                              replace: {<flanders>}
                              replace_mode: Id.Undefined_Tok
                            )
                        )
                      }
                    )
                    (C {<mv>} {<-v>} {($ Id.VSub_DollarName '$entry')} {($ Id.VSub_DollarName '$fake')})
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: (C {<test>} {<-f>} {($ Id.VSub_DollarName '$fake')})
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          action: [
                            (C {<sed>} {<-i>} {(SQ <'s/lisa/flanders/g'>)} 
                              {($ Id.VSub_DollarName '$fake')}
                            )
                          ]
                          spids: [807 816]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: stage1
      body: 
        (BraceGroup
          children: [
            (C {<local>} 
              {<Id.Lit_VarLike 'raw_dir='> 
                (braced_var_sub
                  token: <Id.VSub_Number 1>
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {($ Id.VSub_DollarName '$BASE_DIR') <Id.Lit_Slash '/'> <raw>}
                    )
                )
              }
            )
            (C {<local>} {<Id.Lit_VarLike 'out='> ($ Id.VSub_DollarName '$BASE_DIR') <'/stage1'>})
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$out')})
            (C {<local>} 
              {<Id.Lit_VarLike 'vm_csv='> ($ Id.VSub_DollarName '$out') <'/virtual-memory.csv'>}
            )
            (C {<local>} {<-a>} 
              {<Id.Lit_VarLike 'x='> 
                (sh_array_literal
                  left: <Id.Op_LParen _>
                  words: [
                    {($ Id.VSub_DollarName '$raw_dir') <'/flanders.'> <Id.Lit_Star '*'> 
                      <.virtual-memory>
                    }
                  ]
                )
              }
            )
            (C {<local>} {<-a>} 
              {<Id.Lit_VarLike 'y='> 
                (sh_array_literal
                  left: <Id.Op_LParen _>
                  words: [
                    {($ Id.VSub_DollarName '$raw_dir') <'/lisa.'> <Id.Lit_Star '*'> <.virtual-memory>}
                  ]
                )
              }
            )
            (command.Simple
              words: [
                {<'benchmarks/virtual_memory.py'>}
                {<osh-parser>}
                {
                  (braced_var_sub
                    token: <Id.VSub_Name x>
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                      )
                  )
                }
                {
                  (braced_var_sub
                    token: <Id.VSub_Name y>
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                      )
                  )
                }
              ]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName '$vm_csv')}
                )
              ]
              do_fork: T
            )
            (C {<local>} {<Id.Lit_VarLike 'times_csv='> ($ Id.VSub_DollarName '$out') <'/times.csv'>})
            (C {<local>} {<-a>} 
              {<Id.Lit_VarLike 'a='> 
                (sh_array_literal
                  left: <Id.Op_LParen _>
                  words: [
                    {($ Id.VSub_DollarName '$raw_dir') <'/flanders.'> <Id.Lit_Star '*'> <.times.csv>}
                  ]
                )
              }
            )
            (C {<local>} {<-a>} 
              {<Id.Lit_VarLike 'b='> 
                (sh_array_literal
                  left: <Id.Op_LParen _>
                  words: [
                    {($ Id.VSub_DollarName '$raw_dir') <'/lisa.'> <Id.Lit_Star '*'> <.times.csv>}
                  ]
                )
              }
            )
            (command.Simple
              words: [
                {<csv-concat>}
                {
                  (braced_var_sub
                    token: <Id.VSub_Name a>
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                      )
                  )
                }
                {
                  (braced_var_sub
                    token: <Id.VSub_Name b>
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                      )
                  )
                }
              ]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName '$times_csv')}
                )
              ]
              do_fork: T
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'raw_data_csv='> ($ Id.VSub_DollarName '$out') <'/raw-data.csv'>}
            )
            (BraceGroup
              children: [
                (C {<echo>} {(SQ <path>)})
                (C {<echo>} 
                  {
                    (braced_var_sub
                      token: <Id.VSub_Name a>
                      bracket_op: 
                        (bracket_op.ArrayIndex
                          expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                        )
                    )
                  }
                )
                (C {<echo>} 
                  {
                    (braced_var_sub
                      token: <Id.VSub_Name b>
                      bracket_op: 
                        (bracket_op.ArrayIndex
                          expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                        )
                    )
                  }
                )
              ]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName '$raw_data_csv')}
                )
              ]
            )
            (C {<local>} {<Id.Lit_VarLike 'lines_csv='> ($ Id.VSub_DollarName '$out') <'/lines.csv'>})
            (C {<local>} {<-a>} 
              {<Id.Lit_VarLike 'c='> 
                (sh_array_literal
                  left: <Id.Op_LParen _>
                  words: [
                    {($ Id.VSub_DollarName '$raw_dir') <'/flanders.'> <Id.Lit_Star '*'> <.lines.csv>}
                  ]
                )
              }
            )
            (C {<local>} {<-a>} 
              {<Id.Lit_VarLike 'd='> 
                (sh_array_literal
                  left: <Id.Op_LParen _>
                  words: [
                    {($ Id.VSub_DollarName '$raw_dir') <'/lisa.'> <Id.Lit_Star '*'> <.lines.csv>}
                  ]
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'left='> 
                (braced_var_sub
                  token: <Id.VSub_Name c>
                  bracket_op: 
                    (bracket_op.ArrayIndex
                      expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                    )
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'right='> 
                (braced_var_sub
                  token: <Id.VSub_Name d>
                  bracket_op: 
                    (bracket_op.ArrayIndex
                      expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                    )
                )
              }
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {<diff>} {($ Id.VSub_DollarName '$left')} 
                              {($ Id.VSub_DollarName '$right')}
                            )
                          ]
                          negated: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<die>} 
                      {
                        (DQ <'Benchmarks were run on different files ('> 
                          ($ Id.VSub_DollarName '$left') <' != '> ($ Id.VSub_DollarName '$right') <')'>
                        )
                      }
                    )
                  ]
                  spids: [1116 1127]
                )
              ]
            )
            (command.Simple
              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
            )
            (C {<head>} {($ Id.VSub_DollarName '$out') <'/'> <Id.Lit_Star '*'>})
            (C {<wc>} {<-l>} {($ Id.VSub_DollarName '$out') <'/'> <Id.Lit_Star '*'>})
          ]
        )
    )
    (command.ShFunction
      name: print-report
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'in_dir='> ($ Id.VSub_Number '$1')})
            (C {<local>} {<Id.Lit_VarLike 'base_url='> (SQ <'../../web'>)})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.MultiLine
                      here_begin: {<EOF>}
                      here_end_span_id: 1290
                      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 '\\$'>
                        )
                        <'sh -n '>
                        (word_part.EscapedLiteral
                          token: <Id.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_fork: T
            )
            (C {<csv2html>} {($ Id.VSub_DollarName '$in_dir') <'/summary.csv'>})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.MultiLine
                      here_begin: {<EOF>}
                      here_end_span_id: 1309
                      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
            )
            (C {<csv2html>} {($ Id.VSub_DollarName '$in_dir') <'/virtual-memory.csv'>})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.MultiLine
                      here_begin: {<EOF>}
                      here_end_span_id: 1326
                      stdin_parts: [<'\n'> <'    <h3>Shell and Host Details</h3>\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (C {<csv2html>} {($ Id.VSub_DollarName '$in_dir') <'/shells.csv'>})
            (C {<csv2html>} {($ Id.VSub_DollarName '$in_dir') <'/hosts.csv'>})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.MultiLine
                      here_begin: {<EOF>}
                      here_end_span_id: 1347
                      stdin_parts: [<'    <h3>Raw Data</h3>\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (C {<csv2html>} {($ Id.VSub_DollarName '$in_dir') <'/raw-data.csv'>})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.MultiLine
                      here_begin: {<EOF>}
                      here_end_span_id: 1364
                      stdin_parts: [
                        <'    <h3>Parse Time Breakdown by File</h3>\n'>
                        <'\n'>
                        <'    <h4>Elasped Time in milliseconds</h4>\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (C {<csv2html>} {($ Id.VSub_DollarName '$in_dir') <'/elapsed.csv'>})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.MultiLine
                      here_begin: {<EOF>}
                      here_end_span_id: 1380
                      stdin_parts: [<'\n'> <'    <h4>Parsing Rate in lines/millisecond</h4>\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (C {<csv2html>} {($ Id.VSub_DollarName '$in_dir') <'/rate.csv'>})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.MultiLine
                      here_begin: {<EOF>}
                      here_end_span_id: 1396
                      stdin_parts: [<'  </body>\n'> <'</html>\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      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'>})
          ]
        )
    )
    (C {(DQ ($ Id.VSub_At '$@'))})
  ]
)