X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler.lisp;h=a77d4519c1b9d7890fda5728af09503aec21545a;hb=c1243ebc6aaa93fe370ddedbe4bbe1642f0b13e9;hp=f58fe1ad2d1a300c14a5546a77486f20eeb90695;hpb=51f2f4c852be16da996c99b6ee687dd0ceef475f;p=jscl.git diff --git a/src/compiler.lisp b/src/compiler.lisp index f58fe1a..a77d451 100644 --- a/src/compiler.lisp +++ b/src/compiler.lisp @@ -1184,9 +1184,11 @@ (define-builtin stringp (x) (js!bool - (js!selfcall - "var x = " x ";" - "return typeof(x) == 'object' && 'length' in x && x.stringp == 1;"))) + (js!selfcall* + `(var (x ,x)) + `(return (and (and (===(typeof x) "object") + (in "length" x)) + (== (get x "stringp") 1)))))) (define-raw-builtin funcall (func &rest args) (js!selfcall @@ -1222,10 +1224,10 @@ (define-builtin js-eval (string) (if *multiple-value-p* - (js!selfcall - "var v = globalEval(xstring(" string "));" - "return values.apply(this, forcemv(v));" ) - `(code "globalEval(xstring(" ,string "))"))) + (js!selfcall* + `(var (v (call |globalEval| (call |xstring| ,string)))) + `(return (call (get |values| "apply") this (call |forcemv| v)))) + `(call |globalEval| (call |xstring| ,string)))) (define-builtin %throw (string) (js!selfcall* `(throw ,string))) @@ -1284,7 +1286,7 @@ `(return r))) (define-builtin get-internal-real-time () - "(new Date()).getTime()") + `(call (get (new (call Date)) "getTime"))) (define-builtin values-array (array) (if *multiple-value-p* @@ -1299,7 +1301,8 @@ ;;; Javascript FFI -(define-builtin new () "{}") +(define-builtin new () + '(object)) (define-raw-builtin oget* (object key &rest keys) (js!selfcall