Quoted symbols are also interned in the target environment
authorDavid Vazquez <davazp@gmail.com>
Sat, 22 Dec 2012 01:50:13 +0000 (01:50 +0000)
committerDavid Vazquez <davazp@gmail.com>
Sat, 22 Dec 2012 01:50:13 +0000 (01:50 +0000)
lispstrack.lisp
test.lisp

index 7848b81..019635f 100644 (file)
     ((null sexp) "false")
     ((integerp sexp) (integer-to-string sexp))
     ((stringp sexp) (concat "\"" (escape-string sexp) "\""))
-    ((symbolp sexp) (concat "{name: \"" (escape-string (symbol-name sexp)) "\"}"))
+    ((symbolp sexp) (ls-compile `(intern ,(escape-string (symbol-name sexp))) *env* *fenv*))
     ((consp sexp) (concat "{car: "
                           (literal->js (car sexp))
                           ", cdr: "
 
 (let ((counter 0))
   (defun literal (form)
-    (if (null form)
-        (literal->js form)
-        (let ((var (concat "l" (integer-to-string (incf counter)))))
-          (push (concat "var " var " = " (literal->js form)) *toplevel-compilations*)
-          var))))
+    (cond
+      ((null form)
+       (literal->js form))
+      (t
+       (let ((var (concat "l" (integer-to-string (incf counter)))))
+         (push (concat "var " var " = " (literal->js form)) *toplevel-compilations*)
+         var)))))
 
 (define-compilation quote (sexp)
   (literal sexp))
index 489c36c..ec9ac8b 100644 (file)
--- a/test.lisp
+++ b/test.lisp
@@ -20,9 +20,6 @@
 
 (defvar *package* (new))
 
-(defvar t 't)
-(defvar nil 'nil)
-
 (defun intern (name)
   (let ((s (get *package* name)))
     (if s s (set *package* name (make-symbol name)))))
@@ -30,6 +27,8 @@
 (defun find-symbol (name)
   (get *package* name))
 
+(defvar t 't)
+(defvar nil 'nil)
 
 (defmacro when (condition &rest body)
   `(if ,condition (progn ,@body) nil))