"public" "short" "static" "super" "synchronized" "throws" "transient"
"volatile"))
-(defun add-ps-literal (name)
+(defun add-ps-reserved-symbol (name)
(pushnew (symbol-name-to-js-string name) *ps-reserved-symbol-names* :test #'equalp))
-(defun ps-literal-p (symbol)
+(defun ps-reserved-symbol-p (symbol)
(find (symbol-name-to-js-string symbol) *ps-reserved-symbol-names* :test #'equalp))
;;; special forms
(return-from compile-parenscript-form (compile-parenscript-form expansion :expecting expecting)))))
(cond ((keywordp symbol) symbol)
((ps-special-form-p (list symbol))
- (if (ps-literal-p symbol)
+ (if (ps-reserved-symbol-p symbol)
(funcall (get-ps-special-form symbol) :symbol)
(error "Attempting to use Parenscript special form ~a as variable" symbol)))
(t `(js:variable ,symbol))))
;;; literals
(defmacro defpsliteral (name string)
`(progn
- (add-ps-literal ',name)
+ (add-ps-reserved-symbol ',name)
(define-ps-special-form ,name ()
(list 'js:literal ,string))))
(macrolet ((def-for-literal (name printer)
`(progn
- (add-ps-literal ',name)
+ (add-ps-reserved-symbol ',name)
(define-ps-special-form ,name (&optional label)
(list ',printer label)))))
(def-for-literal break js:break)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; objects
-(add-ps-literal '{})
+(add-ps-reserved-symbol '{})
(define-ps-symbol-macro {} (create))
(define-ps-special-form create (&rest arrows)
(let ((key (compile-parenscript-form (ps-macroexpand key-expr) :expecting :expression)))
(when (keywordp key)
(setf key `(js:variable ,key)))
+ (when (and (listp key)
+ (ps-reserved-symbol-p (second key)))
+ (setf key (symbol-name-to-js-string (second key))))
(assert (or (stringp key)
(numberp key)
(and (listp key)
"Slot key ~s is not one of js-variable, keyword, string or number." key)
(cons key (compile-parenscript-form (ps-macroexpand val-expr) :expecting :expression))))))
-(define-ps-special-form %js-slot-value (obj slot)
- (let ((slot (ps-macroexpand slot)))
- `(js:slot-value ,(compile-parenscript-form (ps-macroexpand obj) :expecting :expression)
- ,(if (and (listp slot) (eq 'quote (car slot)))
- (second slot) ;; assume we're quoting a symbol
- (compile-parenscript-form slot)))))
-
(define-ps-special-form instanceof (value type)
`(js:instanceof ,(compile-parenscript-form value :expecting :expression)
,(compile-parenscript-form type :expecting :expression)))
+(define-ps-special-form %js-slot-value (obj slot)
+ (let ((slot (ps-macroexpand slot)))
+ `(js:slot-value ,(compile-parenscript-form (ps-macroexpand obj) :expecting :expression)
+ ,(let ((slot (if (and (listp slot) (eq 'quote (car slot)))
+ (second slot) ;; assume we're quoting a symbol
+ (compile-parenscript-form slot))))
+ (if (and (symbolp slot)
+ (ps-reserved-symbol-p slot))
+ (symbol-name-to-js-string slot)
+ slot)))))
+
(defpsmacro slot-value (obj &rest slots)
(if (null (rest slots))
`(%js-slot-value ,obj ,(first slots))