diff options
| author | dgp@users.sourceforge.net <dgp> | 2013-09-07 21:19:47 (GMT) |
|---|---|---|
| committer | dgp@users.sourceforge.net <dgp> | 2013-09-07 21:19:47 (GMT) |
| commit | 7666b015b0af1390c51d22d0316a5daa702317b8 (patch) | |
| tree | e37a1e5e986f7b58a0b5da2d438f30df452ee611 /generic/tclOOBasic.c | |
| parent | 5c851cc8463246658a7ee6c35dca264f9ac74c4c (diff) | |
| parent | 1197c93b5610b36236245999660828bd7c5a852e (diff) | |
| download | tcl-7666b015b0af1390c51d22d0316a5daa702317b8.zip tcl-7666b015b0af1390c51d22d0316a5daa702317b8.tar.gz tcl-7666b015b0af1390c51d22d0316a5daa702317b8.tar.bz2 | |
merge trunk
Diffstat (limited to 'generic/tclOOBasic.c')
| -rw-r--r-- | generic/tclOOBasic.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/generic/tclOOBasic.c b/generic/tclOOBasic.c index f8cd1a4..aba06a5 100644 --- a/generic/tclOOBasic.c +++ b/generic/tclOOBasic.c @@ -88,7 +88,7 @@ TclOO_Class_Constructor( Tcl_Obj *const *objv) { Object *oPtr = (Object *) Tcl_ObjectContextObject(context); - Tcl_Obj *invoke[3]; + Tcl_Obj **invoke; if (objc-1 > Tcl_ObjectContextSkippedArgs(context)) { Tcl_WrongNumArgs(interp, Tcl_ObjectContextSkippedArgs(context), objv, @@ -102,6 +102,7 @@ TclOO_Class_Constructor( * Delegate to [oo::define] to do the work. */ + invoke = ckalloc(3 * sizeof(Tcl_Obj *)); invoke[0] = oPtr->fPtr->defineName; invoke[1] = TclOOObjectName(interp, oPtr); invoke[2] = objv[objc-1]; @@ -115,7 +116,7 @@ TclOO_Class_Constructor( Tcl_IncrRefCount(invoke[1]); Tcl_IncrRefCount(invoke[2]); TclNRAddCallback(interp, DecrRefsPostClassConstructor, - invoke[0], invoke[1], invoke[2], NULL); + invoke, NULL, NULL, NULL); /* * Tricky point: do not want the extra reported level in the Tcl stack @@ -131,9 +132,12 @@ DecrRefsPostClassConstructor( Tcl_Interp *interp, int result) { - TclDecrRefCount((Tcl_Obj *) data[0]); - TclDecrRefCount((Tcl_Obj *) data[1]); - TclDecrRefCount((Tcl_Obj *) data[2]); + Tcl_Obj **invoke = data[0]; + + TclDecrRefCount(invoke[0]); + TclDecrRefCount(invoke[1]); + TclDecrRefCount(invoke[2]); + ckfree(invoke); return result; } |
