#61: Compilation of THE with macros ----------------------+----------------------------------------------------- Reporter: mevenson | Owner: ehuelsmann Type: defect | Status: new Priority: major | Milestone: unscheduled Component: compiler | Version: 1.0 Keywords: | ----------------------+----------------------------------------------------- As reported in http://article.gmane.org/gmane.lisp.armedbear.devel/152 by Eric Marsden, the recent work on THE forms has broken the compilation of THE forms involving macros as follows:
#| COMPILE-FILE for this file fails with [svn r12114]. |# (defconstant +foo-OK+ (the (integer 0 10) 5))
(deftype foo () '(integer 0 10))
(defmacro assemble-foo (x) `(the foo ,x))
(defconstant +foo+ (assemble-foo 6))
#61: Compilation of THE with macros -----------------------+---------------------------------------------------- Reporter: mevenson | Owner: ehuelsmann Type: defect | Status: new Priority: major | Milestone: unscheduled Component: compiler | Version: 1.0 Resolution: | Keywords: -----------------------+----------------------------------------------------
Comment(by mevenson):
This has nothing to do with macros (at least not directly), but rather to the non-checking of DEFTYPEd types. This is due to use of the Java typep() which for FIXNUMs never uses the Lisp TYPEP to check things.
#61: Compilation of THE with macros -----------------------+---------------------------------------------------- Reporter: mevenson | Owner: ehuelsmann Type: defect | Status: new Priority: major | Milestone: unscheduled Component: compiler | Version: 1.0 Resolution: | Keywords: -----------------------+----------------------------------------------------
Comment(by mevenson):
Fix in place with r12119.
Before closing, we should consider whether to move the thunk from the Java-side typep() to the Lisp-side TYPEP up to the end of LispObject.typep(). This makes sense to me, but I would like to have second opinions.
We should also add the tests for this case.
#61: Compilation of THE with DEFTYPE -----------------------+---------------------------------------------------- Reporter: mevenson | Owner: ehuelsmann Type: defect | Status: closed Priority: major | Milestone: unscheduled Component: compiler | Version: 1.0 Resolution: fixed | Keywords: -----------------------+---------------------------------------------------- Changes (by mevenson):
* status: new => closed * resolution: => fixed
Comment:
Erik fixed (and reverted r12119) with r12124 by punting on the verification of the type of a DEFTYPEd form.
He comments in (armedbear-devel)
{{{ I must say that I intentionally did not use TYPEP because of 2 reasons:
1. It's not quite clear when it becomes available to the interpreter while I wanted type validation from the start
2. It will expand all types, but some Lisp types take a lot of time to verify so, I choose the same policy as the compiler under *safety* settings lower than 3
}}}
My proposed further solution (call Lisp TYPEP at the end of the Java typep() override chain) would create a recursive dependency.
We close this ticket, by noting that ABCL's THE special operator is a bit better than before, but won't verify all types (this is allowed by the ANSI specification).
#61: Compilation of THE with DEFTYPE -----------------------+---------------------------------------------------- Reporter: mevenson | Owner: ehuelsmann Type: defect | Status: closed Priority: major | Milestone: 0.22 Component: compiler | Version: 1.0 Resolution: fixed | Keywords: -----------------------+---------------------------------------------------- Changes (by ehuelsmann):
* milestone: unscheduled => 0.22
Comment:
closed is not 'unscheduled'; moving to the most recently closed milestone.
armedbear-ticket@common-lisp.net