From: David Vázquez Date: Sat, 29 Jun 2013 16:26:39 +0000 (+0200) Subject: Better GET and PROPERTY handling X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=354cdd2dd006c81bed209d164ef747584962b624;p=jscl.git Better GET and PROPERTY handling --- diff --git a/src/compiler-codegen.lisp b/src/compiler-codegen.lisp index d8d442f..4552430 100644 --- a/src/compiler-codegen.lisp +++ b/src/compiler-codegen.lisp @@ -192,25 +192,18 @@ (js-format "~a" (apply #'code args))) ;; Accessors (property - (js-expr (car args)) + (js-expr (car args) 0) (js-format "[") (js-expr (cadr args) no-comma) (js-format "]")) (get - (multiple-value-bind (identifier identifierp) - (valid-js-identifier (car args)) - (multiple-value-bind (accessor accessorp) - (valid-js-identifier (cadr args)) - (cond - ((and identifierp accessorp) - (js-identifier identifier) - (js-format ".") - (js-identifier accessor)) - (t - (js-expr (car args)) - (js-format "[") - (js-expr (cadr args)) - (js-format "]")))))) + (multiple-value-bind (accessor accessorp) + (valid-js-identifier (cadr args)) + (unless accessorp + (error "Invalid accessor ~S" (cadr args))) + (js-expr (car args) 0) + (js-format ".") + (js-identifier accessor))) ;; Function call (call (js-expr (car args) 1) diff --git a/src/compiler.lisp b/src/compiler.lisp index 09ca814..0a01e5d 100644 --- a/src/compiler.lisp +++ b/src/compiler.lisp @@ -251,8 +251,8 @@ (if (or name docstring) (js!selfcall* `(var (func ,code)) - (when name `(= (get func |fname|) ,name)) - (when docstring `(= (get func |docstring|) ,docstring)) + (when name `(= (get func "fname") ,name)) + (when docstring `(= (get func "docstring") ,docstring)) `(return func)) code)) @@ -819,15 +819,15 @@ `(try ,(ls-compile-block body t)) `(catch (|cf|) - (if (and (== (get |cf| |type|) "catch") - (== (get |cf| |id|) |id|)) + (if (and (== (get |cf| "type") "catch") + (== (get |cf| "id") |id|)) ,(if *multiple-value-p* - `(return (call (get |values| |apply|) + `(return (call (get |values| "apply") this - (call |forcemv| (get |cf| |values|)))) - `(return (call (get |pv| |apply|) + (call |forcemv| (get |cf| "values")))) + `(return (call (get |pv| "apply") this - (call |forcemv| (get |cf| |values|))))) + (call |forcemv| (get |cf| "values"))))) (throw |cf|))))) (define-compilation throw (id value) @@ -1268,7 +1268,7 @@ (define-builtin storage-vector-ref (vector n) (js!selfcall* - `(var (x (get ,vector ,n))) + `(var (x (property ,vector ,n))) `(if (=== x undefined) (throw "Out of range.")) `(return x))) @@ -1310,11 +1310,11 @@ (define-raw-builtin oget* (object key &rest keys) (js!selfcall* `(progn - (var (tmp (get ,(ls-compile object) (call |xstring| ,(ls-compile key))))) + (var (tmp (property ,(ls-compile object) (call |xstring| ,(ls-compile key))))) ,@(mapcar (lambda (key) `(progn (if (=== tmp undefined) (return ,(ls-compile nil))) - (= tmp (get tmp (call |xstring| ,(ls-compile key)))))) + (= tmp (property tmp (call |xstring| ,(ls-compile key)))))) keys)) `(return (if (=== tmp undefined) ,(ls-compile nil) tmp)))) @@ -1325,12 +1325,12 @@ (var (obj ,(ls-compile object))) ,@(mapcar (lambda (key) `(progn - (= obj (get obj (call |xstring| ,(ls-compile key)))) + (= obj (property obj (call |xstring| ,(ls-compile key)))) (if (=== object undefined) (throw "Impossible to set object property.")))) (butlast keys)) (var (tmp - (= (get obj (call |xstring| ,(ls-compile (car (last keys))))) + (= (property obj (call |xstring| ,(ls-compile (car (last keys))))) ,(ls-compile value)))) (return (if (=== tmp undefined) ,(ls-compile nil)