(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:y) op:Equal rhs:{(23)} spids:[85])]
      spids: [85]
    )
    (ForEach
      iter_name: i
      iter_words: [{(0)} {(1)} {(3)}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (DParen
              child: 
                (BinaryAssign
                  op_id: Arith_PlusEqual
                  left: (LhsName name:x)
                  right: (ArithVarRef name:i)
                )
            )
          ]
          spids: [102 114]
        )
      spids: [93 100]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(27)} spids:[116])]
      spids: [116]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:y) op:Equal rhs:{(b)} spids:[119])]
      spids: [119]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(29)} spids:[122])]
      spids: [122]
    )
    (C {(echo)} 
      {
        (CommandSubPart
          command_list: (CommandList children:[(C {(fn3)} {(30)})])
          left_token: <Left_CommandSub "$(">
          spids: [127 131]
        )
      }
    )
    (C {(fn3)} {(31)})
    (Sentence child:(C {(fn1)}) terminator:<Op_Semi ";">)
    (C {(fn3)} {(33)})
    (C {(source)} {(../example/dbg-test1.sub)})
    (Sentence child:(C {(exit)} {(0)}) terminator:<Op_Semi ";">)
  ]
)