diff options
author | dkf <donal.k.fellows@manchester.ac.uk> | 2017-03-29 19:16:32 (GMT) |
---|---|---|
committer | dkf <donal.k.fellows@manchester.ac.uk> | 2017-03-29 19:16:32 (GMT) |
commit | 860cdf23779fd870926c414d99004cd80bcd3fa1 (patch) | |
tree | 7860640334b407827cb96b3ad04c386516a1ab39 | |
parent | 33d523b6274e003bc520d9d0497e24e85de7fae0 (diff) | |
download | tcl-860cdf23779fd870926c414d99004cd80bcd3fa1.zip tcl-860cdf23779fd870926c414d99004cd80bcd3fa1.tar.gz tcl-860cdf23779fd870926c414d99004cd80bcd3fa1.tar.bz2 |
[900cb0284bc] Ensure that masking pseudo-methods used for export management are not introspectable directly. [cherrypick]
-rw-r--r-- | generic/tclOOCall.c | 1 | ||||
-rw-r--r-- | tests/oo.test | 37 |
2 files changed, 38 insertions, 0 deletions
diff --git a/generic/tclOOCall.c b/generic/tclOOCall.c index 8003345..ac0b94d 100644 --- a/generic/tclOOCall.c +++ b/generic/tclOOCall.c @@ -619,6 +619,7 @@ AddClassMethodNames( int isWanted = (!(flags & PUBLIC_METHOD) || (mPtr->flags & PUBLIC_METHOD)) ? IN_LIST : 0; + isWanted |= (mPtr->typePtr == NULL ? NO_IMPLEMENTATION : 0); Tcl_SetHashValue(hPtr, INT2PTR(isWanted)); } else if ((PTR2INT(Tcl_GetHashValue(hPtr)) & NO_IMPLEMENTATION) && mPtr->typePtr != NULL) { diff --git a/tests/oo.test b/tests/oo.test index 2601c37..cb37a76 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -2241,6 +2241,43 @@ test oo-17.10 {OO: class introspection} -setup { oo::define foo unexport {*}[info class methods foo -all] info class methods foo -all } -result {} +set stdmethods {<cloned> destroy eval unknown variable varname} +test oo-17.11 {OO: object method unexport (bug 900cb0284bc)} -setup { + oo::object create o + oo::objdefine o unexport m +} -body { + lsort [info object methods o -all -private] +} -cleanup { + o destroy +} -result $stdmethods +test oo-17.12 {OO: instance method unexport (bug 900cb0284bc)} -setup { + oo::class create c + c create o + oo::objdefine o unexport m +} -body { + lsort [info object methods o -all -private] +} -cleanup { + o destroy + c destroy +} -result $stdmethods +test oo-17.13 {OO: class method unexport (bug 900cb0284bc)} -setup { + oo::class create c + oo::define c unexport m +} -body { + lsort [info class methods c -all -private] +} -cleanup { + c destroy +} -result $stdmethods +test oo-17.14 {OO: instance method unexport (bug 900cb0284bc)} -setup { + oo::class create c + oo::define c unexport m + c create o +} -body { + lsort [info object methods o -all -private] +} -cleanup { + o destroy + c destroy +} -result $stdmethods test oo-18.1 {OO: define command support} { list [catch {oo::define oo::object {error foo}} msg] $msg $errorInfo |