diff options
| -rw-r--r-- | doc/object.n | 5 | ||||
| -rw-r--r-- | generic/tclOOBasic.c | 3 | ||||
| -rw-r--r-- | tests/oo.test | 10 |
3 files changed, 17 insertions, 1 deletions
diff --git a/doc/object.n b/doc/object.n index df657a9..381b963 100644 --- a/doc/object.n +++ b/doc/object.n @@ -64,6 +64,11 @@ The \fBoo::object\fR class supports the following non-exported methods: This method concatenates the arguments, \fIarg\fR, as if with \fBconcat\fR, and then evaluates the resulting script in the namespace that is uniquely associated with \fIobj\fR, returning the result of the evaluation. +.RS +.PP +Note that object-internal commands such as \fBmy\fR and \fBself\fR can be +invoked in this context. +.RE .TP \fIobj \fBunknown ?\fImethodName\fR? ?\fIarg ...\fR? . diff --git a/generic/tclOOBasic.c b/generic/tclOOBasic.c index 792ff9c..13749b2 100644 --- a/generic/tclOOBasic.c +++ b/generic/tclOOBasic.c @@ -415,7 +415,8 @@ TclOO_Object_Eval( */ (void) TclPushStackFrame(interp, (Tcl_CallFrame **) framePtrPtr, - Tcl_GetObjectNamespace(object), 0); + Tcl_GetObjectNamespace(object), FRAME_IS_METHOD); + framePtr->clientData = context; framePtr->objc = objc; framePtr->objv = objv; /* Reference counts do not need to be * incremented here. */ diff --git a/tests/oo.test b/tests/oo.test index a41113d..7210da3 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -2857,6 +2857,16 @@ test oo-18.11 {OO: define/self command support} -setup { (in definition script for class "::foo" line 1) invoked from within "oo::define foo {rename ::foo {}; self {error foobar}}"} +test oo-18.12 {OO: self callable via eval method} -setup { + oo::class create parent { + export eval + } + parent create ::foo +} -body { + foo eval { self } +} -cleanup { + parent destroy +} -result ::foo test oo-19.1 {OO: varname method} -setup { oo::object create inst |
