summaryrefslogtreecommitdiffstats
path: root/generic/tclProc.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2016-04-07 21:07:26 (GMT)
committerdgp <dgp@users.sourceforge.net>2016-04-07 21:07:26 (GMT)
commitb42de3a4f38cb8f3837142c0107244102e74e113 (patch)
tree36d8b7ddd770814970ee1432def47ffad9d12f38 /generic/tclProc.c
parentf51c126c9dd672a301230d80202a536202ffed58 (diff)
downloadtcl-b42de3a4f38cb8f3837142c0107244102e74e113.zip
tcl-b42de3a4f38cb8f3837142c0107244102e74e113.tar.gz
tcl-b42de3a4f38cb8f3837142c0107244102e74e113.tar.bz2
Revise "levelReference" ObjType to use proposed routines.
Diffstat (limited to 'generic/tclProc.c')
-rw-r--r--generic/tclProc.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/generic/tclProc.c b/generic/tclProc.c
index 570e5ba..6307002 100644
--- a/generic/tclProc.c
+++ b/generic/tclProc.c
@@ -841,6 +841,7 @@ TclObjGetFrame(
{
register Interp *iPtr = (Interp *) interp;
int curLevel, level, result;
+ const Tcl_ObjIntRep *irPtr;
const char *name = NULL;
/*
@@ -861,16 +862,17 @@ TclObjGetFrame(
&& (level >= 0)) {
level = curLevel - level;
result = 1;
- } else if (objPtr->typePtr == &levelReferenceType) {
- level = (int) objPtr->internalRep.longValue;
+ } else if ((irPtr = Tcl_FetchIntRep(objPtr, &levelReferenceType))) {
+ level = irPtr->longValue;
result = 1;
} else {
name = TclGetString(objPtr);
if (name[0] == '#') {
if (TCL_OK == Tcl_GetInt(NULL, name+1, &level) && level >= 0) {
- TclFreeIntRep(objPtr);
- objPtr->typePtr = &levelReferenceType;
- objPtr->internalRep.longValue = level;
+ Tcl_ObjIntRep ir;
+
+ ir.longValue = level;
+ Tcl_StoreIntRep(objPtr, &levelReferenceType, &ir);
result = 1;
} else {
result = -1;