(CommandList children: [ (C {(.)} { (BracedVarSub token: <VSub_Name BASH_SOURCE> suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ("*")}) spids: [6 11] ) (/test.sh) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:value) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (SimpleCommand words: [{(../lishp.sh)}] redirects: [ (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("(let* ((x 2))\n") (" x)\n"))} do_expansion: True here_end: EOF was_filled: True spids: [22] ) ] ) ] ) left_token: <Left_CommandSub "$("> spids: [19 27] ) } spids: [18] ) ] spids: [18] ) (C {(assert) (Lit_Other ":") (Lit_Other ":") (equals)} {(DQ ("Integer :: 2"))} {(DQ (${ VSub_Name value))} {(DQ ("Basic let*"))} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:value) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (SimpleCommand words: [{(../lishp.sh)}] redirects: [ (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("(let* ((x 2)\n") (" (y x))\n") (" y)\n"))} do_expansion: True here_end: EOF was_filled: True spids: [56] ) ] ) ] ) left_token: <Left_CommandSub "$("> spids: [53 62] ) } spids: [52] ) ] spids: [52] ) (C {(assert) (Lit_Other ":") (Lit_Other ":") (equals)} {(DQ ("Integer :: 2"))} {(DQ (${ VSub_Name value))} {(DQ ("let* reading previous values"))} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:value) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (SimpleCommand words: [{(../lishp.sh)}] redirects: [ (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("(let* ((x 2))\n") (" x\n") (" (* 5 x))\n"))} do_expansion: True here_end: EOF was_filled: True spids: [91] ) ] ) ] ) left_token: <Left_CommandSub "$("> spids: [88 97] ) } spids: [87] ) ] spids: [87] ) (C {(assert) (Lit_Other ":") (Lit_Other ":") (equals)} {(DQ ("Integer :: 10"))} {(DQ (${ VSub_Name value))} {(DQ ("let returning last value"))} ) (C {(assert) (Lit_Other ":") (Lit_Other ":") (report)}) ] )