diff --git a/src/code/reader.lisp b/src/code/reader.lisp index 4afa029d3..be1b84361 100644 --- a/src/code/reader.lisp +++ b/src/code/reader.lisp @@ -1239,6 +1239,17 @@ standard Lisp readtable when NIL." (err)) (err)))))))))) +(declaim (type (or function symbol cons) *read-intern*)) +(defvar *read-intern* nil + "Function to call instead of INTERN in the reader.") + +;; (defmacro %read-intern-or (string package &body body) +;; "Call the *READ-INTERN* function, if it's set, with SYMBOL and PACKAGE or +;; eval BODY." +;; `(if (and *read-intern* (or (functionp *read-intern*) (fboundp *read-intern*))) +;; (funcall *read-intern* ,string ,package) +;; (progn ,@body))) + (defun read-token (stream firstchar) "Default readmacro function. Handles numbers, symbols, and SBCL's extended :: syntax." @@ -1581,6 +1592,10 @@ extended :: syntax." RETURN-SYMBOL (setf buf (normalize-read-buffer buf)) (casify-read-buffer buf) + (when (and *read-intern* (or (functionp *read-intern*) + (fboundp *read-intern*))) + (return (funcall *read-intern* + (sized-token-buf-string buf) package-designator))) (multiple-value-bind (pkg restart-kind) (if package-designator (reader-find-package package-designator stream t)