HB> I tried:
HB> (defmacro xhr-macro () HB> `(defun xhr-func () HB> (setf (@ xhr onreadystatechange) (lambda () HB> (if (= (@ xhr ready-state) 4) HB> (progn HB> (setf ime (@ xhr response-text)) HB> (alert ime))) HB> 0)) HB> (chain xhr (open "GET" "/value.lisp" true)) HB> (chain xhr (send null))))
HB> Lispworks inserts lots of its code when trying macroexpand HB> so it doesn't work. HB> I would latter give arguments to the macro, ofcourse. HB> What are defmacro/ps and defmacro+ps for ?
I think defpsmacro is exactly what you need -- you define macro in Lisp code using defpsmacro (like you did above with defmacro but with defpsmacro instead of defmacro) and then you can use it anywhere in your PS code.
You do not need macroexpand to test your macro, to see what code it generates just use ps:ps. E.g.
(ps:defpsmacro foo (xxx) `(frob, xxx))
(ps:ps (foo xxx)) => "frob(xxx);"