(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
(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)))
`(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*
;;; Javascript FFI
-(define-builtin new () "{}")
+(define-builtin new ()
+ '(object))
(define-raw-builtin oget* (object key &rest keys)
(js!selfcall