Migrate SET and FSET
[jscl.git] / src / compiler.lisp
index 63195db..1663dae 100644 (file)
     "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)")))