(js:? (op-precedence 'js:?))
(js:unary-operator (op-precedence (second expr)))
(operator (op-precedence (second expr)))
- (otherwise 0))
- 0))
-
-(eval-when (:compile-toplevel :load-toplevel :execute)
- (defparameter *op-precedence-hash* (make-hash-table :test 'eq))
-
- (let ((precedence 1))
- (dolist (ops '((js:new js:slot-value js:aref)
- (postfix++ postfix--)
- (delete void typeof ++ -- unary+ unary- ~ !)
- (* / %)
- (+ -)
- (<< >> >>>)
- (< > <= >= js:instanceof js:in)
- (== != === !== eql)
- (&)
- (^)
- (\|)
- (\&\& and)
- (\|\| or)
- (js:?)
- (= *= /= %= += -= <<= >>= >>>= \&\= ^= \|=)
- (comma)))
- (dolist (op ops)
- (setf (gethash op *op-precedence-hash*) precedence))
- (incf precedence)))
-
- (defun op-precedence (op)
- (gethash op *op-precedence-hash*)))
+ (otherwise -1))
+ -1))
(defprinter js:literal (str)
(psw str))
(psw #\[) (print-comma-delimited-list initial-contents) (psw #\]))
(defprinter js:aref (array indices)
- (if (>= (expression-precedence array) #.(op-precedence 'js:aref))
+ (if (>= (expression-precedence array) (op-precedence 'js:aref))
(parenthesize-print array)
(ps-print array))
(loop for idx in indices do
(psw " }"))
(defprinter js:slot-value (obj slot)
- (if (or (> (expression-precedence obj) #.(op-precedence 'js:slot-value))
+ (if (or (> (expression-precedence obj) (op-precedence 'js:slot-value))
(numberp obj)
(and (listp obj) (member (car obj) '(js:lambda js:object))))
(parenthesize-print obj)