(CommandList
  children: [
    (FuncDef
      name: test_ex
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(make)} {(-C)} {(ex)} {(Lit_VarLike "V=") (1)} {(clean)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(ex.out)} spids:[22])
                (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[26])
              ]
            )
            (SimpleCommand
              words: [{(make)} {(-C)} {(ex)} {(Lit_VarLike "V=") (1)}]
              redirects: [
                (Redir op_id:Redir_DGreat fd:-1 arg_word:{(ex.out)} spids:[39])
                (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[43])
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(Lit_Other "[")} {(KW_Bang "!")} {(-x)} {(./ex/ex)} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(FAILED)}) (C {(exit)} {(-1)})]
                  spids: [-1 61]
                )
              ]
              spids: [-1 74]
            )
            (SimpleCommand
              words: [{(make)} {(-C)} {(ex)} {(Lit_VarLike "V=") (1)} {(clean)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[89])
                (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[93])
              ]
            )
            (C {(rm)} {(-f)} {(ex.out)})
          ]
          spids: [8]
        )
      spids: [4 7]
    )
    (FuncDef
      name: test_ex_suffix
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(make)} {(-C)} {(ex)} {(Lit_VarLike "V=") (1)} {(clean)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(ex.out)} spids:[124])
                (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[128])
              ]
            )
            (SimpleCommand
              words: [{(make)} {(-rR)} {(-C)} {(ex)} {(Lit_VarLike "V=") (1)} {(ex.o)}]
              redirects: [
                (Redir op_id:Redir_DGreat fd:-1 arg_word:{(ex.out)} spids:[150])
                (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[154])
              ]
            )
            (SimpleCommand
              words: [{(make)} {(-rR)} {(-C)} {(ex)} {(Lit_VarLike "V=") (1)} {(ex.i)}]
              redirects: [
                (Redir op_id:Redir_DGreat fd:-1 arg_word:{(ex.out)} spids:[171])
                (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[175])
              ]
            )
            (SimpleCommand
              words: [{(make)} {(-rR)} {(-C)} {(ex)} {(Lit_VarLike "V=") (1)} {(ex.s)}]
              redirects: [
                (Redir op_id:Redir_DGreat fd:-1 arg_word:{(ex.out)} spids:[192])
                (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[196])
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(Lit_Other "[")} {(-x)} {(./ex/ex)} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(FAILED)}) (C {(exit)} {(-1)})]
                  spids: [-1 212]
                )
              ]
              spids: [-1 225]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {(KW_Bang "!")} {(-f)} {(./ex/ex.o)} {(-o)} {(KW_Bang "!")} 
                          {(-f)} {(./ex/ex.i)} {(-o)} {(KW_Bang "!")} {(-f)} {(./ex/ex.s)} {(Lit_Other "]")}
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(FAILED)}) (C {(exit)} {(-1)})]
                  spids: [-1 258]
                )
              ]
              spids: [-1 271]
            )
            (SimpleCommand
              words: [{(make)} {(-C)} {(ex)} {(Lit_VarLike "V=") (1)} {(clean)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[286])
                (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[290])
              ]
            )
            (C {(rm)} {(-f)} {(ex.out)})
          ]
          spids: [110]
        )
      spids: [106 109]
    )
    (FuncDef
      name: test_ex_include
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(make)} {(-C)} {(ex)} {(Lit_VarLike "V=") (1)} {(clean)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(ex.out)} spids:[321])
                (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[325])
              ]
            )
            (C {(touch)} {(ex/krava.h)})
            (SimpleCommand
              words: [
                {(make)}
                {(-C)}
                {(ex)}
                {(Lit_VarLike "V=") (1)}
                {(Lit_VarLike "CFLAGS=") (-DINCLUDE)}
              ]
              redirects: [
                (Redir op_id:Redir_DGreat fd:-1 arg_word:{(ex.out)} spids:[351])
                (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[355])
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(Lit_Other "[")} {(KW_Bang "!")} {(-x)} {(./ex/ex)} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(FAILED)}) (C {(exit)} {(-1)})]
                  spids: [-1 373]
                )
              ]
              spids: [-1 386]
            )
            (C {(rm)} {(-f)} {(ex/krava.h)} {(ex/ex)})
            (SimpleCommand
              words: [{(make)} {(-C)} {(ex)} {(Lit_VarLike "V=") (1)}]
              redirects: [
                (Redir op_id:Redir_DGreat fd:-1 arg_word:{(ex.out)} spids:[412])
                (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[416])
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(Lit_Other "[")} {(KW_Bang "!")} {(-x)} {(./ex/ex)} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(FAILED)}) (C {(exit)} {(-1)})]
                  spids: [-1 434]
                )
              ]
              spids: [-1 447]
            )
            (SimpleCommand
              words: [{(make)} {(-C)} {(ex)} {(Lit_VarLike "V=") (1)} {(clean)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[462])
                (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[466])
              ]
            )
            (C {(rm)} {(-f)} {(ex.out)})
          ]
          spids: [307]
        )
      spids: [303 306]
    )
    (C {(echo)} {(-n)} {(Testing..)})
    (C {(test_ex)})
    (C {(test_ex_suffix)})
    (C {(test_ex_include)})
    (C {(echo)} {(OK)})
  ]
)