(command.CommandList
  children: [
    (command.ShFunction
      name: _make_target_extract_script
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'mode=') (DQ ($ Id.VSub_Number '$1'))})
            (C {(shift)})
            (C {(local)} {(Id.Lit_VarLike 'prefix=') (DQ ($ Id.VSub_Number '$1'))})
            (C {(local)} 
              {(Id.Lit_VarLike 'prefix_pat=') 
                (command_sub
                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:36)
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.Pipeline
                          children: [
                            (C {(printf)} {(DQ ('%s') (Id.Lit_Other '\\') (n))} 
                              {(DQ ($ Id.VSub_DollarName '$prefix'))}
                            )
                            (C {(sed)} 
                              {
                                (SQ 
                                  (Token
                                    id: Id.Lit_Chars
                                    val: 's/[][\\,.*^$(){}?+|/]/\\\\&/g'
                                    span_id: 57
                                  )
                                )
                              }
                            )
                          ]
                          negated: F
                        )
                      ]
                    )
                )
              }
            )
            (C {(local)} 
              {(Id.Lit_VarLike 'basename=') 
                (braced_var_sub
                  token: (Token id:Id.VSub_Name val:prefix span_id:67)
                  suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPound arg_word:{('*') (Id.Lit_Slash /)})
                )
              }
            )
            (C {(local)} 
              {(Id.Lit_VarLike 'dirname_len=') 
                (word_part.ArithSub
                  anode: 
                    (arith_expr.Binary
                      op_id: Id.Arith_Minus
                      left: 
                        (arith_expr.ArithWord
                          w: 
                            {
                              (braced_var_sub
                                token: (Token id:Id.VSub_Name val:prefix span_id:81)
                                prefix_op: (Id.VSub_Pound)
                              )
                            }
                        )
                      right: 
                        (arith_expr.ArithWord
                          w: 
                            {
                              (braced_var_sub
                                token: (Token id:Id.VSub_Name val:basename span_id:88)
                                prefix_op: (Id.VSub_Pound)
                              )
                            }
                        )
                    )
                )
              }
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_GlobDEqual
                              left: {($ Id.VSub_DollarName '$mode')}
                              right: {(Id.BoolUnary_d -d)}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:107)
                    )
                  ]
                  action: [(C {(local)} {(Id.Lit_VarLike 'output=') (DQ (Id.Lit_Other '\\') (2))})]
                  spids: [96 109]
                )
              ]
              else_action: [
                (C {(local)} 
                  {(Id.Lit_VarLike 'output=') (DQ (Id.Lit_Other '\\') (1) (Id.Lit_Other '\\') (2))}
                )
              ]
            )
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:149)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 285
                  stdin_parts: [
                    ('    1,/^# * Make data base/           d;        # skip any makefile output\n')
                    ('    /^# * Finished Make data base/,/^# * Make data base/{\n')
                    ('                                      d;        # skip any makefile output\n')
                    ('    }\n')
                    ('    /^# * Variables/,/^# * Files/     d;        # skip until files section\n')
                    ('    /^# * Not a target/,/^')
                    (Id.Lit_Other '$')
                    ('/          d;        # skip not target blocks\n')
                    ('    /^')
                    (${ Id.VSub_Name prefix_pat)
                    ('/,/^')
                    (Id.Lit_Other '$')
                    ('/!            d;        # skip anything user dont want\n')
                    ('\n')
                    ('    # The stuff above here describes lines that are not\n')
                    ('    #  explicit targets or not targets other than special ones\n')
                    ('    # The stuff below here decides whether an explicit target\n')
                    ('    #  should be output.\n')
                    ('\n')
                    ('    /^# * File is an intermediate prerequisite/ {\n')
                    ('      s/^.*')
                    (Id.Lit_Other '$')
                    ('//;x;                               # unhold target\n')
                    ('      d;                                        # delete line\n')
                    ('    }\n')
                    ('\n')
                    ('    /^')
                    (Id.Lit_Other '$')
                    ('/ {                                      # end of target block\n')
                    ('      x;                                        # unhold target\n')
                    ('      /^')
                    (Id.Lit_Other '$')
                    ('/d;                                    # dont print blanks\n')
                    ('      s|^')
                    (Id.Lit_Other '\\')
                    ('(.')
                    (Id.Lit_Other '\\')
                    ('{')
                    (${ Id.VSub_Name dirname_len)
                    (Id.Lit_Other '\\')
                    ('}')
                    (Id.Lit_Other '\\')
                    (')')
                    (Id.Lit_Other '\\')
                    ('(.')
                    (Id.Lit_Other '\\')
                    ('{')
                    (braced_var_sub
                      token: (Token id:Id.VSub_Name val:basename span_id:205)
                      prefix_op: (Id.VSub_Pound)
                    )
                    (Id.Lit_Other '\\')
                    ('}[^:/]*/')
                    (Id.Lit_Other '\\')
                    ('{0,1')
                    (Id.Lit_Other '\\')
                    ('}')
                    (Id.Lit_Other '\\')
                    (')[^:]*:.*')
                    (Id.Lit_Other '$')
                    ('|')
                    (${ Id.VSub_Name output)
                    ('|p;\n')
                    ('      d;                                        # hide any bugs\n')
                    ('    }\n')
                    ('\n')
                    ('    # This pattern includes a literal tab character as ')
                    (Id.Lit_Other '\\')
                    ('t is not a portable\n')
                    ('    # representation and fails with BSD sed\n')
                    ('    /^[^#\t:%]')
                    (Id.Lit_Other '\\')
                    ('{1,')
                    (Id.Lit_Other '\\')
                    ('}:/ {         # found target block\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.PHONY:/                 d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.SUFFIXES:/              d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.DEFAULT:/               d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.PRECIOUS:/              d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.INTERMEDIATE:/          d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.SECONDARY:/             d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.SECONDEXPANSION:/       d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.DELETE_ON_ERROR:/       d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.IGNORE:/                d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.LOW_RESOLUTION_TIME:/   d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.SILENT:/                d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.EXPORT_ALL_VARIABLES:/  d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.NOTPARALLEL:/           d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.ONESHELL:/              d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.POSIX:/                 d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.NOEXPORT:/              d;            # special target\n')
                    ('      /^')
                    (Id.Lit_Other '\\')
                    ('.MAKE:/                  d;            # special target\n')
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.LogicalOr
                              left: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_z
                                  child: {(DQ (${ Id.VSub_Name prefix_pat))}
                                )
                              right: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobEqual
                                  left: {(DQ (${ Id.VSub_Name prefix_pat))}
                                  right: {(Id.Lit_Other '*') (/)}
                                )
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:318)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [{(cat)}]
                      redirects: [
                        (redir.HereDoc
                          op: (Token id:Id.Redir_DLess val:'<<' span_id:325)
                          fd: -1
                          here_begin: {(EOF)}
                          here_end_span_id: 334
                          stdin_parts: [
                            ('      /^')
                            (${ Id.VSub_Name prefix_pat)
                            ('[^a-zA-Z0-9]/d             # convention for hidden tgt\n')
                          ]
                        )
                      ]
                    )
                  ]
                  spids: [292 320]
                )
              ]
            )
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:342)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 350
                  stdin_parts: [
                    ('      h;                                        # hold target\n')
                    ('      d;                                        # delete line\n')
                    ('    }\n')
                    ('\n')
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShFunction
          name: _make
          body: 
            (command.BraceGroup
              children: [
                (C {(local)} {(cur)} {(prev)} {(words)} {(cword)} {(split)})
                (command.AndOr
                  ops: [Id.Op_DPipe]
                  children: [
                    (C {(_init_completion)} {(-s)})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:380)
                    )
                  ]
                )
                (C {(local)} {(file)} {(makef)} 
                  {(Id.Lit_VarLike 'makef_dir=') 
                    (sh_array_literal
                      left: (Token id:Id.Op_LParen val:'(' span_id:391)
                      words: [{(DQ (-C))} {(DQ (.))}]
                    )
                  } {(makef_inc)} {(i)}
                )
                (command.Case
                  to_match: {($ Id.VSub_DollarName '$prev')}
                  arms: [
                    (case_arm
                      pat_list: [
                        {(-f)}
                        {(--file)}
                        {(--makefile)}
                        {(-o)}
                        {(--old-file)}
                        {(--assume-old)}
                        {(-W)}
                        {(--what-if)}
                        {(--new-file)}
                        {(--assume-new)}
                      ]
                      action: [
                        (C {(_filedir)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:443)
                          arg_word: {(0)}
                        )
                      ]
                      spids: [416 437 448 -1]
                    )
                    (case_arm
                      pat_list: [{(-I)} {(--include-dir)} {(-C)} {(--directory)} {(-m)}]
                      action: [
                        (C {(_filedir)} {(-d)})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:468)
                          arg_word: {(0)}
                        )
                      ]
                      spids: [451 460 473 -1]
                    )
                    (case_arm
                      pat_list: [{(-E)}]
                      action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:COMPREPLY)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (sh_array_literal
                                    left: (Token id:Id.Op_LParen val:'(' span_id:481)
                                    words: [
                                      {
                                        (command_sub
                                          left_token: 
                                            (Token
                                              id: Id.Left_DollarParen
                                              val: '$('
                                              span_id: 483
                                            )
                                          command_list: 
                                            (command.CommandList
                                              children: [
                                                (C {(compgen)} {(-v)} {(--)} 
                                                  {(DQ ($ Id.VSub_DollarName '$cur'))}
                                                )
                                              ]
                                            )
                                        )
                                      }
                                    ]
                                  )
                                }
                              spids: [480]
                            )
                          ]
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:500)
                          arg_word: {(0)}
                        )
                      ]
                      spids: [476 477 505 -1]
                    )
                    (case_arm
                      pat_list: [{(--eval)} {(-D)} {(-V)} {(-x)}]
                      action: [
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:518)
                          arg_word: {(0)}
                        )
                      ]
                      spids: [508 515 523 -1]
                    )
                    (case_arm
                      pat_list: [{(--jobs)} {(-j)}]
                      action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:COMPREPLY)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (sh_array_literal
                                    left: (Token id:Id.Op_LParen val:'(' span_id:533)
                                    words: [
                                      {
                                        (command_sub
                                          left_token: 
                                            (Token
                                              id: Id.Left_DollarParen
                                              val: '$('
                                              span_id: 535
                                            )
                                          command_list: 
                                            (command.CommandList
                                              children: [
                                                (C {(compgen)} {(-W)} 
                                                  {
                                                    (DQ ('{1..') 
                                                      (word_part.ArithSub
                                                        anode: 
                                                          (arith_expr.Binary
                                                            op_id: Id.Arith_Star
                                                            left: 
                                                              (arith_expr.ArithWord
                                                                w: 
                                                                  {
                                                                    (command_sub
                                                                      left_token: 
                                                                        (Token
                                                                          id: Id.Left_DollarParen
                                                                          val: '$('
                                                                          span_id: 545
                                                                        )
                                                                      command_list: 
                                                                        (command.CommandList
                                                                          children: [(C {(_ncpus)})]
                                                                        )
                                                                    )
                                                                  }
                                                              )
                                                            right: 
                                                              (arith_expr.ArithWord
                                                                w: {(Id.Lit_Digits 2)}
                                                              )
                                                          )
                                                      ) ('}')
                                                    )
                                                  } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))}
                                                )
                                              ]
                                            )
                                        )
                                      }
                                    ]
                                  )
                                }
                              spids: [532]
                            )
                          ]
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:567)
                          arg_word: {(0)}
                        )
                      ]
                      spids: [526 529 572 -1]
                    )
                  ]
                )
                (command.AndOr
                  ops: [Id.Op_DAmp]
                  children: [
                    (C {($ Id.VSub_DollarName '$split')})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:583)
                      arg_word: {(0)}
                    )
                  ]
                )
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName '$cur'))}
                                  right: {(-) (Id.Lit_Other '*')}
                                )
                            )
                          terminator: (Token id:Id.Op_Semi val:';' span_id:603)
                        )
                      ]
                      action: [
                        (C {(local)} 
                          {(Id.Lit_VarLike 'opts=') 
                            (DQ 
                              (command_sub
                                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:612)
                                command_list: 
                                  (command.CommandList
                                    children: [(C {(_parse_help)} {(DQ ($ Id.VSub_Number '$1'))})]
                                  )
                              )
                            )
                          }
                        )
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (command.DBracket
                              expr: (bool_expr.WordTest w:{($ Id.VSub_DollarName '$opts')})
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:opts)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (command_sub
                                          left_token: 
                                            (Token
                                              id: Id.Left_DollarParen
                                              val: '$('
                                              span_id: 634
                                            )
                                          command_list: 
                                            (command.CommandList
                                              children: [
                                                (C {(_parse_usage)} {(DQ ($ Id.VSub_Number '$1'))})
                                              ]
                                            )
                                        )
                                      )
                                    }
                                  spids: [632]
                                )
                              ]
                            )
                          ]
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:COMPREPLY)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (sh_array_literal
                                    left: (Token id:Id.Op_LParen val:'(' span_id:647)
                                    words: [
                                      {
                                        (command_sub
                                          left_token: 
                                            (Token
                                              id: Id.Left_DollarParen
                                              val: '$('
                                              span_id: 649
                                            )
                                          command_list: 
                                            (command.CommandList
                                              children: [
                                                (C {(compgen)} {(-W)} 
                                                  {(DQ ($ Id.VSub_DollarName '$opts'))} {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))}
                                                )
                                              ]
                                            )
                                        )
                                      }
                                    ]
                                  )
                                }
                              spids: [646]
                            )
                          ]
                        )
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {($ Id.VSub_DollarName '$COMPREPLY')}
                                  right: {(Id.Lit_Other '*') (Id.BoolBinary_GlobEqual '=')}
                                )
                            )
                            (C {(compopt)} {(-o)} {(nospace)})
                          ]
                        )
                      ]
                      spids: [589 605]
                    )
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {($ Id.VSub_DollarName '$cur')}
                                  right: 
                                    {(Id.Lit_Other '*') (Id.BoolBinary_GlobEqual '=') 
                                      (Id.Lit_Other '*')
                                    }
                                )
                            )
                          terminator: (Token id:Id.Op_Semi val:';' span_id:703)
                        )
                      ]
                      action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:prev)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (braced_var_sub
                                    token: (Token id:Id.VSub_Name val:cur span_id:710)
                                    suffix_op: 
                                      (suffix_op.Unary
                                        op_id: Id.VOp1_DPercent
                                        arg_word: {('=*')}
                                      )
                                  )
                                }
                              spids: [708]
                            )
                          ]
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:cur)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (braced_var_sub
                                    token: (Token id:Id.VSub_Name val:cur span_id:718)
                                    suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('*=')})
                                  )
                                }
                              spids: [716]
                            )
                          ]
                        )
                        (C {(local)} {(diropt)})
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: 
                                    {
                                      (braced_var_sub
                                        token: (Token id:Id.VSub_Name val:prev span_id:732)
                                        suffix_op: (suffix_op.Unary op_id:Id.VOp1_DComma arg_word:{})
                                      )
                                    }
                                  right: 
                                    {(Id.Lit_Other '*') (dir) 
                                      (word_part.ExtGlob
                                        op: (Token id:Id.ExtGlob_QMark val:'?(' span_id:740)
                                        arms: [{(ectory)}]
                                      )
                                    }
                                )
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:diropt)
                                  op: assign_op.Equal
                                  rhs: {(-d)}
                                  spids: [748]
                                )
                              ]
                            )
                          ]
                        )
                        (C {(_filedir)} {($ Id.VSub_DollarName '$diropt')})
                      ]
                      spids: [690 705]
                    )
                  ]
                  else_action: [
                    (command.ForExpr
                      init: 
                        (arith_expr.BinaryAssign
                          op_id: Id.Arith_Equal
                          left: (sh_lhs_expr.Name name:i)
                          right: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)})
                        )
                      cond: 
                        (arith_expr.Binary
                          op_id: Id.Arith_Less
                          left: 
                            (arith_expr.VarRef
                              token: (Token id:Id.Lit_ArithVarLike val:i span_id:777)
                            )
                          right: 
                            (arith_expr.ArithWord
                              w: 
                                {
                                  (braced_var_sub
                                    token: (Token id:Id.VSub_Name val:words span_id:783)
                                    prefix_op: (Id.VSub_Pound)
                                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                  )
                                }
                            )
                        )
                      update: 
                        (arith_expr.UnaryAssign
                          op_id: Id.Node_PostDPlus
                          child: (sh_lhs_expr.Name name:i)
                        )
                      body: 
                        (command.DoGroup
                          children: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.DBracket
                                          expr: 
                                            (bool_expr.Binary
                                              op_id: Id.BoolBinary_GlobDEqual
                                              left: 
                                                {
                                                  (braced_var_sub
                                                    token: 
                                                      (Token
                                                        id: Id.VSub_Name
                                                        val: words
                                                        span_id: 805
                                                      )
                                                    bracket_op: 
                                                      (bracket_op.ArrayIndex
                                                        expr: 
                                                          (arith_expr.VarRef
                                                            token: 
                                                              (Token
                                                                id: Id.Lit_ArithVarLike
                                                                val: i
                                                                span_id: 807
                                                              )
                                                          )
                                                      )
                                                  )
                                                }
                                              right: 
                                                {(-) 
                                                  (word_part.ExtGlob
                                                    op: (Token id:Id.ExtGlob_At val:'@(' span_id:814)
                                                    arms: [{(C)} {(-directory)}]
                                                  )
                                                }
                                            )
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:821)
                                    )
                                  ]
                                  action: [
                                    (C {(eval)} 
                                      {(Id.Lit_VarLike 'makef_dir=') 
                                        (sh_array_literal
                                          left: (Token id:Id.Op_LParen val:'(' span_id:833)
                                          words: [
                                            {(-C)}
                                            {
                                              (DQ 
                                                (braced_var_sub
                                                  token: 
                                                    (Token
                                                      id: Id.VSub_Name
                                                      val: words
                                                      span_id: 839
                                                    )
                                                  bracket_op: 
                                                    (bracket_op.ArrayIndex
                                                      expr: 
                                                        (arith_expr.Binary
                                                          op_id: Id.Arith_Plus
                                                          left: 
                                                            (arith_expr.VarRef
                                                              token: 
                                                                (Token
                                                                  id: Id.Lit_ArithVarLike
                                                                  val: i
                                                                  span_id: 841
                                                                )
                                                            )
                                                          right: 
                                                            (arith_expr.ArithWord
                                                              w: {(Id.Lit_Digits 1)}
                                                            )
                                                        )
                                                    )
                                                )
                                              )
                                            }
                                          ]
                                        )
                                      }
                                    )
                                    (command.ControlFlow
                                      token: (Token id:Id.ControlFlow_Break val:break span_id:851)
                                    )
                                  ]
                                  spids: [800 823]
                                )
                              ]
                            )
                          ]
                        )
                    )
                    (command.ForExpr
                      init: 
                        (arith_expr.BinaryAssign
                          op_id: Id.Arith_Equal
                          left: (sh_lhs_expr.Name name:i)
                          right: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)})
                        )
                      cond: 
                        (arith_expr.Binary
                          op_id: Id.Arith_Less
                          left: 
                            (arith_expr.VarRef
                              token: (Token id:Id.Lit_ArithVarLike val:i span_id:878)
                            )
                          right: 
                            (arith_expr.ArithWord
                              w: 
                                {
                                  (braced_var_sub
                                    token: (Token id:Id.VSub_Name val:words span_id:884)
                                    prefix_op: (Id.VSub_Pound)
                                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                  )
                                }
                            )
                        )
                      update: 
                        (arith_expr.UnaryAssign
                          op_id: Id.Node_PostDPlus
                          child: (sh_lhs_expr.Name name:i)
                        )
                      body: 
                        (command.DoGroup
                          children: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.DBracket
                                          expr: 
                                            (bool_expr.Binary
                                              op_id: Id.BoolBinary_GlobDEqual
                                              left: 
                                                {
                                                  (braced_var_sub
                                                    token: 
                                                      (Token
                                                        id: Id.VSub_Name
                                                        val: words
                                                        span_id: 906
                                                      )
                                                    bracket_op: 
                                                      (bracket_op.ArrayIndex
                                                        expr: 
                                                          (arith_expr.VarRef
                                                            token: 
                                                              (Token
                                                                id: Id.Lit_ArithVarLike
                                                                val: i
                                                                span_id: 908
                                                              )
                                                          )
                                                      )
                                                  )
                                                }
                                              right: 
                                                {(-) 
                                                  (word_part.ExtGlob
                                                    op: (Token id:Id.ExtGlob_At val:'@(' span_id:915)
                                                    arms: [
                                                      {(f)}
                                                      {(-) 
                                                        (word_part.ExtGlob
                                                          op: 
                                                            (Token
                                                              id: Id.ExtGlob_QMark
                                                              val: '?('
                                                              span_id: 919
                                                            )
                                                          arms: [{(make)}]
                                                        ) (file)
                                                      }
                                                    ]
                                                  )
                                                }
                                            )
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:926)
                                    )
                                  ]
                                  action: [
                                    (C {(eval)} 
                                      {(Id.Lit_VarLike 'makef=') 
                                        (sh_array_literal
                                          left: (Token id:Id.Op_LParen val:'(' span_id:938)
                                          words: [
                                            {(-f)}
                                            {
                                              (DQ 
                                                (braced_var_sub
                                                  token: 
                                                    (Token
                                                      id: Id.VSub_Name
                                                      val: words
                                                      span_id: 944
                                                    )
                                                  bracket_op: 
                                                    (bracket_op.ArrayIndex
                                                      expr: 
                                                        (arith_expr.Binary
                                                          op_id: Id.Arith_Plus
                                                          left: 
                                                            (arith_expr.VarRef
                                                              token: 
                                                                (Token
                                                                  id: Id.Lit_ArithVarLike
                                                                  val: i
                                                                  span_id: 946
                                                                )
                                                            )
                                                          right: 
                                                            (arith_expr.ArithWord
                                                              w: {(Id.Lit_Digits 1)}
                                                            )
                                                        )
                                                    )
                                                )
                                              )
                                            }
                                          ]
                                        )
                                      }
                                    )
                                    (command.ControlFlow
                                      token: (Token id:Id.ControlFlow_Break val:break span_id:956)
                                    )
                                  ]
                                  spids: [901 928]
                                )
                              ]
                            )
                          ]
                        )
                    )
                    (C {(local)} {(Id.Lit_VarLike 'mode=') (--)})
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.DParen
                                  child: 
                                    (arith_expr.Binary
                                      op_id: Id.Arith_NEqual
                                      left: 
                                        (arith_expr.VarRef
                                          token: 
                                            (Token
                                              id: Id.Lit_ArithVarLike
                                              val: COMP_TYPE
                                              span_id: 984
                                            )
                                        )
                                      right: (arith_expr.ArithWord w:{(Id.Lit_Digits 9)})
                                    )
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:992)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:mode)
                                  op: assign_op.Equal
                                  rhs: {(-d)}
                                  spids: [997]
                                )
                              ]
                            )
                          ]
                          spids: [980 994]
                        )
                      ]
                    )
                    (command.Sentence
                      child: 
                        (C {(local)} 
                          {(Id.Lit_VarLike 'reset=') 
                            (command_sub
                              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1011)
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (command.Pipeline
                                      children: [
                                        (C {(Id.KW_Set set)} {(Id.Lit_Other '+') (o)})
                                        (C {(command)} {(grep)} {(-F)} {(posix)})
                                      ]
                                      negated: F
                                    )
                                  ]
                                )
                            )
                          }
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1029)
                    )
                    (C {(Id.KW_Set set)} {(Id.Lit_Other '+') (o)} {(posix)})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:COMPREPLY)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (sh_array_literal
                                left: (Token id:Id.Op_LParen val:'(' span_id:1043)
                                words: [
                                  {
                                    (command_sub
                                      left_token: 
                                        (Token
                                          id: Id.Left_DollarParen
                                          val: '$('
                                          span_id: 1045
                                        )
                                      command_list: 
                                        (command.CommandList
                                          children: [
                                            (command.Pipeline
                                              children: [
                                                (command.Simple
                                                  words: [
                                                    {(make)}
                                                    {(-npq)}
                                                    {(Id.Lit_VarLike '__BASH_MAKE_COMPLETION__=') (1)}
                                                    {
                                                      (DQ 
                                                        (braced_var_sub
                                                          token: 
                                                            (Token
                                                              id: Id.VSub_Name
                                                              val: makef
                                                              span_id: 1063
                                                            )
                                                          bracket_op: 
                                                            (bracket_op.WholeArray
                                                              op_id: Id.Lit_At
                                                            )
                                                        )
                                                      )
                                                    }
                                                    {
                                                      (DQ 
                                                        (braced_var_sub
                                                          token: 
                                                            (Token
                                                              id: Id.VSub_Name
                                                              val: makef_dir
                                                              span_id: 1072
                                                            )
                                                          bracket_op: 
                                                            (bracket_op.WholeArray
                                                              op_id: Id.Lit_At
                                                            )
                                                        )
                                                      )
                                                    }
                                                    {(.DEFAULT)}
                                                  ]
                                                  redirects: [
                                                    (redir.Redir
                                                      op: 
                                                        (Token
                                                          id: Id.Redir_Great
                                                          val: '2>'
                                                          span_id: 1081
                                                        )
                                                      fd: 2
                                                      arg_word: {(/dev/null)}
                                                    )
                                                  ]
                                                  more_env: [
                                                    (env_pair
                                                      name: LC_ALL
                                                      val: {(C)}
                                                      spids: [1047]
                                                    )
                                                  ]
                                                )
                                                (C {(sed)} {(-nf)} 
                                                  {
                                                    (command_sub
                                                      left_token: 
                                                        (Token
                                                          id: Id.Left_ProcSubIn
                                                          val: '<('
                                                          span_id: 1092
                                                        )
                                                      command_list: 
                                                        (command.CommandList
                                                          children: [
                                                            (C {(_make_target_extract_script)} 
                                                              {($ Id.VSub_DollarName '$mode')} {(DQ ($ Id.VSub_DollarName '$cur'))}
                                                            )
                                                          ]
                                                        )
                                                    )
                                                  }
                                                )
                                              ]
                                              negated: F
                                            )
                                          ]
                                        )
                                    )
                                  }
                                ]
                              )
                            }
                          spids: [1042]
                        )
                      ]
                    )
                    (C {($ Id.VSub_DollarName '$reset')})
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobNEqual
                                      left: {($ Id.VSub_DollarName '$mode')}
                                      right: {(Id.BoolUnary_d -d)}
                                    )
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:1122)
                            )
                          ]
                          action: [
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobDEqual
                                      left: {($ Id.VSub_DollarName '$COMPREPLY')}
                                      right: {(Id.Lit_Other '*') (/)}
                                    )
                                )
                                (C {(compopt)} {(-o)} {(nospace)})
                              ]
                            )
                          ]
                          spids: [1111 1124]
                        )
                      ]
                    )
                  ]
                )
              ]
            )
        )
        (C {(complete)} {(-F)} {(_make)} {(make)} {(gmake)} {(gnumake)} {(pmake)} {(colormake)})
      ]
    )
  ]
)