(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: [142]
        )
      spids: [138 141]
    )
    (FuncDef
      name: runpy-deps
      body: 
        (BraceGroup
          children: [
            (C {($ VSub_Name "$PREPARE_DIR") (/python)} {(-S)} {(build/runpy_deps.py)} 
              {(DQ ($ VSub_At "$@"))}
            )
          ]
          spids: [162]
        )
      spids: [158 161]
    )
    (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: [223 227]
                      )
                    }
                  spids: [222]
                )
              ]
              spids: [220]
            )
            (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: [233 239]
                      )
                    }
                  spids: [232]
                )
              ]
              spids: [230]
            )
            (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: [245 249]
                      )
                    }
                  spids: [244]
                )
              ]
              spids: [242]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:prefix)
                  op: Equal
                  rhs: {(_build/) ($ VSub_Name "$app_name") (/app-deps)}
                  spids: [255]
                )
              ]
              spids: [253]
            )
            (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:[279])]
            )
          ]
          spids: [217]
        )
      spids: [213 216]
    )
    (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: [316 328]
                )
              spids: [310 314]
            )
          ]
          spids: [302]
        )
      spids: [298 301]
    )
    (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: [345]
                )
              ]
              spids: [343]
            )
            (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: [360 375]
                )
              spids: [354 358]
            )
          ]
          spids: [340]
        )
      spids: [336 339]
    )
    (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: [393 397]
                      )
                    }
                  spids: [392]
                )
              ]
              spids: [390]
            )
            (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: [403 411]
                      )
                    }
                  spids: [402]
                )
              ]
              spids: [400]
            )
            (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: [387]
        )
      spids: [383 386]
    )
    (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: [501 551]
                )
              spids: [495 499]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
          ]
          spids: [487]
        )
      spids: [483 486]
    )
    (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: [582 636]
                )
              spids: [576 580]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
          ]
          spids: [568]
        )
      spids: [564 567]
    )
    (FuncDef
      name: gen-module-init
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:extdecls) op:Equal spids:[661])]
              spids: [659]
            )
            (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: [665 671]
                      )
                    }
                  spids: [664]
                )
              ]
              spids: [664]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:initbits) op:Equal spids:[676])]
              spids: [674]
            )
            (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: [680 686]
                      )
                    }
                  spids: [679]
                )
              ]
              spids: [679]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:template)
                  op: Equal
                  rhs: {($ VSub_Name "$PY27") (/Modules/config.c.in)}
                  spids: [692]
                )
              ]
              spids: [690]
            )
            (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: [656]
        )
      spids: [652 655]
    )
    (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: [763 767]
                      )
                    }
                  spids: [762]
                )
              ]
              spids: [760]
            )
            (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: [773 781]
                      )
                    }
                  spids: [772]
                )
              ]
              spids: [770]
            )
            (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: [757]
        )
      spids: [753 756]
    )
    (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: [845]
        )
      spids: [841 844]
    )
    (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: [884]
        )
      spids: [880 883]
    )
    (C {(DQ ($ VSub_At "$@"))})
  ]
)