(command.CommandList
  children: [
    (C {<.>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name BASH_SOURCE>
          suffix_op: 
            (suffix_op.Unary
              tok: <Id.VOp1_Percent '%'>
              arg_word: {<Id.Lit_Slash '/'> <Id.Lit_Other '*'>}
            )
        ) <'/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 '$('>
                child: 
                  (command.Simple
                    words: [{<'../lishp.sh'>}]
                    redirects: [
                      (redir
                        op: <Id.Redir_DLess '<<'>
                        loc: (redir_loc.Fd fd:0)
                        arg: 
                          (redir_param.HereDoc
                            here_begin: {<EOF>}
                            here_end_span_id: 28
                            stdin_parts: [<'(let* ((x 2))\n'> <'      x)\n'>]
                          )
                      )
                    ]
                    do_fork: T
                  )
              )
            }
          spids: [18]
        )
      ]
    )
    (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <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 '$('>
                child: 
                  (command.Simple
                    words: [{<'../lishp.sh'>}]
                    redirects: [
                      (redir
                        op: <Id.Redir_DLess '<<'>
                        loc: (redir_loc.Fd fd:0)
                        arg: 
                          (redir_param.HereDoc
                            here_begin: {<EOF>}
                            here_end_span_id: 65
                            stdin_parts: [<'(let* ((x 2)\n'> <'       (y x))\n'> <'      y)\n'>]
                          )
                      )
                    ]
                    do_fork: T
                  )
              )
            }
          spids: [54]
        )
      ]
    )
    (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <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 '$('>
                child: 
                  (command.Simple
                    words: [{<'../lishp.sh'>}]
                    redirects: [
                      (redir
                        op: <Id.Redir_DLess '<<'>
                        loc: (redir_loc.Fd fd:0)
                        arg: 
                          (redir_param.HereDoc
                            here_begin: {<EOF>}
                            here_end_span_id: 102
                            stdin_parts: [<'(let* ((x 2))\n'> <'      x\n'> <'      (* 5 x))\n'>]
                          )
                      )
                    ]
                    do_fork: T
                  )
              )
            }
          spids: [91]
        )
      ]
    )
    (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'Integer :: 10'>)} 
      {(DQ (${ Id.VSub_Name value))} {(DQ <'let returning last value'>)}
    )
    (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <report>})
  ]
)