projects
/
jscl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update test.lisp with the newer definitions
[jscl.git]
/
lispstrack.lisp
diff --git
a/lispstrack.lisp
b/lispstrack.lisp
index
2d27c25
..
3c3b7a0
100644
(file)
--- a/
lispstrack.lisp
+++ b/
lispstrack.lisp
@@
-330,7
+330,7
@@
*newline*
(if rest-argument
(let ((js!rest (lookup-variable-translation rest-argument new-env)))
*newline*
(if rest-argument
(let ((js!rest (lookup-variable-translation rest-argument new-env)))
- (concat "var " js!rest ";" *newline*
+ (concat "var " js!rest "= false;" *newline*
"for (var i = arguments.length-1; i>="
(integer-to-string (length required-arguments))
"; i--)" *newline*
"for (var i = arguments.length-1; i>="
(integer-to-string (length required-arguments))
"; i--)" *newline*
@@
-363,6
+363,9
@@
(let ((ch (char string index)))
(when (or (char= ch #\") (char= ch #\\))
(setq output (concat output "\\")))
(let ((ch (char string index)))
(when (or (char= ch #\") (char= ch #\\))
(setq output (concat output "\\")))
+ (when (or (char= ch #\newline))
+ (setq output (concat output "\\"))
+ (setq ch #\n))
(setq output (concat output (string ch))))
(incf index))
output))
(setq output (concat output (string ch))))
(incf index))
output))
@@
-372,7
+375,7
@@
((null sexp) "false")
((integerp sexp) (integer-to-string sexp))
((stringp sexp) (concat "\"" (escape-string sexp) "\""))
((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: "
((consp sexp) (concat "{car: "
(literal->js (car sexp))
", cdr: "
@@
-380,11
+383,13
@@
(let ((counter 0))
(defun literal (form)
(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))
(define-compilation quote (sexp)
(literal sexp))
@@
-499,8
+504,9
@@
(concat "{car: " (ls-compile x env fenv) ", cdr: " (ls-compile y env fenv) "}"))
(define-compilation consp (x)
(concat "{car: " (ls-compile x env fenv) ", cdr: " (ls-compile y env fenv) "}"))
(define-compilation consp (x)
- (concat "('car' in " (ls-compile x env fenv) ")"))
-
+ (concat "(function(){ var tmp = "
+ (ls-compile x env fenv)
+ "; return (typeof tmp == 'object' && 'car' in tmp);})()"))
(define-compilation car (x)
(concat "(" (ls-compile x env fenv) ").car"))
(define-compilation car (x)
(concat "(" (ls-compile x env fenv) ").car"))
@@
-515,7
+521,9
@@
(concat "((" (ls-compile x env fenv) ").cdr = " (ls-compile new env fenv) ")"))
(define-compilation symbolp (x)
(concat "((" (ls-compile x env fenv) ").cdr = " (ls-compile new env fenv) ")"))
(define-compilation symbolp (x)
- (concat "('name' in " (ls-compile x env fenv) ")"))
+ (concat "(function(){ var tmp = "
+ (ls-compile x env fenv)
+ "; return (typeof tmp == 'object' && 'name' in tmp); })()"))
(define-compilation make-symbol (name)
(concat "{name: " (ls-compile name env fenv) "}"))
(define-compilation make-symbol (name)
(concat "{name: " (ls-compile name env fenv) "}"))
@@
-608,7
+616,7
@@
(defun macrop (x)
(and (symbolp x) (eq (binding-type (lookup-function x *fenv*)) 'macro)))
(defun macrop (x)
(and (symbolp x) (eq (binding-type (lookup-function x *fenv*)) 'macro)))
-(defun ls-macroexpand-1 (form &optional env fenv)
+(defun ls-macroexpand-1 (form env fenv)
(when (macrop (car form))
(let ((binding (lookup-function (car form) *env*)))
(if (eq (binding-type binding) 'macro)
(when (macrop (car form))
(let ((binding (lookup-function (car form) *env*)))
(if (eq (binding-type binding) 'macro)
@@
-631,7
+639,7
@@
(t
(error (concat "Invalid function designator " (symbol-name function))))))
(t
(error (concat "Invalid function designator " (symbol-name function))))))
-(defun ls-compile (sexp &optional env fenv)
+(defun ls-compile (sexp env fenv)
(cond
((symbolp sexp) (lookup-variable-translation sexp env))
((integerp sexp) (integer-to-string sexp))
(cond
((symbolp sexp) (lookup-variable-translation sexp env))
((integerp sexp) (integer-to-string sexp))
@@
-646,11
+654,12
@@
(defun ls-compile-toplevel (sexp)
(setq *toplevel-compilations* nil)
(defun ls-compile-toplevel (sexp)
(setq *toplevel-compilations* nil)
- (let ((code (ls-compile sexp)))
+ (let ((code (ls-compile sexp nil nil)))
(prog1
(prog1
- (concat (join (mapcar (lambda (x) (concat x ";" *newline*))
+ (concat "/* " (princ-to-string sexp) " */"
+ (join (mapcar (lambda (x) (concat x ";" *newline*))
*toplevel-compilations*)
*toplevel-compilations*)
- "")
+ "")
code)
(setq *toplevel-compilations* nil))))
code)
(setq *toplevel-compilations* nil))))