Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | code review: revert clazzObjectPtr back to unused, remove increment workaround for OO 1.0.2 (thisPtr of clazz is removed with last ref to engine, no matter how many references still exist). |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
b8e09f7f1701c921d0f3f4cb60a27ba0 |
User & Date: | sebres 2019-02-09 20:22:08.475 |
Context
2019-02-10
| ||
01:46 | restored clazzObjectPtr and check via this object due to timing problem (clazzClassPtr returns still valid this-object by deleted oo-subsystem sporadicaly, well reproducible within DEBUG-build). check-in: abf70db293 user: sebres tags: trunk | |
2019-02-09
| ||
20:23 | merge trunk check-in: f95dd315b2 user: sebres tags: sebres-memopt-perf-branch | |
20:22 | code review: revert clazzObjectPtr back to unused, remove increment workaround for OO 1.0.2 (thisPtr of clazz is removed with last ref to engine, no matter how many references still exist). check-in: b8e09f7f17 user: sebres tags: trunk | |
2019-02-08
| ||
23:51 | merge bug-1dc2d851eb: fixes several segfault, see [1dc2d851eb] check-in: e0601c3371 user: sebres tags: trunk | |
Changes
Changes to generic/itcl2TclOO.c.
︙ | ︙ | |||
380 381 382 383 384 385 386 | Interp *iPtr = (Interp *) interp; CallFrame *framePtr = iPtr->varFramePtr; if (framePtr == NULL || !(framePtr->isProcCallFrame & FRAME_IS_METHOD)) { return 0; } return 1; } | < < < < < < < | 380 381 382 383 384 385 386 | Interp *iPtr = (Interp *) interp; CallFrame *framePtr = iPtr->varFramePtr; if (framePtr == NULL || !(framePtr->isProcCallFrame & FRAME_IS_METHOD)) { return 0; } return 1; } |
Changes to generic/itcl2TclOO.h.
︙ | ︙ | |||
27 28 29 30 31 32 33 | MODULE_SCOPE int Itcl_SelfCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv); MODULE_SCOPE int Itcl_IsMethodCallFrame(Tcl_Interp *interp); MODULE_SCOPE int Itcl_InvokeEnsembleMethod(Tcl_Interp *interp, Tcl_Namespace *nsPtr, Tcl_Obj *namePtr, Tcl_Proc *procPtr, int objc, Tcl_Obj *const *objv); MODULE_SCOPE int Itcl_InvokeProcedureMethod(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv); | < | 27 28 29 30 31 32 33 | MODULE_SCOPE int Itcl_SelfCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv); MODULE_SCOPE int Itcl_IsMethodCallFrame(Tcl_Interp *interp); MODULE_SCOPE int Itcl_InvokeEnsembleMethod(Tcl_Interp *interp, Tcl_Namespace *nsPtr, Tcl_Obj *namePtr, Tcl_Proc *procPtr, int objc, Tcl_Obj *const *objv); MODULE_SCOPE int Itcl_InvokeProcedureMethod(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv); |
Changes to generic/itclBase.c.
︙ | ︙ | |||
379 380 381 382 383 384 385 | if (clazzObjectPtr == NULL) { Tcl_AppendResult(interp, "ITCL: cannot get Object for ::itcl::clazz for class \"", "::itcl::clazz", "\"", NULL); return TCL_ERROR; } | < < < < < < | 379 380 381 382 383 384 385 386 387 388 389 390 391 392 | if (clazzObjectPtr == NULL) { Tcl_AppendResult(interp, "ITCL: cannot get Object for ::itcl::clazz for class \"", "::itcl::clazz", "\"", NULL); return TCL_ERROR; } infoPtr->clazzClassPtr = Tcl_GetObjectAsClass(clazzObjectPtr); /* * Initialize the ensemble package first, since we need this * for other parts of [incr Tcl]. */ |
︙ | ︙ |
Changes to generic/itclClass.c.
︙ | ︙ | |||
245 246 247 248 249 250 251 | void *callbackPtr; int result; int newEntry; ItclResolveInfo *resolveInfoPtr; Tcl_Obj *cmdNamePtr; if (!infoPtr->clazzClassPtr | | | 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 | void *callbackPtr; int result; int newEntry; ItclResolveInfo *resolveInfoPtr; Tcl_Obj *cmdNamePtr; if (!infoPtr->clazzClassPtr || Tcl_ObjectDeleted(Tcl_GetClassAsObject(infoPtr->clazzClassPtr)) ) { Tcl_AppendResult(interp, "oo-subsystem is deleted", NULL); return TCL_ERROR; } /* * check for an empty class name to avoid a crash |
︙ | ︙ |
Changes to generic/itclInt.h.
︙ | ︙ | |||
165 166 167 168 169 170 171 | * otherwise NULL */ Tcl_ObjectMetadataType *class_meta_type; /* type for getting the Itcl class info * from a TclOO Tcl_Object */ const Tcl_ObjectMetadataType *object_meta_type; /* type for getting the Itcl object info * from a TclOO Tcl_Object */ | | | 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 | * otherwise NULL */ Tcl_ObjectMetadataType *class_meta_type; /* type for getting the Itcl class info * from a TclOO Tcl_Object */ const Tcl_ObjectMetadataType *object_meta_type; /* type for getting the Itcl object info * from a TclOO Tcl_Object */ Tcl_Object unused1; /* the root object of Itcl */ Tcl_Class clazzClassPtr; /* the root class of Itcl */ struct EnsembleInfo *ensembleInfo; struct ItclClass *currContextIclsPtr; /* context class for delegated option * handling */ int currClassFlags; /* flags for the class just in creation */ int buildingWidget; /* set if in construction of a widget */ |
︙ | ︙ |