Hi, 

For reference:
The following patch can solve the issue and destroys no existing tests (parenscript.tests:run-tests).
However, I'm afraid that it is ad-hoc...

```diff
diff --git a/src/macros.lisp b/src/macros.lisp
index 986c283..ad0eb00 100644
--- a/src/macros.lisp
+++ b/src/macros.lisp
@@ -334,9 +334,15 @@ lambda-list::=
   (assert (evenp (length args)) ()
           "~s does not have an even number of arguments." `(setf ,args))
   `(progn ,@(loop for (place value) on args by #'cddr collect
-                 (aif (and (listp place) (gethash (car place) *setf-expanders*))
-                      (funcall it (cdr place) value)
-                      `(ps-assign ,place ,value)))))
+                 (progn
+                   (when (atom place)
+                     (setf place (ps-compile place))
+                     (when (and (listp place)
+                                (eq (car place) 'ps-js:funcall))
+                       (setf place (cdr place))))
+                   (aif (and (listp place) (gethash (car place) *setf-expanders*))
+                        (funcall it (cdr place) value)
+                        `(ps-assign ,place ,value))))))

 (defpsmacro psetf (&rest args)
   (let ((places (loop for x in args by #'cddr collect x))
```

Regards,
--
Eiji, Seki (hamgoostar@gmail.com)
https://github.com/eshamster


2019年4月9日(火) 0:12 Seki_GMail <hamgoostar@gmail.com>:
Hi,

Thanks for your great project.

I found an issue where defsetf doesn't work for a symbol defined by symbol-macrolet.
The detail is the following.

## environment
- version of Parenscript
    - latest of master (526346549f0342d67947d360a8f7ba9fc7b09e54)
- CL Implementation (same result in both)
    - SBCL 1.5.0
    - Clozure CL 1.11.5

## code to reproduce
```lisp
(use-package :parenscript)

(princ
 (ps
   (defun my-car (lst)
     (nth 0 lst))
   (defun my-set-car (lst value)
     (setf (nth 0 lst) value))

   (defsetf my-car (lst) (value)
     `(my-set-car ,lst ,value))

   ;; Raw setf is ok
   (setf (my-car lst) 100)

   ;; setf for macrolet symbol is NG
   (symbol-macrolet ((sym (my-car lst)))
     (setf sym 300))))
```

Then, the result is the following.
(I added some comments for convenience.)

```javascript
function myCar(lst) {
    __PS_MV_REG = [];
    return nth(0, lst);
};
function mySetCar(lst, value) {
    __PS_MV_REG = [];
    return nth(0, lst) = value;
};
/* Raw setf is ok */
(function () {
    var _js66 = lst;
    var _js65 = 100;
    __PS_MV_REG = [];
    return mySetCar(_js66, _js65);
})();
/* setf for macrolet symbol is NG */
myCar(lst) = 300;
```