(CommandList
  children: [
    (FuncDef
      name: fn1
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ ("fn1 here"))})
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(5)} spids:[24])]
              spids: [24]
            )
            (C {(fn3)})
          ]
          spids: [14]
        )
      spids: [10 13]
    )
    (FuncDef
      name: fn2
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:name) op:Equal rhs:{(DQ (fn2))} spids:[41])]
              spids: [41]
            )
            (C {(echo)} {(DQ ($ VSub_Name "$name") (" here"))})
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(6)} spids:[55])]
              spids: [55]
            )
          ]
          spids: [38]
        )
      spids: [34 37]
    )
    (FuncDef
      name: fn3
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:name) op:Equal rhs:{(DQ (fn3))} spids:[69])]
              spids: [69]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:x)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [75]
                )
              ]
              spids: [75]
            )
          ]
          spids: [66]
        )
      spids: [62 65]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(22)} spids:[82])]
      spids: [82]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(23)} spids:[85])]
      spids: [85]
    )
    (ForEach
      iter_name: i
      iter_words: [{(1)}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (DParen
              child: 
                (BinaryAssign
                  op_id: Arith_PlusEqual
                  left: (LhsName name:x)
                  right: (ArithVarRef name:i)
                )
            )
          ]
          spids: [98 110]
        )
      spids: [93 96]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(27)} spids:[112])]
      spids: [112]
    )
    (C {(echo)} 
      {
        (CommandSubPart
          command_list: (CommandList children:[(C {(fn3)} {(30)})])
          left_token: <Left_CommandSub "$(">
          spids: [117 121]
        )
      }
    )
    (C {(fn3)} {(29)})
    (Sentence child:(C {(fn1)}) terminator:<Op_Semi ";">)
    (C {(fn3)} {(31)})
    (Case
      to_match: {(x)}
      arms: [
        (case_arm
          pat_list: [{(Lit_Other "*")}]
          action: [(C {(x)} {(Lit_Other "=")} {(33)})]
          spids: [142 144 -1 152]
        )
      ]
      spids: [134 138 152]
    )
    (AndOr
      children: [
        (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ (x))}))
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(35)} spids:[166])]
          spids: [166]
        )
      ]
      op_id: Op_DAmp
    )
    (DParen
      child: 
        (BinaryAssign
          op_id: Arith_PlusEqual
          left: (LhsName name:x)
          right: (ArithWord w:{(Lit_Digits 1)})
        )
    )
    (C {(source)} {(dbg-test1.sub)})
    (Sentence child:(C {(exit)} {(0)}) terminator:<Op_Semi ";">)
  ]
)