X-Git-Url: https://git.distorted.org.uk/~mdw/lisp/blobdiff_plain/b2c12b4eaf6e5c43791d95080a243c35f97ee488..1a50efd8a9e976bf16a29ce381ea38c6b9a39ea1:/infix.lisp diff --git a/infix.lisp b/infix.lisp index 579bce4..a77f51e 100644 --- a/infix.lisp +++ b/infix.lisp @@ -94,8 +94,12 @@ ;;;-------------------------------------------------------------------------- ;;; 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*." @@ -610,11 +614,11 @@ (pushval `(loop ,@(strip-progn (parse-infix 0))))) (defopfunc bind operand - (labels ((loop () + (labels ((loopy () (let ((ids (parse-ident-list)) (valform (progn (delim '=) (parse-infix 0))) (body (if (delim '|,| nil) - (loop) + (loopy) (progn (delim 'in) (strip-progn (parse-infix 0)))))) @@ -622,7 +626,7 @@ `(let ((,(car ids) ,valform)) ,@body) `(multiple-value-bind ,ids ,valform ,@body)))))) (get-token) - (pushval (car (loop))))) + (pushval (car (loopy))))) ;;;-------------------------------------------------------------------------- ;;; Parsing function bodies and lambda lists.