X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler.lisp;h=22b318f2533f41774938caee3735a206522c1bc1;hb=00ba710e3c68fd667499a602bcead98400f1ac55;hp=ef66b1fe9f94a706132810a0b4b6ebc841b907d8;hpb=38c784adec0e2cdcc15b35d3d793333856071bcb;p=jscl.git diff --git a/src/compiler.lisp b/src/compiler.lisp index ef66b1f..22b318f 100644 --- a/src/compiler.lisp +++ b/src/compiler.lisp @@ -489,67 +489,6 @@ ;;; Compilation of literals an object dumping -;;; Two seperate functions are needed for escaping strings: -;;; One for producing JavaScript string literals (which are singly or -;;; doubly quoted) -;;; And one for producing Lisp strings (which are only doubly quoted) -;;; -;;; The same function would suffice for both, but for javascript string -;;; literals it is neater to use either depending on the context, e.g: -;;; foo's => "foo's" -;;; "foo" => '"foo"' -;;; which avoids having to escape quotes where possible -(defun js-escape-string (string) - (let ((index 0) - (size (length string)) - (seen-single-quote nil) - (seen-double-quote nil)) - (flet ((%js-escape-string (string escape-single-quote-p) - (let ((output "") - (index 0)) - (while (< index size) - (let ((ch (char string index))) - (when (char= ch #\\) - (setq output (concat output "\\"))) - (when (and escape-single-quote-p (char= ch #\')) - (setq output (concat output "\\"))) - (when (char= ch #\newline) - (setq output (concat output "\\")) - (setq ch #\n)) - (setq output (concat output (string ch)))) - (incf index)) - output))) - ;; First, scan the string for single/double quotes - (while (< index size) - (let ((ch (char string index))) - (when (char= ch #\') - (setq seen-single-quote t)) - (when (char= ch #\") - (setq seen-double-quote t))) - (incf index)) - ;; Then pick the appropriate way to escape the quotes - (cond - ((not seen-single-quote) - (concat "'" (%js-escape-string string nil) "'")) - ((not seen-double-quote) - (concat "\"" (%js-escape-string string nil) "\"")) - (t (concat "'" (%js-escape-string string t) "'")))))) - -(defun lisp-escape-string (string) - (let ((output "") - (index 0) - (size (length string))) - (while (< index size) - (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)) - (concat "\"" output "\""))) - ;;; BOOTSTRAP MAGIC: We record the macro definitions as lists during ;;; the bootstrap. Once everything is compiled, we want to dump the ;;; whole global environment to the output file to reproduce it in the