(command.CommandList
  children: [
    (C {<.>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name BASH_SOURCE>
          suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash /> <'*'>})
        ) </test.sh>
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:value)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Simple
                        words: [{<../lishp.sh>}]
                        redirects: [
                          (redir.HereDoc
                            op: <Id.Redir_DLess '<<'>
                            fd: -1
                            here_begin: {<EOF>}
                            here_end_span_id: 28
                            stdin_parts: [<'(let* ((x 2))\n'> <'      x)\n'>]
                          )
                        ]
                      )
                    ]
                  )
              )
            }
          spids: [18]
        )
      ]
    )
    (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <'Integer :: 2'>)} 
      {(DQ (${ Id.VSub_Name value))} {(DQ <'Basic let*'>)}
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:value)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Simple
                        words: [{<../lishp.sh>}]
                        redirects: [
                          (redir.HereDoc
                            op: <Id.Redir_DLess '<<'>
                            fd: -1
                            here_begin: {<EOF>}
                            here_end_span_id: 65
                            stdin_parts: [<'(let* ((x 2)\n'> <'       (y x))\n'> <'      y)\n'>]
                          )
                        ]
                      )
                    ]
                  )
              )
            }
          spids: [54]
        )
      ]
    )
    (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <'Integer :: 2'>)} 
      {(DQ (${ Id.VSub_Name value))} {(DQ <'let* reading previous values'>)}
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:value)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Simple
                        words: [{<../lishp.sh>}]
                        redirects: [
                          (redir.HereDoc
                            op: <Id.Redir_DLess '<<'>
                            fd: -1
                            here_begin: {<EOF>}
                            here_end_span_id: 102
                            stdin_parts: [<'(let* ((x 2))\n'> <'      x\n'> <'      (* 5 x))\n'>]
                          )
                        ]
                      )
                    ]
                  )
              )
            }
          spids: [91]
        )
      ]
    )
    (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <equals>} {(DQ <'Integer :: 10'>)} 
      {(DQ (${ Id.VSub_Name value))} {(DQ <'let returning last value'>)}
    )
    (C {<assert> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <report>})
  ]
)