macroscommon-lispparenscript

Macroexpand for parenscript


Is there an equivalent to macroexpand or macroexpand-1 for parenscript macros? Doing (ps (some macro expression)) will display the generated javascript, but there are times when it would be nice to see the parenscript just before it gets converted to javascript.


Solution

  • In parenscript's compiler.lisp file, there are the functions ps-macroexpand-1 and ps-macroexpand. Unfortunately, they are not exported by the parenscript package. You can call them anyway using a double colon.

    For example,

    (defpsmacro aif (test true &rest false)
      `(let ((it ,test))
         (if it ,true ,@false)))
    
    (ps::ps-macroexpand-1 '(aif 3 it))
    ;;=>
    (LET ((IT 3))
      (IF IT
          IT))
    T