Removed compile-time constant string concatenation from the Parenscript printer,...
authorVladimir Sedach <vsedach@gmail.com>
Sat, 4 Apr 2009 22:39:15 +0000 (16:39 -0600)
committerVladimir Sedach <vsedach@gmail.com>
Sat, 4 Apr 2009 22:39:15 +0000 (16:39 -0600)
docs/reference.lisp
src/printer.lisp
t/ps-tests.lisp
t/reference-tests.lisp

index c7fb69f..8ead719 100644 (file)
@@ -1084,7 +1084,7 @@ a-variable  => aVariable
 (document.write
   (ps-html ((:a :href "#"
                 :onclick (ps-inline (transport))) "link")))
-=> document.write('<A HREF=\"#\" ONCLICK=\"' + ('javascript:' + 'transport()') + '\">link</A>')
+=> document.write('<A HREF=\"#\" ONCLICK=\"' + ('javascript:' + 'transport' + '(' + ')') + '\">link</A>')
 
 ;;; Forms may be used in attribute lists to conditionally generate
 ;;; the next attribute. In this example the textarea is sometimes disabled.
index 7d3fae8..c4ce792 100644 (file)
@@ -1,4 +1,4 @@
-(in-package :parenscript)
+(in-package "PARENSCRIPT")
 
 (defvar *ps-print-pretty* t)
 (defvar *indent-num-spaces* 4)
@@ -15,16 +15,11 @@ vice-versa.")
 (defmethod parenscript-print (form)
   (let ((*indent-level* 0)
         (*print-accumulator* ()))
-    (if (and (listp form) (eql 'js-block (car form))) ; ignore top-level block
-        (loop for (statement . remaining) on (third form) do
-             (ps-print statement) (psw ";") (when remaining (psw #\Newline)))
-        (ps-print form))
-    (reduce (lambda (acc next-token)
-              (if (and (stringp next-token)
-                       (stringp (car (last acc))))
-                  (append (butlast acc) (list (concatenate 'string (car (last acc)) next-token)))
-                  (append acc (list next-token))))
-            (cons () (reverse *print-accumulator*)))))
+      (if (and (listp form) (eql 'js-block (car form))) ; ignore top-level block
+          (loop for (statement . remaining) on (third form) do
+               (ps-print statement) (psw ";") (when remaining (psw #\Newline)))
+          (ps-print form))
+      (nreverse *print-accumulator*)))
 
 (defun psw (obj)
   (push (if (characterp obj) (string obj) obj) *print-accumulator*))
@@ -55,10 +50,8 @@ arguments, defines a printer for that form using the given body."
 
 (defun newline-and-indent ()
   (if *ps-print-pretty*
-      (when (and (stringp (car *print-accumulator*))
-                 (not (char= #\Newline (char (car *print-accumulator*) (1- (length (car *print-accumulator*))))))
-                 (psw #\Newline))
-        (loop repeat (* *indent-level* *indent-num-spaces*) do (psw #\Space)))
+      (progn (psw #\Newline)
+             (loop repeat (* *indent-level* *indent-num-spaces*) do (psw #\Space)))
       (psw #\Space)))
 
 (defparameter *js-lisp-escaped-chars*
index b493903..d1779e9 100644 (file)
@@ -476,7 +476,7 @@ __setf_someThing(_js2, _js3, _js4);")
                      :onclick (ps-inline (transport)))
                  img))
        img))
-  "document.write(LINKORNOT == 1 ? '<A HREF=\"#\" ONCLICK=\"' + ('javascript:' + 'transport()') + '\">' + img + '</A>' : img)")
+  "document.write(LINKORNOT == 1 ? '<A HREF=\"#\" ONCLICK=\"' + ('javascript:' + 'transport' + '(' + ')') + '\">' + img + '</A>' : img)")
 
 (test-ps-js negate-number-literal ;; ok, this was broken and fixed before, but no one bothered to add the test!
   (- 1)
index 11c36f2..3460390 100644 (file)
@@ -593,7 +593,7 @@ for (var k in obj) {
   (document.write
   (ps-html ((:a :href "#"
                 :onclick (ps-inline (transport))) "link")))
-  "document.write('<A HREF=\"#\" ONCLICK=\"' + ('javascript:' + 'transport()') + '\">link</A>')")
+  "document.write('<A HREF=\"#\" ONCLICK=\"' + ('javascript:' + 'transport' + '(' + ')') + '\">link</A>')")
 
 (test-ps-js the-html-generator-4
   (let* ((disabled nil)