(CommandList
  children: [
    (FuncDef
      name: gcd
      body: 
        (BraceGroup
          children: [
            (C {(typeset)} {(-i)} {(Lit_VarLike "a=") ($ VSub_Number "$1")})
            (C {(typeset)} {(-i)} {(Lit_VarLike "b=") ($ VSub_Number "$2")})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DParen
                          child: 
                            (ArithBinary
                              op_id: Arith_Great
                              left: (ArithVarRef name:a)
                              right: (ArithVarRef name:b)
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:a)
                          op: Equal
                          rhs: {($ VSub_Name "$b")}
                          spids: [62]
                        )
                      ]
                      spids: [62]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:b)
                          op: Equal
                          rhs: {($ VSub_Number "$1")}
                          spids: [66]
                        )
                      ]
                      spids: [66]
                    )
                  ]
                  spids: [-1 59]
                )
              ]
              spids: [-1 70]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DParen
                          child: 
                            (ArithBinary
                              op_id: Arith_DPipe
                              left: 
                                (ArithBinary
                                  op_id: Arith_DEqual
                                  left: (ArithVarRef name:a)
                                  right: (ArithWord w:{(Lit_Digits 1)})
                                )
                              right: 
                                (ArithBinary
                                  op_id: Arith_DEqual
                                  left: 
                                    (ArithBinary
                                      op_id: Arith_Minus
                                      left: (ArithVarRef name:b)
                                      right: (ArithVarRef name:a)
                                    )
                                  right: (ArithWord w:{(Lit_Digits 0)})
                                )
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:gcd_value)
                          op: Equal
                          rhs: {($ VSub_Name "$a")}
                          spids: [102]
                        )
                      ]
                      spids: [102]
                    )
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
                  ]
                  spids: [-1 99]
                )
              ]
              spids: [-1 111]
            )
            (C {(typeset)} {(-i)} {(c)})
            (DParen
              child: 
                (BinaryAssign
                  op_id: Arith_Equal
                  left: (LhsName name:c)
                  right: 
                    (ArithBinary
                      op_id: Arith_Minus
                      left: (ArithVarRef name:b)
                      right: (ArithVarRef name:a)
                    )
                )
            )
            (C {(gcd)} {($ VSub_Name "$c")} {($ VSub_Name "$a")})
          ]
          spids: [25]
        )
      spids: [21 24]
    )
    (C {(gcd)} {($ VSub_Number "$1")} {($ VSub_Number "$2")})
    (C {(echo)} {($ VSub_Name "$gcd_value")})
  ]
)