X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler.lisp;h=36510f95d37f67fcf08a777695bad792adb3bd2d;hb=bf4fd5a5239efe4931e03f7174a0907aba6f07ef;hp=6b334df291cb7c358d092f8b13dbd41bddf7319e;hpb=fe12fe5314125084a5960227207cf4d0426460f0;p=jscl.git diff --git a/src/compiler.lisp b/src/compiler.lisp index 6b334df..36510f9 100644 --- a/src/compiler.lisp +++ b/src/compiler.lisp @@ -527,7 +527,7 @@ output)) -(defvar *literal-symbols* nil) +(defvar *literal-table* nil) (defvar *literal-counter* 0) (defun genlit () @@ -565,27 +565,18 @@ ((integerp sexp) (integer-to-string sexp)) ((floatp sexp) (float-to-string sexp)) ((stringp sexp) (code "\"" (escape-string sexp) "\"")) - ((symbolp sexp) - (or (cdr (assoc sexp *literal-symbols*)) - (let ((v (genlit)) - (s (dump-symbol sexp))) - (push (cons sexp v) *literal-symbols*) - (toplevel-compilation (code "var " v " = " s)) - v))) - ((consp sexp) - (let ((c (dump-cons sexp))) - (if recursive - c - (let ((v (genlit))) - (toplevel-compilation (code "var " v " = " c)) - v)))) - ((arrayp sexp) - (let ((c (dump-array sexp))) - (if recursive - c - (let ((v (genlit))) - (toplevel-compilation (code "var " v " = " c)) - v)))))) + (t + (or (cdr (assoc sexp *literal-table*)) + (let ((dumped (typecase sexp + (symbol (dump-symbol sexp)) + (cons (dump-cons sexp)) + (array (dump-array sexp))))) + (if recursive + dumped + (let ((jsvar (genlit))) + (push (cons sexp jsvar) *literal-table*) + (toplevel-compilation (code "var " jsvar " = " dumped)) + jsvar))))))) (define-compilation quote (sexp) (literal sexp))