(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/oheap'>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <encode-one>
      name: encode-one
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'script='> ($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'oheap_out='> ($ Id.VSub_Number 2)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <Id.VSub_DollarName '$OSH_OVM'>
              more_env: []
              words: [
                {($ Id.VSub_DollarName OSH_OVM)}
                {<-n>}
                {<--ast-format>}
                {<oheap>}
                {(DQ ($ Id.VSub_DollarName script))}
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName oheap_out)}
                )
              ]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <task-spec>
      name: task-spec
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          blame_tok: <read>
                          more_env: []
                          words: [{<read>} {<path>}]
                          redirects: []
                          do_fork: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ ($ Id.VSub_DollarName path) <' _tmp/oheap/'> 
                            (CommandSub
                              left_token: <Id.Left_DollarParen '$('>
                              child: 
                                (command.Simple
                                  blame_tok: <basename>
                                  more_env: []
                                  words: [{<basename>} {($ Id.VSub_DollarName path)}]
                                  redirects: []
                                  do_fork: T
                                )
                              right: <Id.Eof_RParen _>
                            ) <__oheap>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: [
                (Redir
                  op: <Id.Redir_Less '<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: {<'benchmarks/osh-parser-files.txt'>}
                )
              ]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <encode-all>
      name: encode-all
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {<'_tmp/oheap'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'times_csv='> <'_tmp/oheap/times.csv'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(SQ <'status,elapsed_secs'>)}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName times_csv)}
                )
              ]
              do_fork: T
            )
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <task-spec>
                  more_env: []
                  words: [{<task-spec>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <xargs>
                  more_env: []
                  words: [
                    {<xargs>}
                    {<-n>}
                    {<2>}
                    {<--verbose>}
                    {<-->}
                    {<'benchmarks/time.py'>}
                    {<--output>}
                    {($ Id.VSub_DollarName times_csv)}
                    {<-->}
                    {($ Id.VSub_Number 0)}
                    {<encode-one>}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <compress-oheap>
      name: compress-oheap
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'c_dir='> ($ Id.VSub_DollarName BASE_DIR) <'/oheap-compressed'>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName c_dir)}]
              redirects: []
              do_fork: T
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [bin]
              iterable: (for_iter.Words words:[{<'_tmp/oheap/'> <Id.Lit_Star '*'> <__oheap>}])
              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 'name='> 
                          (CommandSub
                            left_token: <Id.Left_DollarParen '$('>
                            child: 
                              (command.Simple
                                blame_tok: <basename>
                                more_env: []
                                words: [{<basename>} {($ Id.VSub_DollarName bin)}]
                                redirects: []
                                do_fork: T
                              )
                            right: <Id.Eof_RParen _>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <log>
                      more_env: []
                      words: [{<log>} {(DQ <'Compressing '> ($ Id.VSub_DollarName name))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <gzip>
                      more_env: []
                      words: [{<gzip>} {<--stdout>} {($ Id.VSub_DollarName bin)}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {($ Id.VSub_DollarName c_dir) <'/'> ($ Id.VSub_DollarName name) <.gz>}
                        )
                      ]
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <xz>
                      more_env: []
                      words: [{<xz>} {<--stdout>} {($ Id.VSub_DollarName bin)}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {($ Id.VSub_DollarName c_dir) <'/'> ($ Id.VSub_DollarName name) <.xz>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <compress-text>
      name: compress-text
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'c_dir='> ($ Id.VSub_DollarName BASE_DIR) <'/src-compressed'>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName c_dir)}]
              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>} {<src>}]
                          redirects: []
                          do_fork: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (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 src)}]
                                redirects: []
                                do_fork: T
                              )
                            right: <Id.Eof_RParen _>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <log>
                      more_env: []
                      words: [{<log>} {(DQ <'Compressing '> ($ Id.VSub_DollarName name))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <gzip>
                      more_env: []
                      words: [{<gzip>} {<--stdout>} {($ Id.VSub_DollarName src)}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {($ Id.VSub_DollarName c_dir) <'/'> (${ Id.VSub_Name name) <__text.gz>}
                        )
                      ]
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <xz>
                      more_env: []
                      words: [{<xz>} {<--stdout>} {($ Id.VSub_DollarName src)}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {($ Id.VSub_DollarName c_dir) <'/'> (${ Id.VSub_Name name) <__text.xz>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: [
                (Redir
                  op: <Id.Redir_Less '<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: {<'benchmarks/osh-parser-files.txt'>}
                )
              ]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <print-size>
      name: print-size
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'c1='> ($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'c2='> ($ Id.VSub_Number 2)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <shift>
              more_env: []
              words: [{<shift>} {<2>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <find>
              more_env: []
              words: [
                {<find>}
                {(DQ ($ Id.VSub_At '@'))}
                {<-maxdepth>}
                {<0>}
                {<-printf>}
                {
                  (DQ <'%s,'> ($ Id.VSub_DollarName c1) <','> ($ Id.VSub_DollarName c2) <',%p'> 
                    <Id.Lit_BadBackslash '\\'> <n>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <print-csv>
      name: print-csv
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(SQ <'num_bytes,format,compression,path'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <print-size>
              more_env: []
              words: [{<print-size>} {<text>} {<none>} {<'benchmarks/testdata/'> <Id.Lit_Star '*'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <print-size>
              more_env: []
              words: [
                {<print-size>}
                {<text>}
                {<gz>}
                {($ Id.VSub_DollarName BASE_DIR) <'/src-compressed/'> <Id.Lit_Star '*'> <.gz>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <print-size>
              more_env: []
              words: [
                {<print-size>}
                {<text>}
                {<xz>}
                {($ Id.VSub_DollarName BASE_DIR) <'/src-compressed/'> <Id.Lit_Star '*'> <.xz>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <print-size>
              more_env: []
              words: [
                {<print-size>}
                {<oheap>}
                {<none>}
                {($ Id.VSub_DollarName BASE_DIR) <'/'> <Id.Lit_Star '*'> <__oheap>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <print-size>
              more_env: []
              words: [
                {<print-size>}
                {<oheap>}
                {<gz>}
                {($ Id.VSub_DollarName BASE_DIR) <'/oheap-compressed/'> <Id.Lit_Star '*'> <.gz>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <print-size>
              more_env: []
              words: [
                {<print-size>}
                {<oheap>}
                {<xz>}
                {($ Id.VSub_DollarName BASE_DIR) <'/oheap-compressed/'> <Id.Lit_Star '*'> <.xz>}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <measure>
      name: measure
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <encode-all>
              more_env: []
              words: [{<encode-all>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <compress-oheap>
              more_env: []
              words: [{<compress-oheap>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <compress-text>
              more_env: []
              words: [{<compress-text>}]
              redirects: []
              do_fork: T
            )
          ]
          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 'out_dir='> ($ Id.VSub_DollarName BASE_DIR) <'/stage1'>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName out_dir)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <print-csv>
              more_env: []
              words: [{<print-csv>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName out_dir) <'/sizes.csv'>}
                )
              ]
              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>OHeap Encoding</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>OHeap Encoding</h2>\n'>
                        <'\n'>
                        <'    <h3>Encoding Size (KB)</h3>\n'>
                        <'\n'>
                        <'    <p>Sizes are in KB (powers of 10), not KiB (powers of 2).</p>\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <csv2html>
              more_env: []
              words: [{<csv2html>} {($ Id.VSub_DollarName in_dir) <'/encoding_size.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>Encoding Ratios</h3>\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <csv2html>
              more_env: []
              words: [{<csv2html>} {($ Id.VSub_DollarName in_dir) <'/encoding_ratios.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: <decode>
      name: decode
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [bin]
              iterable: (for_iter.Words words:[{<'_tmp/oheap/'> <Id.Lit_Star '*'> <.oheap>}])
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.TimeBlock
                      keyword: <Id.KW_Time time>
                      pipeline: 
                        (command.Pipeline
                          children: [
                            (command.Simple
                              blame_tok: <'_tmp/osh_demo'>
                              more_env: []
                              words: [{<'_tmp/osh_demo'>} {($ Id.VSub_DollarName bin)}]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <wc>
                              more_env: []
                              words: [{<wc>} {<-l>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          ops: [<Id.Op_Pipe _>]
                        )
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <Id.Left_DoubleQuote '"'>
      more_env: []
      words: [{(DQ ($ Id.VSub_At '@'))}]
      redirects: []
      do_fork: T
    )
  ]
)