(CommandList
  children: [
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (C {(set)} {(-o)} {(errexit)})
    (C {(source)} {(build/common.sh)})
    (FuncDef
      name: write-release-date
      body: 
        (BraceGroup
          children: [
            (C {(mkdir)} {(-p)} {(_build)})
            (SimpleCommand
              words: [{(date)} {(--utc)} {(--rfc-3339)} {(seconds)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(_build/release-date.txt)}
                  spids: [73]
                )
              ]
            )
          ]
          spids: [47]
        )
      spids: [43 46]
    )
    (FuncDef
      name: main-name
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:python_main)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(hello)})
                        spids: [90 94]
                      )
                    }
                  spids: [89]
                )
              ]
              spids: [87]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ovm_bundle_prefix)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(hello.ovm)})
                        spids: [100 104]
                      )
                    }
                  spids: [99]
                )
              ]
              spids: [97]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ('char* MAIN_NAME = ') (Right_DoubleQuote '"') ($ VSub_Name '$python_main') 
                        (Right_DoubleQuote '"') (';\n') ('#if OVM_DEBUG\n') ('  char* OVM_BUNDLE_FILENAME = ') (Right_DoubleQuote '"') 
                        (${ VSub_Name ovm_bundle_prefix) (-dbg) (Right_DoubleQuote '"') (';\n') ('#else\n') ('  char* OVM_BUNDLE_FILENAME = ') 
                        (Right_DoubleQuote '"') ($ VSub_Name '$ovm_bundle_prefix') (Right_DoubleQuote '"') (';\n') ('#endif\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [110]
                )
              ]
            )
          ]
          spids: [84]
        )
      spids: [80 83]
    )
    (FuncDef
      name: c-module-toc
      body: 
        (BraceGroup
          children: [(C {(cd)} {($ VSub_Name '$PY27')}) (C {(../build/c_module_toc.py)})]
          spids: [143]
        )
      spids: [139 142]
    )
    (FuncDef
      name: runpy-deps
      body: 
        (BraceGroup
          children: [
            (C {($ VSub_Name '$PREPARE_DIR') (/python)} {(-S)} {(build/runpy_deps.py)} 
              {(DQ ($ VSub_At '$@'))}
            )
          ]
          spids: [163]
        )
      spids: [159 162]
    )
    (FuncDef
      name: app-deps
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:app_name)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(hello)})
                        spids: [224 228]
                      )
                    }
                  spids: [223]
                )
              ]
              spids: [221]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:pythonpath)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(build) (Lit_Slash /) (testdata)}
                          )
                        spids: [234 240]
                      )
                    }
                  spids: [233]
                )
              ]
              spids: [231]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:main_module)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 3>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(hello)})
                        spids: [246 250]
                      )
                    }
                  spids: [245]
                )
              ]
              spids: [243]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:prefix)
                  op: Equal
                  rhs: {(_build/) ($ VSub_Name '$app_name') (/app-deps)}
                  spids: [256]
                )
              ]
              spids: [254]
            )
            (C {(ln)} {(-s)} {(-f)} {($ VSub_Name '$PWD') (/build/app_deps.py)} {(_tmp)})
            (SimpleCommand
              words: [
                {($ VSub_Name '$PREPARE_DIR') (/python)}
                {(-S)}
                {(_tmp/app_deps.py)}
                {($ VSub_Name '$main_module')}
                {($ VSub_Name '$prefix')}
              ]
              more_env: [(env_pair name:PYTHONPATH val:{($ VSub_Name '$pythonpath')} spids:[280])]
            )
          ]
          spids: [218]
        )
      spids: [214 217]
    )
    (FuncDef
      name: files-manifest
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: path
              iter_words: [{(DQ ($ VSub_At '$@'))}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [(C {(echo)} {(DQ ($ VSub_Name '$path') (' ') ($ VSub_Name '$path'))})]
                  spids: [317 329]
                )
              spids: [311 315]
            )
          ]
          spids: [303]
        )
      spids: [299 302]
    )
    (FuncDef
      name: quick-ref-manifest
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dir)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [346]
                )
              ]
              spids: [344]
            )
            (ForEach
              iter_name: path
              iter_words: [{($ VSub_Name '$dir') (/) (Lit_Other '*')}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [(C {(echo)} {(DQ ($ VSub_Name '$path') (' ') ($ VSub_Name '$path'))})]
                  spids: [361 376]
                )
              spids: [355 359]
            )
          ]
          spids: [341]
        )
      spids: [337 340]
    )
    (FuncDef
      name: make-dotd
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:app_name)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(hello)})
                        spids: [394 398]
                      )
                    }
                  spids: [393]
                )
              ]
              spids: [391]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:app_deps_to_compile)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: 
                              {(_tmp) (Lit_Slash /) (hello) (Lit_Slash /) (app-deps-to-compile.txt)}
                          )
                        spids: [404 412]
                      )
                    }
                  spids: [403]
                )
              ]
              spids: [401]
            )
            (C {(echo)} {(DQ ('# TODO ') ($ VSub_Name '$app_deps_to_compile'))})
            (C {(echo)} {(DQ (X_build/) ($ VSub_Name '$app_name') ('/ovm:'))})
            (C {(echo)} {(DQ (X_build/) ($ VSub_Name '$app_name') ('/ovm-dbg:'))})
            (C {(echo)} {(DQ (X_build/) ($ VSub_Name '$app_name') ('/ovm-cov:'))})
          ]
          spids: [388]
        )
      spids: [384 387]
    )
    (FuncDef
      name: extdecls
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: mod
              iter_words: [{(DQ ($ VSub_At '$@'))}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      children: [
                        (C {(test)} {(DQ ($ VSub_Name '$mod'))} {(Lit_Other '=')} {(readline)})
                        (C {(echo)} {(DQ ('#ifdef HAVE_READLINE'))})
                      ]
                      op_id: Op_DAmp
                    )
                    (C {(echo)} {(DQ ('extern void init') ($ VSub_Name '$mod') ('(void);'))})
                    (AndOr
                      children: [
                        (C {(test)} {(DQ ($ VSub_Name '$mod'))} {(Lit_Other '=')} {(readline)})
                        (C {(echo)} {(DQ ('#endif'))})
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  spids: [502 552]
                )
              spids: [496 500]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
          ]
          spids: [488]
        )
      spids: [484 487]
    )
    (FuncDef
      name: initbits
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: mod
              iter_words: [{(DQ ($ VSub_At '$@'))}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      children: [
                        (C {(test)} {(DQ ($ VSub_Name '$mod'))} {(Lit_Other '=')} {(readline)})
                        (C {(echo)} {(DQ ('#ifdef HAVE_READLINE'))})
                      ]
                      op_id: Op_DAmp
                    )
                    (C {(echo)} 
                      {
                        (DQ ('    {') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                          ($ VSub_Name '$mod') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (', init') ($ VSub_Name '$mod') ('},')
                        )
                      }
                    )
                    (AndOr
                      children: [
                        (C {(test)} {(DQ ($ VSub_Name '$mod'))} {(Lit_Other '=')} {(readline)})
                        (C {(echo)} {(DQ ('#endif'))})
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  spids: [583 637]
                )
              spids: [577 581]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
          ]
          spids: [569]
        )
      spids: [565 568]
    )
    (FuncDef
      name: gen-module-init
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:extdecls) op:Equal spids:[662])]
              spids: [660]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:extdecls)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(extdecls)} {(DQ ($ VSub_At '$@'))})]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [666 672]
                      )
                    }
                  spids: [665]
                )
              ]
              spids: [665]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:initbits) op:Equal spids:[677])]
              spids: [675]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:initbits)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(initbits)} {(DQ ($ VSub_At '$@'))})]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [681 687]
                      )
                    }
                  spids: [680]
                )
              ]
              spids: [680]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:template)
                  op: Equal
                  rhs: {($ VSub_Name '$PY27') (/Modules/config.c.in)}
                  spids: [693]
                )
              ]
              spids: [691]
            )
            (C {(awk)} {(-v)} {(Lit_VarLike 'template=') ($ VSub_Name '$template')} {(-v)} 
              {(Lit_VarLike 'extdecls=') (DQ ($ VSub_Name '$extdecls'))} {(-v)} {(Lit_VarLike 'initbits=') (DQ ($ VSub_Name '$initbits'))} 
              {
                (SQ <'\n'> <'    BEGIN {\n'> 
                  <'      print "/* Generated automatically from " template " */"\n'> <'    }\n'> <'    /MARKER 1/ {\n'> <'      print extdecls\n'> <'      next\n'> <'    }\n'> 
                  <'    /MARKER 2/ {\n'> <'      print initbits\n'> <'      next\n'> <'    }\n'> <'    {\n'> <'      print $0\n'> <'    }\n'> 
                  <'    '>
                )
              } {($ VSub_Name '$template')}
            )
          ]
          spids: [657]
        )
      spids: [653 656]
    )
    (FuncDef
      name: join-modules
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:static)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(static-c-modules.txt)}
                          )
                        spids: [764 768]
                      )
                    }
                  spids: [763]
                )
              ]
              spids: [761]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:discovered)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(_build) (Lit_Slash /) (oil) (Lit_Slash /) (all-deps-c.txt)}
                          )
                        spids: [774 782]
                      )
                    }
                  spids: [773]
                )
              ]
              spids: [771]
            )
            (Pipeline
              children: [
                (C {(egrep)} {(--no-filename)} {(--only-matching)} {(SQ <'^[a-zA-Z_\\.]+'>)} 
                  {($ VSub_Name '$static')} {($ VSub_Name '$discovered')}
                )
                (C {(sort)})
                (C {(uniq)})
              ]
              negated: False
            )
          ]
          spids: [758]
        )
      spids: [754 757]
    )
    (FuncDef
      name: clean-pyc
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (C {(find)} {($ VSub_Name '$PY27') (/Lib)} {(-name)} {(SQ <'*.pyc'>)})
                (C {(xargs)} {(--no-run-if-empty)} {(--)} {(rm)} {(--verbose)})
              ]
              negated: False
            )
          ]
          spids: [846]
        )
      spids: [842 845]
    )
    (FuncDef
      name: clean
      body: 
        (BraceGroup
          children: [
            (C {(rm)} {(-r)} {(-f)} {(_build)} {(_release)})
            (C {(rm)} {(-f)} {(_bin/oil.) (Lit_Other '*')} {(_bin/hello.) (Lit_Other '*')})
            (C {(clean-pyc)})
          ]
          spids: [885]
        )
      spids: [881 884]
    )
    (C {(DQ ($ VSub_At '$@'))})
  ]
)