(CommandList
  children: [
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (C {(set)} {(-o)} {(errexit)})
    (C {(source)} {(common.sh)})
    (C {(source)} {(compare.sh)})
    (FuncDef
      name: _fill-opy-tree
      body: 
        (BraceGroup
          children: [(C {(echo)} {(TODO) (Lit_Other ':')} {(grammar)} {(pickle)})]
          spids: [54]
        )
      spids: [50 53]
    )
    (FuncDef
      name: compile-opy-tree
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:src)
                  op: Equal
                  rhs: {($ VSub_Name '$PWD')}
                  spids: [78]
                )
              ]
              spids: [76]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:files)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (C {(find)} {($ VSub_Name '$src')} {(-name)} {(_tmp)} {(-a)} {(-prune)} 
                                      {(-o)} {(-name)} {(SQ <'*.py'>)} {(-a)} {(-printf)} {(SQ <'%P\\n'>)}
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub '$('>
                              spids: [87 119]
                            )
                          }
                        ]
                      )
                    }
                  spids: [84]
                )
              ]
              spids: [82]
            )
            (C {(_compile-tree)} {($ VSub_Name '$src')} {(_tmp/opy-ccompile/)} {(ccompile)} 
              {
                (DQ 
                  (BracedVarSub
                    token: <VSub_Name files>
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [151 156]
                  )
                )
              }
            )
            (C {(_compile-tree)} {($ VSub_Name '$src')} {(_tmp/opy-opy/)} {(opy)} 
              {
                (DQ 
                  (BracedVarSub
                    token: <VSub_Name files>
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [169 174]
                  )
                )
              }
            )
          ]
          spids: [73]
        )
      spids: [69 72]
    )
    (FuncDef
      name: zip-oil-tree
      body: 
        (BraceGroup
          children: [
            (C {(rm)} {(-f)} {(_tmp/oil.zip)})
            (C {(pushd)} {(_tmp/osh-ccompile)})
            (C {(zip)} {(../oil.zip)} {(-r)} {(.)})
            (C {(popd)})
          ]
          spids: [184]
        )
      spids: [180 183]
    )
    (FuncDef
      name: write-speed
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_tmp/speed.py)}
                  spids: [226]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('def do_sum(n):\n') ('  sum = 0\n') ('  for i in xrange(n):\n') 
                        ('    sum += i\n') ('  print(sum)\n') ('\n') ("if __name__ == '__main__':\n") ('  import sys\n') 
                        ('  n = int(sys.argv[1])\n') ('  do_sum(n)\n') ('\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [229]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_tmp/speed_main.py)}
                  spids: [247]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('import sys \n') ('import speed\n') ('\n') ('n = int(sys.argv[1])\n') 
                        ('speed.do_sum(n)\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [250]
                )
              ]
            )
          ]
          spids: [221]
        )
      spids: [217 220]
    )
    (FuncDef
      name: opy-speed-test
      body: 
        (BraceGroup
          children: [
            (C {(write-speed)})
            (C {(_compile-one)} {(_tmp/speed.py)} {(_tmp/speed.pyc)})
            (C {(_compile-one)} {(_tmp/speed_main.py)} {(_tmp/speed_main.pyc)})
            (C {(cp)} {(_tmp/speed.pyc)} {(_tmp/speed.opyc)})
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:n) op:Equal rhs:{(10000)} spids:[302])]
              spids: [300]
            )
            (C {(echo)} {(PYTHON)})
            (TimeBlock pipeline:(C {(python)} {(_tmp/speed.opyc)} {($ VSub_Name '$n')}))
            (C {(echo)} {(OPY)})
            (TimeBlock
              pipeline: (C {(opy_)} {(run)} {(_tmp/speed.opyc)} {($ VSub_Name '$n')})
            )
            (C {(echo)} {(PYTHON)})
            (TimeBlock pipeline:(C {(python)} {(_tmp/speed_main.pyc)} {($ VSub_Name '$n')}))
            (C {(echo)} {(OPY)})
            (TimeBlock
              pipeline: (C {(opy_)} {(run)} {(_tmp/speed_main.pyc)} {($ VSub_Name '$n')})
            )
          ]
          spids: [266]
        )
      spids: [262 265]
    )
    (FuncDef
      name: byterun-speed-test
      body: 
        (BraceGroup
          children: [
            (C {(write-speed)})
            (C {(echo)} {(OLD)} {(BYTERUN)})
            (TimeBlock
              pipeline: (C {(_byterun)} {($ VSub_Name '$PWD') (/_tmp/speed_main.py)} {(10000)})
            )
            (TimeBlock
              pipeline: (C {(_byterun)} {($ VSub_Name '$PWD') (/_tmp/speed.py)} {(10000)})
            )
          ]
          spids: [396]
        )
      spids: [392 395]
    )
    (FuncDef
      name: _byterun
      body: 
        (BraceGroup
          children: [
            (C {(pushd)} {(TildeSubPart prefix:'') (/git/other/byterun)})
            (C {(python)} {(-m)} {(byterun.__main__)} {(DQ ($ VSub_At '$@'))})
            (C {(popd)})
          ]
          spids: [437]
        )
      spids: [433 436]
    )
    (FuncDef
      name: opy-parse-on-byterun
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:arg)
                  op: Equal
                  rhs: {($ VSub_Name '$PWD') (/testdata/hello_py2.py)}
                  spids: [518]
                )
              ]
              spids: [516]
            )
            (C {(pushd)} {(_tmp/opy-opy)})
            (C {(opyg)} {(run)} {(opy_main.pyc)} {(-g)} {($ VSub_Name '$GRAMMAR')} {(parse)} 
              {($ VSub_Name '$arg')}
            )
            (C {(popd)})
          ]
          spids: [513]
        )
      spids: [509 512]
    )
    (FuncDef
      name: osh-parse-on-byterun
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cmd)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {(osh)}
                          {(--ast-output)}
                          {(-)}
                          {(--no-exec)}
                          {(-c)}
                          {(SQ <'echo "hello world"'>)}
                        ]
                      )
                    }
                  spids: [555]
                )
              ]
              spids: [555]
            )
            (C {(../bin/oil.py)} 
              {
                (DQ 
                  (BracedVarSub
                    token: <VSub_Name cmd>
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [577 582]
                  )
                )
              }
            )
            (C {(echo)} {(---)})
            (C {(opyg)} {(run)} {(_tmp/osh-opy/bin/oil.pyc)} 
              {
                (DQ 
                  (BracedVarSub
                    token: <VSub_Name cmd>
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [598 603]
                  )
                )
              }
            )
          ]
          spids: [552]
        )
      spids: [548 551]
    )
    (FuncDef
      name: opy-hello2
      body: (BraceGroup children:[(C {(opyg)} {(run)} {(testdata/hello_py2.py)})] spids:[613])
      spids: [609 612]
    )
    (FuncDef
      name: opy-hello3
      body: (BraceGroup children:[(C {(opyg)} {(run)} {(testdata/hello_py3.py)})] spids:[629])
      spids: [625 628]
    )
    (FuncDef
      name: inspect-pyc
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(misc/inspect_pyc.py)} {(DQ ($ VSub_At '$@'))}]
              more_env: [(env_pair name:PYTHONPATH val:{(.)} spids:[674])]
            )
          ]
          spids: [671]
        )
      spids: [667 670]
    )
    (FuncDef
      name: compare-bytecode
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:left)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [698]
                )
              ]
              spids: [696]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:right)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [704]
                )
              ]
              spids: [702]
            )
            (C {(md5sum)} {(DQ ($ VSub_At '$@'))})
            (C {(ls)} {(-l)} {(DQ ($ VSub_At '$@'))})
            (SimpleCommand
              words: [{(inspect-pyc)} {($ VSub_Name '$left')}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_tmp/pyc-left.txt)}
                  spids: [730]
                )
              ]
            )
            (SimpleCommand
              words: [{(inspect-pyc)} {($ VSub_Name '$right')}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_tmp/pyc-right.txt)}
                  spids: [739]
                )
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {($ VSub_Name '$DIFF')} 
                  (BracedWordTree
                    parts: [(_tmp/pyc-) (BracedAltPart words:[{(left)} {(right)}]) (.txt)]
                  )
                )
                (C {(true)})
              ]
            )
            (ControlFlow token:<ControlFlow_Return return>)
            (SimpleCommand
              words: [{(strings)} {($ VSub_Name '$left')}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_tmp/str-left.txt)}
                  spids: [767]
                )
              ]
            )
            (SimpleCommand
              words: [{(strings)} {($ VSub_Name '$right')}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_tmp/str-right.txt)}
                  spids: [776]
                )
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(diff)} {(-u)} 
                  (BracedWordTree
                    parts: [(_tmp/str-) (BracedAltPart words:[{(left)} {(right)}]) (.txt)]
                  )
                )
                (C {(true)})
              ]
            )
            (C {(echo)} {(KW_Done done)})
          ]
          spids: [693]
        )
      spids: [689 692]
    )
    (FuncDef
      name: determinism-loop
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:func)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [853]
                )
              ]
              spids: [851]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:file)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(.) (Lit_Slash /) (opy_main.py)}
                          )
                        spids: [860 866]
                      )
                    }
                  spids: [859]
                )
              ]
              spids: [857]
            )
            (C {(mkdir)} {(-p)} {(_tmp/det)})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:name)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {($ VSub_Name '$file')})]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [881 885]
                      )
                    }
                  spids: [880]
                )
              ]
              spids: [878]
            )
            (ForEach
              iter_name: i
              iter_words: [
                {
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(seq)} {(100)})])
                    left_token: <Left_CommandSub '$('>
                    spids: [894 898]
                  )
                }
              ]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {(DQ ('--- ') ($ VSub_Name '$i') (' ---'))})
                    (C {($ VSub_Name '$func')} {($ VSub_Name '$file')} 
                      {(_tmp/det/) ($ VSub_Name '$name') (.1)}
                    )
                    (C {($ VSub_Name '$func')} {($ VSub_Name '$file')} 
                      {(_tmp/det/) ($ VSub_Name '$name') (.2)}
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:size1)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(stat)} {(--format)} {(SQ <'%s'>)} 
                                        {(_tmp/det/) ($ VSub_Name '$name') (.1)}
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [935 947]
                              )
                            }
                          spids: [934]
                        )
                      ]
                      spids: [932]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:size2)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(stat)} {(--format)} {(SQ <'%s'>)} 
                                        {(_tmp/det/) ($ VSub_Name '$name') (.2)}
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [953 965]
                              )
                            }
                          spids: [952]
                        )
                      ]
                      spids: [950]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(test)} {($ VSub_Name '$size1')} {(KW_Bang '!') (Lit_Other '=')} 
                                  {($ VSub_Name '$size2')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(echo)} 
                              {
                                (DQ ('mismatched sizes: ') ($ VSub_Name '$size1') (' ') 
                                  ($ VSub_Name '$size2')
                                )
                              }
                            )
                            (C {(compare-bytecode)} 
                              (BracedWordTree
                                parts: [
                                  (_tmp/det/)
                                  ($ VSub_Name '$name')
                                  (.)
                                  (BracedAltPart
                                    words: [{(1)} {(2)}]
                                  )
                                ]
                              )
                            )
                            (C {(echo)} 
                              {(DQ ('Found problem after ') ($ VSub_Name '$i') (' iterations'))}
                            )
                            (ControlFlow token:<ControlFlow_Break break>)
                          ]
                          spids: [16777215 980]
                        )
                      ]
                      spids: [16777215 1021]
                    )
                  ]
                  spids: [901 1024]
                )
              spids: [893 899]
            )
          ]
          spids: [848]
        )
      spids: [844 847]
    )
    (FuncDef
      name: opy-determinism-loop
      body: 
        (BraceGroup
          children: [(C {(determinism-loop)} {(_compile-one)} {(../core/lexer.py)})]
          spids: [1033]
        )
      spids: [1029 1032]
    )
    (FuncDef
      name: hash-determinism
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:in)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [1057]
                )
              ]
              spids: [1055]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [1063]
                )
              ]
              spids: [1061]
            )
            (SimpleCommand
              words: [{(misc/determinism.py)} {($ VSub_Name '$in')}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$out')}
                  spids: [1084]
                )
              ]
            )
          ]
          spids: [1052]
        )
      spids: [1048 1051]
    )
    (FuncDef
      name: hash-determinism-loop
      body: (BraceGroup children:[(C {(determinism-loop)} {(hash-determinism)})] spids:[1095])
      spids: [1091 1094]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(test)} 
                  {
                    (CommandSubPart
                      command_list: (CommandList children:[(C {(basename)} {($ VSub_Number '$0')})])
                      left_token: <Left_CommandSub '$('>
                      spids: [1109 1113]
                    )
                  } {(Lit_Other '=')} {(SQ <smoke.sh>)}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(DQ ($ VSub_At '$@'))})]
          spids: [16777215 1122]
        )
      ]
      spids: [16777215 1129]
    )
  ]
)