(CommandList
  children: [
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (C {(set)} {(-o)} {(errexit)})
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:THIS_DIR)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (AndOr
                        ops: [Op_DAmp]
                        children: [
                          (C {(cd)} 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(dirname)} {($ VSub_Number '$0')})]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [53 57]
                              )
                            }
                          )
                          (C {(pwd)})
                        ]
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [50 62]
              )
            }
          spids: [49]
        )
      ]
      spids: [47]
    )
    (C {(source)} {($ VSub_Name '$THIS_DIR') (/common.sh)})
    (C {(source)} {($ VSub_Name '$THIS_DIR') (/../build/common.sh)})
    (FuncDef
      name: md5-manifest
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tree)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [88]
                )
              ]
              spids: [86]
            )
            (C {(pushd)} {($ VSub_Name '$tree')})
            (Pipeline
              children: [
                (C {(find)} {(.)} {(-type)} {(f)})
                (C {(sort)})
                (C {(xargs)} {(stat)} {(--format)} {(SQ <'%s %n'>)})
                (C {(tee)} {(SIZES.txt)})
              ]
              negated: F
            )
            (Pipeline
              children: [
                (C {(find)} {(.)} {(-type)} {(f)})
                (C {(sort)})
                (C {(xargs)} {(md5sum)})
                (C {(tee)} {(MD5.txt)})
              ]
              negated: F
            )
            (C {(popd)})
          ]
          spids: [83]
        )
      spids: [79 82]
    )
    (FuncDef
      name: _compile-tree
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:src_tree)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [171]
                )
              ]
              spids: [169]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dest_tree)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [177]
                )
              ]
              spids: [175]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:version)
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [183]
                )
              ]
              spids: [181]
            )
            (C {(shift)} {(3)})
            (C {(rm)} {(-r)} {(-f)} {($ VSub_Name '$dest_tree')})
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:ext) op:Equal rhs:{(pyc)} spids:[209])]
              spids: [207]
            )
            (ForEach
              iter_name: rel_path
              iter_words: [{(DQ ($ VSub_At '$@'))}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {($ VSub_Name '$rel_path')})
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:dest)
                          op: Equal
                          rhs: 
                            {(${ VSub_Name dest_tree) (/) 
                              (BracedVarSub
                                token: <VSub_Name rel_path>
                                suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(.py)})
                                spids: [240 244]
                              ) (.) (${ VSub_Name ext)
                            }
                          spids: [235]
                        )
                      ]
                      spids: [233]
                    )
                    (C {(mkdir)} {(-p)} 
                      {
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(dirname)} {($ VSub_Name '$dest')})]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [255 259]
                        )
                      }
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(test)} {($ VSub_Name '$version')} {(Lit_Other '=')} {(ccompile)})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(misc/ccompile.py)} 
                              {($ VSub_Name '$src_tree') (/) (${ VSub_Name rel_path)} {($ VSub_Name '$dest')}
                            )
                          ]
                          spids: [16777215 283]
                        )
                        (if_arm
                          cond: [
                            (Sentence
                              child: (C {(test)} {($ VSub_Name '$version')} {(Lit_Other '=')} {(opy)})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {($ VSub_Name '$THIS_DIR') (/../bin/opyc)} {(compile)} 
                              {($ VSub_Name '$src_tree') (/) (${ VSub_Name rel_path)} {($ VSub_Name '$dest')}
                            )
                          ]
                          spids: [297 308]
                        )
                      ]
                      else_action: [(C {(die)} {(DQ (bad))})]
                      spids: [325 335]
                    )
                  ]
                  spids: [225 338]
                )
              spids: [219 223]
            )
            (C {(tree)} {($ VSub_Name '$dest_tree')})
            (C {(md5-manifest)} {($ VSub_Name '$dest_tree')})
          ]
          spids: [166]
        )
      spids: [162 165]
    )
    (FuncDef
      name: compile-manifest
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dest_dir)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [369]
                )
              ]
              spids: [367]
            )
            (While
              cond: [
                (Sentence
                  child: (C {(read)} {(full_src_path)} {(rel_dest_path)})
                  terminator: <Op_Semi ';'>
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:dest)
                          op: Equal
                          rhs: {($ VSub_Name '$dest_dir') (/) ($ VSub_Name '$rel_dest_path')}
                          spids: [387]
                        )
                      ]
                      spids: [385]
                    )
                    (C {(mkdir)} {(-p)} 
                      {
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(dirname)} {($ VSub_Name '$dest')})]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [397 401]
                        )
                      }
                    )
                    (C {(log)} {(DQ ('     ') ($ VSub_Name '$full_src_path'))})
                    (C {($ VSub_Name '$THIS_DIR') (/../bin/opyc)} {(compile)} 
                      {($ VSub_Name '$full_src_path')} {($ VSub_Name '$dest')}
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:rel_py_path)
                          op: Equal
                          rhs: 
                            {
                              (BracedVarSub
                                token: <VSub_Name rel_dest_path>
                                suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(.pyc)})
                                spids: [426 430]
                              ) (.py)
                            }
                          spids: [425]
                        )
                      ]
                      spids: [423]
                    )
                    (C {(echo)} {($ VSub_Name '$dest')} {($ VSub_Name '$rel_dest_path')})
                    (C {(echo)} {($ VSub_Name '$full_src_path')} {($ VSub_Name '$rel_py_path')})
                  ]
                  spids: [382 456]
                )
            )
          ]
          spids: [364]
        )
      spids: [360 363]
    )
    (FuncDef
      name: make-mains
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dir)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(_tmp) (Lit_Slash /) (oil-opy)}
                          )
                        spids: [474 480]
                      )
                    }
                  spids: [473]
                )
              ]
              spids: [471]
            )
            (ForEach
              iter_name: link
              iter_words: [
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name OIL_SYMLINKS>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [503 508]
                    )
                  )
                }
              ]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (BraceGroup
                      children: [
                        (C {(echo)} {(SQ <'#!/bin/sh'>)})
                        (C {(echo)} {(DQ ('main=') ($ VSub_Name '$link'))})
                        (C {(echo)} {(SQ <'exec python $(dirname $0)/oil.pyc $main "$@"'>)})
                      ]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: {($ VSub_Name '$dir') (/bin/) ($ VSub_Name '$link')}
                          spids: [541]
                        )
                      ]
                      spids: [515]
                    )
                    (C {(chmod)} {(--verbose)} {(Lit_Other '+') (x)} 
                      {($ VSub_Name '$dir') (/bin/) ($ VSub_Name '$link')}
                    )
                  ]
                  spids: [512 560]
                )
              spids: [501 510]
            )
          ]
          spids: [468]
        )
      spids: [464 467]
    )
    (FuncDef
      name: _fill-oil-tree
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dir)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(_tmp) (Lit_Slash /) (repo-with-opy)}
                          )
                        spids: [597 603]
                      )
                    }
                  spids: [596]
                )
              ]
              spids: [594]
            )
            (C {(cp)} {(-v)} 
              (BracedWordTree
                parts: [(../osh/) (BracedAltPart words:[{(osh)} {(types)}]) (.asdl)]
              ) {($ VSub_Name '$dir') (/osh)}
            )
            (C {(cp)} {(-v)} {(../core/runtime.asdl)} {($ VSub_Name '$dir') (/core)})
            (C {(cp)} {(-v)} {(../asdl/arith.asdl)} {($ VSub_Name '$dir') (/asdl)})
            (C {(ln)} {(-v)} {(-s)} {(-f)} 
              (BracedWordTree
                parts: [($ VSub_Name '$PWD') (/../) (BracedAltPart words:[{(libc)} {(fastlex)}]) (.so)]
              ) {($ VSub_Name '$dir')}
            )
            (C {(ln)} {(-v)} {(-s)} {(-f)} {($ VSub_Name '$PWD') (/../oil-version.txt)} 
              {($ VSub_Name '$dir')}
            )
            (C {(ln)} {(-v)} {(-s)} {(-f)} {(--no-target-directory)} {($ VSub_Name '$PWD') (/../_build)} 
              {($ VSub_Name '$dir') (/_build)}
            )
            (C {(mkdir)} {(-v)} {(-p)} {($ VSub_Name '$dir') (/_tmp)})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:stub)
                  op: Equal
                  rhs: {($ VSub_Name '$dir') (/bin/osh-byterun)}
                  spids: [717]
                )
              ]
              spids: [715]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$stub')}
                  spids: [724]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {('#!/bin/bash\n') ('readonly THIS_DIR=$(cd $(dirname $0) && pwd)\n') 
                      ('exec python $THIS_DIR/opy_.pyc opyc run $THIS_DIR/oil.pyc osh "$@"\n')
                    }
                  do_expansion: False
                  here_end: EOF
                  was_filled: T
                  spids: [727]
                )
              ]
            )
            (C {(chmod)} {(Lit_Other '+') (x)} {($ VSub_Name '$stub')})
          ]
          spids: [591]
        )
      spids: [587 590]
    )
    (FuncDef
      name: oil-repo
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:repo_root)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (AndOr
                                ops: [Op_DAmp]
                                children: [(C {(cd)} {($ VSub_Name '$THIS_DIR') (/..)}) (C {(pwd)})]
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [776 785]
                      )
                    }
                  spids: [775]
                )
              ]
              spids: [773]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:files)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [(C {(oil-python-sources)} {($ VSub_Name '$repo_root')})]
                                )
                              left_token: <Left_CommandSub '$('>
                              spids: [793 797]
                            )
                          }
                        ]
                      )
                    }
                  spids: [790]
                )
              ]
              spids: [788]
            )
            (C {(_compile-tree)} {($ VSub_Name '$repo_root')} {(_tmp/repo-with-cpython/)} {(ccompile)} 
              {
                (DQ 
                  (BracedVarSub
                    token: <VSub_Name files>
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [815 820]
                  )
                )
              }
            )
            (C {(_compile-tree)} {($ VSub_Name '$repo_root')} {(_tmp/repo-with-opy/)} {(opy)} 
              {
                (DQ 
                  (BracedVarSub
                    token: <VSub_Name files>
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [833 838]
                  )
                )
              }
            )
            (C {(_fill-oil-tree)} {(_tmp/repo-with-cpython)})
            (C {(_fill-oil-tree)} {(_tmp/repo-with-opy)})
          ]
          spids: [770]
        )
      spids: [766 769]
    )
    (FuncDef
      name: _oil-bin-manifest
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (BraceGroup
                  children: [
                    (C {(build/actions.sh)} {(runpy-py-to-compile)})
                    (C {(build/actions.sh)} {(py-to-compile)} {(SQ <.>)} {(SQ <bin.oil>)})
                  ]
                  spids: [875]
                )
                (C {(sort)})
                (C {(uniq)})
              ]
              negated: F
            )
          ]
          spids: [859]
        )
      spids: [855 858]
    )
    (FuncDef
      name: oil-bin
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(pushd)} {($ VSub_Name '$THIS_DIR') (/..)}]
              redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(/dev/null)} spids:[920])]
            )
            (Pipeline
              children: [(C {(_oil-bin-manifest)}) (C {(compile-manifest)} {(_tmp/oil-with-opy)})]
              negated: F
            )
            (SimpleCommand
              words: [{(popd)}]
              redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(/dev/null)} spids:[935])]
            )
          ]
          spids: [912]
        )
      spids: [908 911]
    )
    (FuncDef
      name: _opy-bin-manifest
      body: 
        (BraceGroup
          children: [(C {(build/actions.sh)} {(py-to-compile)} {(SQ <.>)} {(SQ <bin.opy_>)})]
          spids: [945]
        )
      spids: [941 944]
    )
    (FuncDef
      name: opy-bin
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(pushd)} {(..)}]
              redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(/dev/null)} spids:[974])]
            )
            (Pipeline
              children: [(C {(_opy-bin-manifest)}) (C {(compile-manifest)} {(_tmp/opy-with-opy)})]
              negated: F
            )
            (SimpleCommand
              words: [{(popd)}]
              redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(/dev/null)} spids:[989])]
            )
          ]
          spids: [967]
        )
      spids: [963 966]
    )
    (C {(DQ ($ VSub_At '$@'))})
  ]
)