#!../../bash proc fn1 { global x := '"fn1 started'" if (( $1 == 0 )) { fn2 "testing 1" "2 3" return } let a=$1-1 fn1 $a global x := '"fn1 returning'" } proc fn2 { global x := '"fn2 started'" echo "fn2: $1 $2" fn3 global x := '"fn2 returning'" } proc fn3 { echo "fn3: $1 $2" global x := '"fn3 returning'" } global x := '"main'" fn1 5 echo "exit 5" | bash exit 0 #;;; Local Variables: *** #;;; mode:shell-script *** #;;; eval: (sh-set-shell "bash") *** #;;; End: *** (CommandList children: [ (FuncDef name: fn1 body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:x) op: Equal rhs: {(DQ ("fn1 started"))} spids: [11] ) ] spids: [11] ) (If arms: [ (if_arm cond: [ (Sentence child: (DParen child: (ArithBinary op_id: Arith_DEqual left: (ArithWord w:{($ VSub_Number "$1")}) right: (ArithWord w:{(Lit_Digits 0)}) ) ) terminator: ) ] action: [ (C {(fn2)} {(DQ ("testing 1"))} {(DQ ("2 3"))}) (ControlFlow token:) ] spids: [-1 32] ) ] spids: [-1 49] ) (C {(let)} {(Lit_VarLike "a=") ($ VSub_Number "$1") (-1)}) (C {(fn1)} {($ VSub_Name "$a")}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:x) op: Equal rhs: {(DQ ("fn1 returning"))} spids: [65] ) ] spids: [65] ) ] spids: [8] ) spids: [4 7] ) (FuncDef name: fn2 body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:x) op: Equal rhs: {(DQ ("fn2 started"))} spids: [80] ) ] spids: [80] ) (C {(echo)} {(DQ ("fn2: ") ($ VSub_Number "$1") (" ") ($ VSub_Number "$2"))}) (C {(fn3)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:x) op: Equal rhs: {(DQ ("fn2 returning"))} spids: [99] ) ] spids: [99] ) ] spids: [77] ) spids: [73 76] ) (FuncDef name: fn3 body: (BraceGroup children: [ (C {(echo)} {(DQ ("fn3: ") ($ VSub_Number "$1") (" ") ($ VSub_Number "$2"))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:x) op: Equal rhs: {(DQ ("fn3 returning"))} spids: [124] ) ] spids: [124] ) ] spids: [111] ) spids: [107 110] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(DQ (main))} spids:[132])] spids: [132] ) (C {(fn1)} {(5)}) (Pipeline children:[(C {(echo)} {(DQ ("exit 5"))})(C {(bash)})] negated:False) (C {(exit)} {(0)}) ] )