[armedbear-ticket] [armedbear] #231: DEFSTRUCT accessor functions overwrite accessors in :INCLUDEd structs

#231: DEFSTRUCT accessor functions overwrite accessors in :INCLUDEd structs ------------------------+--------------------------------------------------- Reporter: ehuelsmann | Owner: mevenson Type: defect | Status: new Priority: major | Milestone: 1.1.0 Component: libraries | Version: Keywords: | ------------------------+--------------------------------------------------- Ralf Moeller reports: The following file causes a problem in ABCL (1.1.0-dev-svn-14041) when compiled (!) and loaded. (in-package cl-user) (defstruct a (s1 nil)) (defstruct (b (:include a) (:conc-name foo-)) (s2 nil)) (defstruct (c (:include a) (:conc-name foo-)) (s3 nil)) (defun test () (let ((x (make-b :s1 1 :s2 2))) (foo-s1 x))) CL-USER(4): (test) #<THREAD "interpreter" {2EF7D41F}>: Debugger invoked on condition of type SIMPLE-TYPE-ERROR The value #<B {564434F7}> is not of type C. Restarts: 0: TOP-LEVEL Return to top level. [1] CL-USER(6): (lisp-implementation-version) "1.1.0-dev-svn-14041" [1] CL-USER(7): The problem is that the defstruct declaration for c "overwrites" the accessor foo-s1 generated by defstruct b. If foo-s1 is called for a b instance, the type assertions introduced by define-reader (and define-writer, see the ABCL implementation for defstruct) cause the error described above. -- Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/231> armedbear <http://common-lisp.net/project/armedbear> armedbear

#231: DEFSTRUCT accessor functions overwrite accessors in :INCLUDEd structs ------------------------+--------------------------------------------------- Reporter: ehuelsmann | Owner: mevenson Type: defect | Status: new Priority: major | Milestone: 1.1.0 Component: libraries | Version: Keywords: | ------------------------+--------------------------------------------------- Comment(by ehuelsmann): My response to Ralf was: Thanks for the report. I've been thinking about it and I think the best solution is even easier to code: when an included DEFSTRUCT already defines the same accessor, we should simply not define it again: the result will be that the accessor checks for structs of type 'A and all of its subtypes will be allowed. I'll log a ticket to that extent and try to come up with the right change to defstruct.lisp. However, if you can submit a patch to that extent, that'd be most appreciated! -- Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/231#comment:1> armedbear <http://common-lisp.net/project/armedbear> armedbear

#231: DEFSTRUCT accessor functions overwrite accessors in :INCLUDEd structs ------------------------+--------------------------------------------------- Reporter: ehuelsmann | Owner: mevenson Type: defect | Status: new Priority: major | Milestone: 1.2.0 Component: libraries | Version: Keywords: | ------------------------+--------------------------------------------------- Changes (by ehuelsmann): * milestone: 1.1.0 => 1.2.0 Comment: clisp exhibits the same behaviour and the spec allows it (or at least, doesn't specify behaviour for it). Pushing out to 1.2.0 - not a blocker for 1.1.0. -- Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/231#comment:2> armedbear <http://common-lisp.net/project/armedbear> armedbear

#231: DEFSTRUCT accessor functions overwrite accessors in :INCLUDEd structs ------------------------+--------------------------------------------------- Reporter: ehuelsmann | Owner: mevenson Type: defect | Status: new Priority: major | Milestone: 1.2.0 Component: libraries | Version: 1.2.0-dev Keywords: | ------------------------+--------------------------------------------------- Changes (by mevenson): * version: => 1.2.0-dev -- Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/231#comment:3> armedbear <http://common-lisp.net/project/armedbear> armedbear
participants (1)
-
armedbear