(CommandList
  children: [
    (FuncDef
      name: is-shell
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:path)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [25]
                )
              ]
              spids: [23]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:shebang) op:Equal spids:[31])]
              spids: [29]
            )
            (SimpleCommand
              words: [{(read)} {(shebang)}]
              redirects: [
                (Redir
                  op_id: Redir_Less
                  fd: 16777215
                  arg_word: {($ VSub_Name '$path')}
                  spids: [38]
                )
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:shebang)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name shebang>
                        suffix_op: (PatSub pat:{(' ')} replace:{} do_all:T do_prefix:F do_suffix:F)
                        spids: [47 53]
                      )
                    }
                  spids: [46]
                )
              ]
              spids: [46]
            )
            (DBracket
              expr: 
                (BoolBinary
                  op_id: BoolBinary_GlobDEqual
                  left: {($ VSub_Name '$shebang')}
                  right: {(Lit_Other '*') (sh)}
                )
            )
          ]
          spids: [20]
        )
      spids: [16 19]
    )
    (FuncDef
      name: unittest
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: file
              iter_words: [{(bin/oil.py)} {(configure)} {(install)}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: (C {(is-shell)} {($ VSub_Name '$file')})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(C {(echo)} {(YES)} {($ VSub_Name '$file')})]
                          spids: [16777215 103]
                        )
                      ]
                      else_action: [(C {(echo)} {(NO)} {($ VSub_Name '$file')})]
                      spids: [113 123]
                    )
                  ]
                  spids: [93 126]
                )
              spids: [85 91]
            )
          ]
          spids: [77]
        )
      spids: [73 76]
    )
    (C {(DQ ($ VSub_At '$@'))})
  ]
)