Changeset 11539


Ignore:
Timestamp:
Dec 16, 2008, 9:38:22 PM (11 years ago)
Author:
gz
Message:

remove ~<newline> in format strings at compile time

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/compiler/optimizers.lisp

    r11443 r11539  
    19641964                         (format-to-string stream ,string)
    19651965                         (progn (write-string ,string (and (neq stream t) stream)) nil))))))
     1966          ((let ((new (format-string-sans~newlines string)))
     1967             (and (neq new string) (setq string new)))
     1968           `(format ,stream ,string ,@args))
    19661969          ((optimize-format-call stream string args env))
    19671970          (t call))
    19681971    call))
     1972
     1973(defun format-string-sans~newlines (string)
     1974  (loop as pos = 0 then (position #\Newline string :start pos) while pos
     1975        as ch = (and (> pos 0) (schar string (1- pos)))
     1976        do (cond ((not (or (eq ch #\~)
     1977                           (and (or (eq ch #\:) (eq ch #\@))
     1978                                (> pos 1) (eq (schar string (- pos 2)) #\~))))
     1979                  (incf pos))
     1980                 ((eq ch #\:)
     1981                  (decf pos 2)
     1982                  (setq string (%str-cat (subseq string 0 pos) (subseq string (+ pos 3)))))
     1983                 ((eq ch #\@)
     1984                  (setq string (%str-cat (subseq string 0 (- pos 2))
     1985                                         "~%"
     1986                                         (subseq string (position-if-not #'whitespacep string
     1987                                                                         :start (1+ pos))))))
     1988                 ((eq ch #\~)
     1989                  (decf pos)
     1990                  (setq string (%str-cat (subseq string 0 pos)
     1991                                         (subseq string (position-if-not #'whitespacep string
     1992                                                                         :start (1+ pos))))))))
     1993  string)
    19691994
    19701995(defun count-known-format-args (string start end)
Note: See TracChangeset for help on using the changeset viewer.