(command.CommandList
  children: [
    (C {<Setup.provide>} {<C>} {<0.1>})
    (C {<Id.Lit_Colon ':'>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name C_PREFIX>
          suffix_op: 
            (suffix_op.Unary
              tok: <Id.VTest_Equals '='>
              arg_word: {(DQ <'/'> ($ Id.VSub_DollarName '$SETUP_PREFIX'))}
            )
        )
      }
    )
    (C {<Id.Lit_Colon ':'>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name C_BUILD>
          suffix_op: 
            (suffix_op.Unary
              tok: <Id.VTest_Equals '='>
              arg_word: {(DQ (${ Id.VSub_Name C_PREFIX) <.build>)}
            )
        )
      }
    )
    (C {<Id.Lit_Colon ':'>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name C_SRC>
          suffix_op: 
            (suffix_op.Unary
              tok: <Id.VTest_Equals '='>
              arg_word: {(DQ (${ Id.VSub_Name C_PREFIX) <src>)}
            )
        )
      }
    )
    (C {<Id.Lit_Colon ':'>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name C_DEP>
          suffix_op: 
            (suffix_op.Unary
              tok: <Id.VTest_Equals '='>
              arg_word: {(DQ (${ Id.VSub_Name C_BUILD) <'/dep'>)}
            )
        )
      }
    )
    (C {<Id.Lit_Colon ':'>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name C_OBJ>
          suffix_op: 
            (suffix_op.Unary
              tok: <Id.VTest_Equals '='>
              arg_word: {(DQ (${ Id.VSub_Name C_BUILD) <'/obj'>)}
            )
        )
      }
    )
    (C {<Id.Lit_Colon ':'>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name C_BIN>
          suffix_op: 
            (suffix_op.Unary
              tok: <Id.VTest_Equals '='>
              arg_word: {(DQ (${ Id.VSub_Name C_BUILD) <'/bin'>)}
            )
        )
      }
    )
    (command.ShFunction
      name: C.compile
      body: 
        (BraceGroup
          children: [
            (command.Sentence
              child: 
                (C {<gcc>} {<-c>} {(DQ ($ Id.VSub_Number '$2'))} 
                  {
                    (braced_var_sub
                      token: <Id.VSub_Name C_SRC>
                      suffix_op: 
                        (suffix_op.Unary
                          tok: <Id.VTest_ColonPlus ':+'>
                          arg_word: {<-I> (DQ ($ Id.VSub_DollarName '$C_SRC'))}
                        )
                    )
                  } {<-o>} {(DQ ($ Id.VSub_Number '$1'))}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
    )
    (command.ShFunction
      name: C.ld
      body: 
        (BraceGroup
          children: [
            (command.Sentence
              child: 
                (C {<gcc>} {<-o>} {(DQ ($ Id.VSub_Number '$1'))} 
                  {
                    (DQ 
                      (braced_var_sub
                        token: <Id.VSub_At '@'>
                        suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 2>})
                      )
                    )
                  }
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
    )
    (command.ShFunction
      name: C.includes
      body: 
        (BraceGroup
          children: [
            (command.Sentence
              child: 
                (command.Simple
                  words: [
                    {<sed>}
                    {(SQ <'s,#include "(.*)",'>) 
                      (DQ 
                        (braced_var_sub
                          token: <Id.VSub_Name C_SRC>
                          suffix_op: 
                            (suffix_op.Unary
                              tok: <Id.VTest_ColonPlus ':+'>
                              arg_word: {($ Id.VSub_DollarName '$C_SRC') <Id.Lit_Slash '/'>}
                            )
                        )
                      ) (SQ <'\\1,p'>)
                    }
                    {<-rn>}
                    {(DQ ($ Id.VSub_Number '$2'))}
                  ]
                  redirects: [
                    (redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {(DQ ($ Id.VSub_Number '$1'))}
                    )
                  ]
                  do_fork: T
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
    )
    (C {<prepare-match>} {(DQ <Id.Lit_Dollar '$'>)})
  ]
)