summaryrefslogtreecommitdiffstats
path: root/generic/tclExecute.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tclExecute.c')
-rw-r--r--generic/tclExecute.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index c77f924..0d9705f 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -4680,7 +4680,7 @@ TEBCresume(
TRACE_ERROR(interp);
goto gotError;
}
- if (Tcl_ObjTypeIndex(interp, valuePtr, index, &objResultPtr)!=TCL_OK) {
+ if (TclObjTypeHasProc(valuePtr,indexProc)(interp, valuePtr, index, &objResultPtr)!=TCL_OK) {
CACHE_STACK_INFO();
TRACE_ERROR(interp);
goto gotError;
@@ -4762,7 +4762,8 @@ TEBCresume(
*/
/* special case for AbstractList */
- if (TclObjTypeHasProc(valuePtr,indexProc)) {
+ Tcl_ObjTypeIndexProc *indexProc = TclObjTypeHasProc(valuePtr,indexProc);
+ if (indexProc) {
length = TclObjTypeHasProc(valuePtr, lengthProc)(valuePtr);
/* Decode end-offset index values. */
@@ -4770,7 +4771,7 @@ TEBCresume(
/* Compute value @ index */
DECACHE_STACK_INFO();
- if (Tcl_ObjTypeIndex(interp, valuePtr, index, &objResultPtr)!=TCL_OK) {
+ if (indexProc(interp, valuePtr, index, &objResultPtr)!=TCL_OK) {
CACHE_STACK_INFO();
TRACE_ERROR(interp);
goto gotError;
@@ -4854,15 +4855,16 @@ TEBCresume(
* Compute the new variable value.
*/
- if (TclObjTypeHasProc(valuePtr, setElementProc)) {
+ Tcl_ObjTypeSetElement *setElementProc = TclObjTypeHasProc(valuePtr, setElementProc);
+ if (setElementProc) {
DECACHE_STACK_INFO();
- objResultPtr = Tcl_ObjTypeSetElement(interp,
- valuePtr, numIndices,
- &OBJ_AT_DEPTH(numIndices), OBJ_AT_TOS);
+ objResultPtr = setElementProc(interp,
+ valuePtr, numIndices,
+ &OBJ_AT_DEPTH(numIndices), OBJ_AT_TOS);
} else {
objResultPtr = TclLsetFlat(interp, valuePtr, numIndices,
- &OBJ_AT_DEPTH(numIndices), OBJ_AT_TOS);
+ &OBJ_AT_DEPTH(numIndices), OBJ_AT_TOS);
}
if (!objResultPtr) {
CACHE_STACK_INFO();
@@ -4985,9 +4987,10 @@ TEBCresume(
fromIdx = TclIndexDecode(fromIdx, objc - 1);
- if (TclObjTypeHasProc(valuePtr, sliceProc)) {
+ Tcl_ObjTypeSliceProc *sliceProc = TclObjTypeHasProc(valuePtr, sliceProc);
+ if (sliceProc) {
DECACHE_STACK_INFO();
- if (Tcl_ObjTypeSlice(interp, valuePtr, fromIdx, toIdx, &objResultPtr) != TCL_OK) {
+ if (sliceProc(interp, valuePtr, fromIdx, toIdx, &objResultPtr) != TCL_OK) {
objResultPtr = NULL;
}
} else {
@@ -5027,7 +5030,7 @@ TEBCresume(
do {
if (isAbstractList) {
DECACHE_STACK_INFO();
- if (Tcl_ObjTypeIndex(interp, value2Ptr, i, &o) != TCL_OK) {
+ if (TclObjTypeHasProc(value2Ptr,indexProc)(interp, value2Ptr, i, &o) != TCL_OK) {
CACHE_STACK_INFO();
TRACE_ERROR(interp);
goto gotError;