(CommandList
  children: [
    (FuncDef
      name: err_exit
      body: 
        (BraceGroup
          children: [
            (C {(print)} {(-u2)} {(-n)} {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\t">))})
            (C {(print)} {(-u2)} {(-r)} 
              {(${ VSub_Name Command) (Lit_Other "[") ($ VSub_Number "$1") (Lit_Other "]") 
                (Lit_Other ":")
              } 
              {
                (DQ 
                  (BracedVarSub
                    token: <VSub_At "@">
                    suffix_op: (Slice begin:(ArithWord w:{(Lit_Digits 2)}))
                    spids: [90 94]
                  )
                )
              }
            )
            (C {(let)} {(Lit_VarLike "Errors+=") (1)})
          ]
          spids: [61]
        )
      spids: [57 60]
    )
    (C {(alias)} {(Lit_VarLike "err_exit=") (SQ <"err_exit $LINENO">)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:Command)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Number 0>
                suffix_op: (StringUnary op_id:VOp1_DPound arg_word:{("*") (Lit_Slash /)})
                spids: [114 119]
              )
            }
          spids: [113]
        )
      ]
      spids: [113]
    )
    (C {(integer)} {(Lit_VarLike "Errors=") (0)})
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:tmp)
              op: Equal
              rhs: 
                {
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(mktemp)} {(-dt)})])
                    left_token: <Left_CommandSub "$(">
                    spids: [128 132]
                  )
                }
              spids: [127]
            )
          ]
          spids: [127]
        )
        (BraceGroup
          children: [
            (Sentence
              child: (C {(err_exit)} {(mktemp)} {(-dt)} {(failed)})
              terminator: <Op_Semi ";">
            )
            (Sentence child:(C {(exit)} {(1)}) terminator:<Op_Semi ";">)
          ]
          spids: [136]
        )
      ]
      op_id: Op_DPipe
    )
    (C {(trap)} {(DQ ("cd /; rm -rf ") ($ VSub_Name "$tmp"))} {(EXIT)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:PS3) op:Equal rhs:{(SQ <"ABC ">)} spids:[164])]
      spids: [164]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{($ VSub_Name "$tmp") (/1)} spids:[172])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {("1) foo\n") ("2) bar\n") ("3) bam\n")}
          do_expansion: False
          here_end: "!"
          was_filled: True
          spids: [177]
        )
      ]
    )
    (C {(select)} {(i)} {(KW_In in)} {(foo)} {(bar)} {(bam)})
  ]
)