[cmucl/cmucl][master] Lookup names correctly in COMPILER-MACRO-FUNCTION.
Raymond Toy
rtoy at common-lisp.net
Mon Jun 22 21:08:24 UTC 2015
Raymond Toy pushed to branch master at cmucl / cmucl
Commits:
e6999217 by Raymond Toy at 2015-06-22T23:08:08Z
Lookup names correctly in COMPILER-MACRO-FUNCTION.
Fix #3.
The lookup for the names was not handling things like (FLET SQUARE
TEST/PRESENT) correctly. Use VALID-FUNCTION-NAME to get the function
name instead of a plain EQUAL test.
- - - - -
2 changed files:
- src/code/eval.lisp
- tests/issues.lisp
Changes:
=====================================
src/code/eval.lisp
=====================================
--- a/src/code/eval.lisp
+++ b/src/code/eval.lisp
@@ -448,7 +448,8 @@
set with SETF."
(let ((found (and env
(cdr (assoc name (c::lexenv-functions env)
- :test #'equal)))))
+ :key #'(lambda (e)
+ (nth-value 1 (valid-function-name-p e))))))))
(unless (eq (cond ((c::defined-function-p found)
(c::defined-function-inlinep found))
(found :notinline)
=====================================
tests/issues.lisp
=====================================
--- a/tests/issues.lisp
+++ b/tests/issues.lisp
@@ -38,3 +38,39 @@
t)
(t ()
nil))))
+
+;; Functions for testing issue-3
+(defun sqr (x)
+ (expt x 2))
+
+(define-compiler-macro sqr (x)
+ `(expt ,x 2))
+
+(eval-when (:compile-toplevel :load-toplevel :execute)
+(defmacro with-square-check (&body body &environment env)
+ (let ((text (if (compiler-macro-function 'sqr env)
+ "Yes"
+ "No")))
+ `(progn
+ (format t "SQUARE compiler macro present: ~A.~%" ,text)
+ , at body))))
+
+
+(defun test/absent ()
+ (with-square-check
+ (sqr 2)))
+
+(defun test/present ()
+ (flet ((sqr (x)
+ (print (expt x 3))))
+ (with-square-check
+ (sqr 2))))
+
+(define-test issue.3
+ (:tag :issues)
+ (assert-prints "SQUARE compiler macro present: Yes."
+ (test/absent))
+ (assert-prints "SQUARE compiler macro present: No.
+
+8"
+ (test/present)))
\ No newline at end of file
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/commit/e69992175ccdcd7f895cff99752b809057c615df
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cmucl-cvs/attachments/20150622/e9e696f2/attachment.html>
More information about the cmucl-cvs
mailing list