(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)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:bar) op:Equal rhs:{(foo2)} spids:[127])]
      spids: [127]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:bam)
          op: Equal
          rhs: {(foo) (Lit_Other "[") (3) (Lit_Other "]")}
          spids: [130]
        )
      ]
      spids: [130]
    )
    (ForEach
      iter_name: i
      iter_words: [{(foo1)} {(foo2)} {(foo3)} {(foo4)} {(foo5)} {(foo6)}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:foo) op:Equal rhs:{(0)} spids:[156])]
              spids: [156]
            )
            (Case
              to_match: {($ VSub_Name "$i")}
              arms: [
                (case_arm
                  pat_list: [{(foo1)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:foo) op:Equal rhs:{(1)} spids:[170])]
                      spids: [170]
                    )
                  ]
                  spids: [167 168 172 -1]
                )
                (case_arm
                  pat_list: [{($ VSub_Name "$bar")}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:foo) op:Equal rhs:{(2)} spids:[178])]
                      spids: [178]
                    )
                  ]
                  spids: [175 176 180 -1]
                )
                (case_arm
                  pat_list: [{($ VSub_Name "$bam")}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:foo) op:Equal rhs:{(3)} spids:[186])]
                      spids: [186]
                    )
                  ]
                  spids: [183 184 188 -1]
                )
                (case_arm
                  pat_list: [{(foo) (Lit_Other "[") (4) (Lit_Other "]")}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:foo) op:Equal rhs:{(4)} spids:[197])]
                      spids: [197]
                    )
                  ]
                  spids: [191 195 199 -1]
                )
                (case_arm
                  pat_list: [
                    {
                      (BracedVarSub
                        token: <VSub_Name bar>
                        suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{("?")})
                        spids: [202 206]
                      ) (5)
                    }
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:foo) op:Equal rhs:{(5)} spids:[211])]
                      spids: [211]
                    )
                  ]
                  spids: [202 208 213 -1]
                )
                (case_arm
                  pat_list: [
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name bar>
                          suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{("?")})
                          spids: [217 221]
                        ) (6)
                      )
                    }
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:foo) op:Equal rhs:{(6)} spids:[227])]
                      spids: [227]
                    )
                  ]
                  spids: [217 224 229 -1]
                )
              ]
              spids: [160 164 232]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (DBracket
                      expr: 
                        (BoolBinary
                          op_id: BoolBinary_GlobNEqual
                          left: {($ VSub_Name "$i")}
                          right: {(foo) ($ VSub_Name "$foo")}
                        )
                    )
                  ]
                  action: [(C {(err_exit)} {(DQ ($ VSub_Name "$i") (" not matching correct pattern"))})]
                  spids: [-1 249]
                )
              ]
              spids: [-1 259]
            )
          ]
          spids: [154 261]
        )
      spids: [141 -1]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:f) op:Equal rhs:{(DQ ("[ksh92]"))} spids:[263])]
      spids: [263]
    )
    (Case
      to_match: {($ VSub_Name "$f")}
      arms: [
        (case_arm
          pat_list: [
            {(EscapedLiteralPart token:<Lit_EscapedChar "\\[">) (Lit_Other "*") 
              (EscapedLiteralPart token:<Lit_EscapedChar "\\]">)
            }
          ]
          spids: [274 277 279 -1]
        )
        (case_arm
          pat_list: [{(Lit_Other "*")}]
          action: [
            (C {(err_exit)} 
              {
                (DQ ($ VSub_Name "$f") (" does not match ") 
                  (EscapedLiteralPart token:<Lit_EscapedChar "\\[">) ("*") (EscapedLiteralPart token:<Lit_EscapedChar "\\]">)
                )
              }
            )
          ]
          spids: [281 282 293 -1]
        )
      ]
      spids: [268 272 295]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (DBracket
              expr: 
                (BoolBinary
                  op_id: BoolBinary_GlobNEqual
                  left: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (SimpleCommand
                                words: [
                                  {($ VSub_Name "$SHELL")}
                                  {(-c)}
                                  {
                                    (SQ <"\n"> <"\t\tx=$(case abc {\n"> 
                                      <"\t\t\tabc)\t{ print yes;};;\n"> <"\t\t\t*)\t print no;;\n"> <"\t\t\t}\n"> <"\t\t)\n"> <"\t\tprint -r -- \"$x\"">
                                    )
                                  }
                                ]
                                redirects: [
                                  (Redir
                                    op_id: Redir_Great
                                    fd: 2
                                    arg_word: {(/dev/null)}
                                    spids: [317]
                                  )
                                ]
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [302 320]
                      )
                    }
                  right: {(yes)}
                )
            )
          ]
          action: [(C {(err_exit)} {(SQ <"case abc {...} not working">)})]
          spids: [-1 328]
        )
      ]
      spids: [-1 336]
    )
    (AndOr
      children: [
        (DBracket
          expr: 
            (BoolBinary
              op_id: BoolBinary_GlobNEqual
              left: 
                {
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C {($ VSub_Name "$SHELL")} {(-c)} 
                            {
                              (SQ <"case a in\n"> <"a)      print -n a > /dev/null ;&\n"> 
                                <"b)      print b;;\n"> <esac>
                              )
                            }
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [340 351]
                  )
                }
              right: {(b)}
            )
        )
        (C {(err_exit)} {(SQ <"bug in ;& at end of script">)})
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (DBracket
          expr: 
            (BoolBinary
              op_id: BoolBinary_GlobDEqual
              left: 
                {
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (SimpleCommand
                            words: [
                              {($ VSub_Name "$SHELL")}
                              {(-c)}
                              {
                                (SQ <"\n"> <"\ttmp=foo\n"> <"\tfor i in a b\n"> <"\tdo\tcase $i in\n"> 
                                  <"\t\ta)\t:  tmp=$tmp tmp.h=$tmp.h;;\n"> <"\t\tb)\t( tmp=bar )\n"> <"\t\t\tfor j in a\n"> <"\t\t\tdo\tprint -r -- $tmp.h\n"> <"\t\t\tdone\n"> 
                                  <"\t\t\t;;\n"> <"\t\tesac\n"> <"\tdone\n">
                                )
                              }
                            ]
                            more_env: [(env_pair name:VMDEBUG val:{(1)} spids:[370])]
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [369 391]
                  )
                }
              right: {(foo.h)}
            )
        )
        (C {(err_exit)} {(DQ ("optimizer bug"))})
      ]
      op_id: Op_DPipe
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:x)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (C {($ VSub_Name "$SHELL")} {(-ec)} 
                        {(SQ <"case a in a) echo 1; false; echo 2 ;& b) echo 3;; esac">)}
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [409 417]
              )
            }
          spids: [408]
        )
      ]
      spids: [408]
    )
    (AndOr
      children: [
        (DBracket
          expr: (BoolBinary op_id:BoolBinary_GlobDEqual left:{($ VSub_Name "$x")} right:{(1)})
        )
        (C {(err_exit)} {(SQ <"set -e ignored on case fail through">)})
      ]
      op_id: Op_DPipe
    )
    (C {(exit)} 
      {
        (ArithSubPart
          anode: 
            (TernaryOp
              cond: 
                (ArithBinary
                  op_id: Arith_Less
                  left: (ArithVarRef name:Errors)
                  right: (ArithWord w:{(Lit_Digits 125)})
                )
              true_expr: (ArithVarRef name:Errors)
              false_expr: (ArithWord w:{(Lit_Digits 125)})
            )
          spids: [440 449]
        )
      }
    )
  ]
)