(in-package :parenscript)
+(defun ensure-ps-symbol (symbol)
+ (if (eq (symbol-package symbol) #.(find-package :parenscript))
+ symbol
+ (intern (symbol-name symbol) #.(find-package :parenscript))))
+
;;; Symbol obfuscation
(defvar *obfuscation-table* (make-hash-table))
;;; arithmetic operators
(defun ps-convert-op-name (op)
- (case op
+ (case (ensure-ps-symbol op)
(and '\&\&)
(or '\|\|)
(not '!)
(psw "switch (") (ps-print test) (psw ") {")
(loop for (val . statements) in clauses
do (progn (newline-and-indent)
- (if (eql val 'default)
+ (if (eq val 'default)
(progn (psw "default: ")
(print-body-statements statements))
(progn (psw "case ")
(let ((clauses (mapcar (lambda (clause)
(let ((val (car clause))
(body (cdr clause)))
- (cons (if (eql val 'default)
+ (cons (if (and (symbolp val)
+ (eq (ensure-ps-symbol val) 'default))
'default
(compile-parenscript-form val :expecting :expression))
(mapcar (lambda (statement) (compile-parenscript-form statement :expecting :statement))
[&aux {var | (var [init-form])}*])"
(if (symbolp name)
`(defun-function ,name ,lambda-list ,@body)
- (progn (assert (and (= (length name) 2) (eql 'setf (car name))) ()
+ (progn (assert (and (= (length name) 2) (eq 'setf (ensure-ps-symbol (car name)))) ()
"(defun ~s ~s ...) needs to have a symbol or (setf symbol) for a name." name lambda-list)
`(defun-setf ,name ,lambda-list ,@body))))