Changeset 688
- Timestamp:
- Mar 22, 2004, 9:30:02 AM (21 years ago)
- File:
-
- 1 edited
-
trunk/ccl/level-1/l1-readloop-lds.lisp (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/level-1/l1-readloop-lds.lisp
r658 r688 18 18 19 19 (in-package "CCL") 20 21 20 22 21 23 (defun toplevel-loop () … … 150 152 ;This is the part common to toplevel loop and inner break loops. 151 153 (defun read-loop (&key (break-level *break-level*) 152 (prompt-function #'(lambda ( ) (print-listener-promptt)))154 (prompt-function #'(lambda (stream) (print-listener-prompt stream t))) 153 155 (input-stream *terminal-io*) 154 156 (output-stream *terminal-io*)) … … 157 159 *loading-file-source-file* 158 160 *in-read-loop* 159 (*listener-p* t)160 161 *** ** * +++ ++ + /// // / - 161 form) 162 (eof-value (cons nil nil))) 163 (declare (dynamic-extent eof-value)) 162 164 (loop 163 165 (restart-case … … 166 168 (catch-cancel 167 169 (loop 168 (setq *loading-file-source-file* nil 169 *in-read-loop* nil 170 (setq *in-read-loop* nil 170 171 *break-level* break-level) 171 (setq form (toplevel-read :input-stream input-stream 172 :output-stream output-stream 173 :prompt-function prompt-function)) 174 (if (eq form *eof-value*) 175 (if (eof-transient-p (stream-device input-stream :input)) 176 (progn 177 (stream-clear-input *terminal-io*) 178 (abort-break)) 179 (quit)) 180 (or (check-toplevel-command form) 181 (toplevel-print 182 (toplevel-eval form)))))) 172 (multiple-value-bind (form path print-result) 173 (toplevel-read :input-stream input-stream 174 :output-stream output-stream 175 :prompt-function prompt-function 176 :eof-value eof-value) 177 (if (eq form eof-value) 178 (if (eof-transient-p (stream-device input-stream :input)) 179 (progn 180 (stream-clear-input *terminal-io*) 181 (abort-break)) 182 (quit)) 183 (or (check-toplevel-command form) 184 (let* ((values (toplevel-eval form path))) 185 (if print-result (toplevel-print values)))))))) 183 186 (format *terminal-io* "~&Cancelled"))) 184 187 (abort () :report (lambda (stream) … … 198 201 (format *terminal-io* "~%")))) 199 202 203 204 200 205 ;Read a form from *terminal-io*. 201 206 (defun toplevel-read (&key (input-stream *standard-input*) 202 207 (output-stream *standard-output*) 203 (prompt-function #'print-listener-prompt)) 204 (let* ((listener input-stream)) 205 (force-output output-stream) 206 (funcall prompt-function) 207 (loop 208 (let* ((*in-read-loop* nil) ;So can abort out of buggy reader macros... 209 (form)) 210 (catch '%re-read 211 (if (eq (setq form (read listener nil *eof-value*)) *eof-value*) 212 (return form) 213 (progn 214 (let ((ch)) ;Trim whitespace 215 (while (and (listen listener) 216 (setq ch (read-char listener nil nil)) 217 (whitespacep cH)) 218 (setq ch nil)) 219 (when ch (unread-char ch listener))) 220 (when *listener-indent* 221 (write-char #\space listener) 222 (write-char #\space listener)) 223 (return (process-single-selection form))))))))) 208 (prompt-function #'print-listener-prompt) 209 (eof-value *eof-value*)) 210 (force-output output-stream) 211 (funcall prompt-function output-stream) 212 (read-toplevel-form input-stream eof-value)) 224 213 225 214 (defvar *always-eval-user-defvars* nil) … … 231 220 form)) 232 221 233 (defun toplevel-eval (form &optional env)222 (defun toplevel-eval (form &optional *loading-file-source-file*) 234 223 (setq +++ ++ ++ + + - - form) 235 224 (let* ((package *package*) 236 (values (multiple-value-list (cheap-eval-in-environment form env))))225 (values (multiple-value-list (cheap-eval-in-environment form nil)))) 237 226 (unless (eq package *package*) 238 (application-ui-operation *application* :note- package *package*))227 (application-ui-operation *application* :note-current-package *package*)) 239 228 values)) 240 229 241 230 (defun toplevel-print (values) 242 (declare (resident))243 231 (setq /// // // / / values) 244 232 (setq *** ** ** * * (if (neq (%car values) (%unbound-marker-8)) (%car values))) … … 247 235 (dolist (val values) (write val) (terpri)))) 248 236 249 (defun print-listener-prompt ( &optional (force t))237 (defun print-listener-prompt (stream &optional (force t)) 250 238 (when (or force (neq *break-level* *last-break-level*)) 251 239 (let* ((*listener-indent* nil)) 252 (fresh-line *terminal-io*)240 (fresh-line stream) 253 241 (if (%izerop *break-level*) 254 (%write-string "?" *terminal-io*)255 (format *terminal-io*"~s >" *break-level*)))256 (write-string " " *terminal-io*)242 (%write-string "?" stream) 243 (format stream "~s >" *break-level*))) 244 (write-string " " stream) 257 245 (setq *last-break-level* *break-level*)) 258 (force-output *terminal-io*))246 (force-output stream)) 259 247 260 248
Note:
See TracChangeset
for help on using the changeset viewer.
