X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler-codegen.lisp;h=6a3abc9d4012d1418e4b79f4a3fd24c1dbd82f72;hb=c1243ebc6aaa93fe370ddedbe4bbe1642f0b13e9;hp=674ace6f38414af97168e0e9d5e596fe1ffe3a43;hpb=53a9b4efe2918de695ba8bee97a0c2ac95083564;p=jscl.git diff --git a/src/compiler-codegen.lisp b/src/compiler-codegen.lisp index 674ace6..6a3abc9 100644 --- a/src/compiler-codegen.lisp +++ b/src/compiler-codegen.lisp @@ -78,7 +78,7 @@ (defun valid-js-identifier (string-designator) (let ((string (typecase string-designator - (symbol (string-downcase (symbol-name string-designator))) + (symbol (symbol-name string-designator)) (string string-designator) (t (return-from valid-js-identifier (values nil nil)))))) @@ -108,10 +108,11 @@ (js-format "~a" (js-escape-string form))) ((symbolp form) (case form - (true (js-format "true")) - (false (js-format "false")) - (null (js-format "null")) - (this (js-format "this")) + (true (js-format "true")) + (false (js-format "false")) + (null (js-format "null")) + (this (js-format "this")) + (undefined (js-format "undefined")) (otherwise (js-identifier form)))) (t @@ -160,7 +161,7 @@ (unless (or (symbolp x) (nth-value 1 (valid-js-identifier x)) (and (consp x) - (member (car x) '(get =)))) + (member (car x) '(get = property)))) (error "Bad Javascript lvalue ~S" x))) ;;; Process the Javascript AST to reduce some syntax sugar. @@ -221,7 +222,7 @@ (js-expr (car args)) (js-format "(") (when (cdr args) - (with-operator (13 'left) + (with-operator (12 'left) (js-expr (cadr args)) (dolist (operand (cddr args)) (let ((*js-output* t)) @@ -229,6 +230,11 @@ (js-expr operand))))) (js-format ")")) ;; Accessors + (property + (js-expr (car args)) + (js-format "[") + (js-expr (cadr args)) + (js-format "]")) (get (multiple-value-bind (identifier identifierp) (valid-js-identifier (car args)) @@ -440,6 +446,20 @@ (js-expr condition) (js-format ")") (js-stmt `(progn ,@body)))) + (try + (destructuring-bind (&rest body) (cdr form) + (js-format "try") + (js-stmt `(group ,@body)))) + (catch + (destructuring-bind ((var) &rest body) (cdr form) + (js-format "catch (") + (js-identifier var) + (js-format ")") + (js-stmt `(group ,@body)))) + (finally + (destructuring-bind (&rest body) (cdr form) + (js-format "finally") + (js-stmt `(group ,@body)))) (throw (destructuring-bind (object) (cdr form) (js-format "throw ")