Ticket UUID: | 3485060 | |||
Title: | TclOO: variables not copied when mixins are copied | |||
Type: | Bug | Version: | obsolete: 8.6b2 | |
Submitter: | basilik99 | Created on: | 2012-02-06 19:28:27 | |
Subsystem: | 35. TclOO Package | Assigned To: | dkf | |
Priority: | 5 Medium | Severity: | ||
Status: | Closed | Last Modified: | 2012-03-27 15:28:15 | |
Resolution: | Fixed | Closed By: | dkf | |
Closed on: | 2012-03-27 08:28:15 | |||
Description: |
Hi, I use ActiveState Tcl 8.6.0.0.295132 Beta 6. The following code: package require TclOO oo::class create Mix1 \ { variable Mix1_var constructor {} \ { set Mix1_var 10 puts "Mix1 constructor: Mix1_var = $Mix1_var." next } } oo::class create C1 \ { mixin [oo::copy Mix1 Mix1_copy] variable C1_var constructor {} \ { set C1_var 40 my variable Mix1_var ;# needed otherwise variable not found (normal behavior) puts "C1 constructor: C1_var = $C1_var and Mix1_var = $Mix1_var." } } C1 create objc1 gives the output: Mix1 constructor: Mix1_var = 10. can't read "Mix1_var": no such variable % puts $errorInfo can't read "Mix1_var": no such variable while executing "puts "C1 constructor: C1_var = $C1_var and Mix1_var = $Mix1_var."" (class "::C1" constructor line 4) invoked from within "next" (class "::oo::define::Mix1_copy" constructor line 4) invoked from within "C1 create objc1" However, if: mixin [oo::copy Mix1 Mix1_copy] is replaced by: mixin Mix1 then it works without an error. So I suspect variables in a mixin not being copied when the mixin class is copied. Please confirm if it is a bug. Thanks, Etienne | |||
User Comments: |
dkf added on 2012-03-27 15:28:15:
allow_comments - 1 Fixed with commit of TIP #397 implementation, dkf added on 2012-02-13 07:24:47: Try the attached patch (or look on the development-rfe3485060 of the tcloo project: http://core.tcl.tk/tcloo/) which should now copy variables and procedures. I'd appreciate review; there may be things that should be copied by default which I've forgotten. (Note that non-procedure commands and sub-namespaces will definitely _not_ be copied by default, the former because that's super-hard and the latter because there's now a mechanism for adding it when necessary. I also don't copy traces of any kind.) It's *possible* that the patch won't apply cleanly to the main Tcl 8.6 trunk right now (well, excluding the ChangeLog entry of course). The codebases are close, but not identical. dkf added on 2012-02-13 07:18:16: File Added - 435627: 3485060.patch |
Attachments:
- 3485060.patch [download] added by dkf on 2012-02-13 07:18:16. [details]