;;;--------------------------------------------------------------------------
;;; The tokenizer.
-(defconstant eof (cons :eof nil)
- "A magical object which `get-token' returns at end-of-file.")
+(eval-when (:compile-toplevel :load-toplevel :execute)
+ (let ((value (cons :eof nil)))
+ (unless (and (boundp 'eof)
+ (equal (symbol-value 'eof) value))
+ (defconstant eof (cons :eof nil)
+ "A magical object which `get-token' returns at end-of-file."))))
(defun default-get-token ()
"Read a token from *stream* and store it in *token*."
the value stack."
`(progn
(setf (get ',op ',kind)
- (lambda () ,@body))
+ (lambda () ,@body))
',op))
(defmacro definfix (op prec &body body)
(let ((stuff nil))
(loop
(unless (symbolp *token*)
- (error "expected symbol; found ~S" *token*))
+ (error "expected symbol; found ~S" *token*))
(push *token* stuff)
(get-token)
(unless (delim '|,| nil)
(defun foo (x) (- x 6)))
("bind x = 3 in x - 2" . (let ((x 3)) (- x 2)))
("bind x, y = values(1, 2),
- z = 3,
- docs, decls, body = parse-body(body) in complicated" .
+ z = 3,
+ docs, decls, body = parse-body(body) in complicated" .
(multiple-value-bind (x y) (values 1 2)
(let ((z 3))
(multiple-value-bind (docs decls body) (parse-body body)