"make_lisp_string(x.toString())"))
(define-builtin cons (x y)
- `(code "({car: " ,x ", cdr: " ,y "})"))
+ `(object "car" ,x "cdr" ,y))
(define-builtin consp (x)
(js!bool
"return (typeof tmp == 'object' && 'car' in tmp);" )))
(define-builtin car (x)
- (js!selfcall
- "var tmp = " x ";"
- "return tmp === " (ls-compile nil)
- "? " (ls-compile nil)
- ": tmp.car;" ))
+ (js!selfcall*
+ `(var (tmp ,x))
+ `(return (if (=== tmp ,(ls-compile nil))
+ ,(ls-compile nil)
+ (get tmp "car")))))
(define-builtin cdr (x)
- (js!selfcall
- "var tmp = " x ";"
- "return tmp === " (ls-compile nil) "? "
- (ls-compile nil)
- ": tmp.cdr;" ))
+ (js!selfcall*
+ `(var (tmp ,x))
+ `(return (if (=== tmp ,(ls-compile nil))
+ ,(ls-compile nil)
+ (get tmp "cdr")))))
(define-builtin rplaca (x new)
(type-check (("x" "object" x))
`(code "(x.cdr = " ,new ", x)")))
(define-builtin symbolp (x)
- (js!bool `(code "(" ,x " instanceof Symbol)")))
+ (js!bool `(instanceof ,x |Symbol|)))
(define-builtin make-symbol (name)
- `(code "(new Symbol(" ,name "))"))
+ `(new (call |Symbol| ,name)))
(define-builtin symbol-name (x)
- `(code "(" ,x ").name"))
+ `(get ,x "name"))
(define-builtin set (symbol value)
- `(code "(" ,symbol ").value = " ,value))
+ `(= (get ,symbol "value") ,value))
(define-builtin fset (symbol value)
- `(code "(" ,symbol ").fvalue = " ,value))
+ `(= (get ,symbol "fvalue") ,value))
(define-builtin boundp (x)
(js!bool `(code "(" ,x ".value !== undefined)")))