From: William H. N. <wil...@ai...> - 2002-09-12 17:49:02
|
On Thu, Sep 12, 2002 at 10:41:20AM +0400, Alexey Dejneka wrote: > This patch removes :ERROR continuation type check type. Forms with > compile-time type errors are replaced with call of ERROR. I think I like the basic idea, but I have some quibbles with the details of the current patch. With the patch, my system doesn't pass tests/run-tests.sh, failing in defstruct.impure.lisp. That test code isn't especially clear, but it looks to me as though it should be legal. It fails on the (TEST-VARIANT VANILLA-STRUCT :BOA-CONSTRUCTOR-P T) case, and it looks to me as though in that case the OPTIONAL-TEST-P flag should be true, so the REFCOUNT will default to the OPTIONAL-TEST2 value, i.e. 1, which satisfies the type constraints. > Drawback: > Unhelpful error message: > > (defun foo (x) > (declare (type integer x)) > (1+ (the float x))) > > * (foo 14) > debugger invoked on condition of type SIMPLE-TYPE-ERROR: > Execution of a form with compile-time type error. Also, I think all instances of TYPE-ERROR are supposed to support TYPE-ERROR-DATUM and TYPE-ERROR-EXPECTED-TYPE, and the TYPE-ERRORs that I encountered didn't have those slots bound. > Advantage: > Internals are cleaner. :ERROR combination kind is only used for > invalid syntax of a call (e.g. invalid number of arguments). As before, this sounds OK. -- William Harold Newman <wil...@ai...> "Unofficially, I advise that we erase the records and forget the whole thing." -- <http://www.terrybisson.com/meat.html> PGP key fingerprint 85 CE 1C BA 79 8D 51 8C B9 25 FB EE E0 C3 E5 7C |