Tcl Source Code

View Ticket
Login
Ticket UUID: d8589a4ec50d0423caa0ee5e0f9603223f08b4e5
Title: Uplevel Failure in Itcl 4.0
Type: Bug Version: 4.0b7
Submitter: tomkiti Created on: 2013-11-30 15:42:08
Subsystem: 81. Bundled Packages Assigned To: dgp
Priority: 5 Medium Severity: Critical
Status: Closed Last Modified: 2014-02-11 13:12:19
Resolution: Duplicate Closed By: dgp
    Closed on: 2014-02-11 13:12:19
Description:
When "uplevel" is used to call a method in a different class, it reports that the only available methods are from the calling class, not the target class. In the following example, class A calls a method in class B, which uses "uplevel" to call a method in class A:

    if {[package vsatisfies [package require Tcl] 8.6]} {
        package require Itcl 4.0
    } else {
        package require Itcl
    }
    namespace import itcl::*

    class A {

        variable b

        constructor {} {
            set b [B #auto]
        }

        public method m1 {} {
            $b m3
        }

        public method m2 {} {
            puts m2
        }
    }

    class B {

        public method m3 {} {
            uplevel m2 ;# <--------- Fails in Itcl 4.0
        }
    }

    set a [A #auto]
    $a m1

When the above code is run in Tcl8.5.15/Itcl3.4, it correctly displays:

    m2

When run in Tcl8.6.1/Itcl4.0b7, it throws an error:

    bad option "m2": should be one of...
      b0 cget -option
      b0 configure ?-option? ?value -option value...?
      b0 isa className
      b0 m3

The list of available methods are from class B, not class A. "Uplevel" works correctly with TclOO 1.0.1.
User Comments: dgp added on 2014-02-11 13:10:59:
This bug is still buggy.

It is not a dup of the issue reported on clt.

Please test claimed fixes before closing tickets.

That said, the ticket belongs in an Itcl tracker,
not the Tcl one, and it is there.

https://sourceforge.net/p/incrtcl/bugs/250/

Track further progress on the issue there.

oehhar added on 2014-02-11 07:34:00:

Following info of Don Porter on this clt post: https://groups.google.com/forum/#!topic/comp.lang.tcl/kLJ8OMl1egk

this bug is a dublicate of itcl bug 244: https://sourceforge.net/p/incrtcl/bugs/244/

which is fixed in this commit: http://core.tcl.tk/itcl/info/0e02e7b014


tomkiti added on 2013-12-03 18:04:18:
Sorry, I'm just a user, so I was using the version that came with ActiveTcl 8.6.1 (4.0b7). I tried 4.0.0 and 4.0.1 from dede279b1e and they both did the same thing.

dgp added on 2013-12-03 15:15:03:
Please do not continue to use Itcl 4.0b7.

At least test the released Itcl 4.0.0.

Even more helpful would be to use the tip
of Itcl development.

http://core.tcl.tk/itcl/timeline

dkf added on 2013-12-01 17:06:50:

Looks like either things are resolved in the wrong context, or there is an extra “invisible” stack frame.