(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:[27])]
              spids: [27]
            )
            (C {(fn3)})
          ]
          spids: [17]
        )
      spids: [13 16]
    )
    (FuncDef
      name: fn2
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:name) op:Equal rhs:{(DQ (fn2))} spids:[44])]
              spids: [44]
            )
            (C {(echo)} {(DQ ($ VSub_Name "$name") (" here"))})
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(6)} spids:[58])]
              spids: [58]
            )
          ]
          spids: [41]
        )
      spids: [37 40]
    )
    (FuncDef
      name: fn3
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:name) op:Equal rhs:{(DQ (fn3))} spids:[72])]
              spids: [72]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:x)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [78]
                )
              ]
              spids: [78]
            )
          ]
          spids: [69]
        )
      spids: [65 68]
    )
    (C {(set)} {(-xv)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(24)} spids:[92])]
      spids: [92]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(25)} spids:[95])]
      spids: [95]
    )
    (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: [112 124]
        )
      spids: [103 110]
    )
    (C {(set)} {(Lit_Other "+") (xv)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(27)} spids:[131])]
      spids: [131]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:y) op:Equal rhs:{(b)} spids:[134])]
      spids: [134]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(29)} spids:[137])]
      spids: [137]
    )
    (C {(echo)} 
      {
        (CommandSubPart
          command_list: (CommandList children:[(C {(fn3)} {(30)})])
          left_token: <Left_CommandSub "$(">
          spids: [142 146]
        )
      }
    )
    (C {(fn3)} {(31)})
    (Sentence child:(C {(fn1)}) terminator:<Op_Semi ";">)
    (C {(fn3)} {(33)})
    (C {(exit)} {(0)})
  ]
)