Ticket UUID: | 1a56550e961f282b52a99194a4d1c9ae1c4bc5d1 | |||
Title: | Method list introspection misses mixins | |||
Type: | Bug | Version: | 8.6 | |
Submitter: | dkf | Created on: | 2017-10-18 15:53:49 | |
Subsystem: | 35. TclOO Package | Assigned To: | dkf | |
Priority: | 8 | Severity: | Minor | |
Status: | Closed | Last Modified: | 2017-10-19 09:28:53 | |
Resolution: | Fixed | Closed By: | dkf | |
Closed on: | 2017-10-19 09:28:53 | |||
Description: |
(text/html)
If we run this code which has <i>mixins in a superclass of the class of interest</i>: <dl><dd><pre> oo::class create C { method c {} {} } oo::class create D { mixin C method d {} {} unexport destroy } oo::class create E { superclass D method e {} {} } puts [info class methods E -all] E create e1 puts [info object methods e1 -all] </pre></dl> We see that both of the introspectors find <tt>d</tt> and <tt>e</tt> but not <tt>c</tt>. This is not correct; the introspection should find all three. | |||
User Comments: |
dkf added on 2017-10-19 09:28:53:
(text/html)
The traversal of the mixin links was in the wrong place relative to the tail-recursive unrolling inside <tt>AddClassMethodNames</tt> inside tclOOCall.c; the mixin would have been found if the class into which it had been mixed had two (or more) ordinary superclasses. Rearranging the code and adding a separate mechanism for determining how to avoid excess work seems to fix it. |