(command.CommandList
  children: [
    (C {(Id.KW_Set set)} {(-o)} {(nounset)})
    (C {(Id.KW_Set set)} {(-o)} {(pipefail)})
    (C {(Id.KW_Set set)} {(-o)} {(errexit)})
    (C {(source)} {(test/common.sh)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OPYC)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:OPYC span_id:45)
                suffix_op: 
                  (suffix_op.Unary
                    op_id: Id.VTest_ColonHyphen
                    arg_word: {(bin) (Id.Lit_Slash /) (opyc)}
                  )
              )
            }
          spids: [43]
        )
      ]
    )
    (C {(readonly)} {(Id.Lit_VarLike 'TMP_DIR=') (_tmp/opy-test)})
    (C {(mkdir)} {(-p)} {($ Id.VSub_DollarName '$TMP_DIR')})
    (command.ShFunction
      name: usage
      body: 
        (command.BraceGroup
          children: [
            (C {(Id.KW_Set set)} {(Id.Lit_Other '+') (o)} {(errexit)})
            (C {(bin/opy_.py)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {(test)} {($ Id.VSub_QMark '$?')} {(-eq)} {(2)}) (C {(fail)})]
            )
            (C {(bin/opy_.py)} {(--version)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {(test)} {($ Id.VSub_QMark '$?')} {(-eq)} {(0)}) (C {(fail)})]
            )
            (C {(bin/opyc)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {(test)} {($ Id.VSub_QMark '$?')} {(-eq)} {(2)}) (C {(fail)})]
            )
            (C {(bin/opyc)} {(invalid)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {(test)} {($ Id.VSub_QMark '$?')} {(-eq)} {(2)}) (C {(fail)})]
            )
            (C {(bin/opyc)} {(--help)})
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [(C {(test)} {($ Id.VSub_QMark '$?')} {(-eq)} {(0)}) (C {(fail)})]
            )
          ]
        )
    )
    (command.ShFunction
      name: parse
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:233)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$TMP_DIR') (/hello.py)}
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:237)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 242
                  stdin_parts: [('print(1+2)\n')]
                )
              ]
            )
            (C {($ Id.VSub_DollarName '$OPYC')} {(parse)} 
              {($ Id.VSub_DollarName '$TMP_DIR') (/hello.py)}
            )
          ]
        )
    )
    (command.ShFunction
      name: compile
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:263)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$TMP_DIR') (/loop.py)}
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:267)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 273
                  stdin_parts: [('for i in xrange(4):\n') ('  print(i*i)\n')]
                )
              ]
            )
            (C {($ Id.VSub_DollarName '$OPYC')} {(compile)} 
              {($ Id.VSub_DollarName '$TMP_DIR') (/loop.py)} {($ Id.VSub_DollarName '$TMP_DIR') (/loop.opyc)}
            )
            (command.Simple
              words: [{(python)} {($ Id.VSub_DollarName '$TMP_DIR') (/loop.opyc)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:297)
                  fd: -1
                  arg_word: {(out.txt)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.Simple
                  words: [{(diff)} {(out.txt)} {(-)}]
                  redirects: [
                    (redir.HereDoc
                      op: (Token id:Id.Redir_DLess val:'<<' span_id:308)
                      fd: -1
                      here_begin: {(EOF)}
                      here_end_span_id: 320
                      stdin_parts: [('0\n') ('1\n') ('4\n') ('9\n')]
                    )
                  ]
                )
                (C {(fail)})
              ]
            )
          ]
        )
    )
    (C {(readonly)} {(-a)} 
      {(Id.Lit_VarLike 'PASSING=') 
        (sh_array_literal
          left: (Token id:Id.Op_LParen val:'(' span_id:329)
          words: [{(usage)} {(parse)} {(compile)}]
        )
      }
    )
    (command.ShFunction
      name: all-passing
      body: 
        (command.BraceGroup
          children: [
            (C {(run-all)} 
              {
                (DQ 
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:PASSING span_id:354)
                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                  )
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: run-for-release
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [
                {($ Id.VSub_Number '$0')}
                {(run-all)}
                {
                  (DQ 
                    (braced_var_sub
                      token: (Token id:Id.VSub_Name val:PASSING span_id:383)
                      bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                    )
                  )
                }
              ]
              more_env: [(env_pair name:OPYC val:{(_bin/opyc)} spids:[374])]
            )
          ]
        )
    )
    (C {(DQ ($ Id.VSub_At '$@'))})
  ]
)