summaryrefslogtreecommitdiffstats
path: root/generic/tclCompile.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2013-03-05 22:13:30 (GMT)
committerdgp <dgp@users.sourceforge.net>2013-03-05 22:13:30 (GMT)
commit69eed829d100f7dcbe449ef6854ae7d24f72179c (patch)
tree75bdcad5e3dd07490f2ff56d5d37a926d77e61a2 /generic/tclCompile.c
parent9e95ecd95bda273bf6f0b4c6b3816c6043b868ae (diff)
downloadtcl-69eed829d100f7dcbe449ef6854ae7d24f72179c.zip
tcl-69eed829d100f7dcbe449ef6854ae7d24f72179c.tar.gz
tcl-69eed829d100f7dcbe449ef6854ae7d24f72179c.tar.bz2
New internal routine TclFetchLiteral() for better CompileEnv encapsulation.
Diffstat (limited to 'generic/tclCompile.c')
-rw-r--r--generic/tclCompile.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/generic/tclCompile.c b/generic/tclCompile.c
index cf1e25e..5427759 100644
--- a/generic/tclCompile.c
+++ b/generic/tclCompile.c
@@ -1896,8 +1896,7 @@ TclCompileScript(
tokenPtr[1].start, tokenPtr[1].size);
if (cmdPtr != NULL) {
TclSetCmdNameObj(interp,
- envPtr->literalArrayPtr[objIndex].objPtr,
- cmdPtr);
+ TclFetchLiteral(envPtr, objIndex), cmdPtr);
}
} else {
/*
@@ -1914,7 +1913,7 @@ TclCompileScript(
if (envPtr->clNext) {
TclContinuationsEnterDerived(
- envPtr->literalArrayPtr[objIndex].objPtr,
+ TclFetchLiteral(envPtr, objIndex),
tokenPtr[1].start - envPtr->source,
eclPtr->loc[wlineat].next[wordIdx]);
}
@@ -2223,9 +2222,8 @@ TclCompileTokens(
Tcl_DStringFree(&textBuffer);
if (numCL) {
- TclContinuationsEnter(
- envPtr->literalArrayPtr[literal].objPtr, numCL,
- clPosition);
+ TclContinuationsEnter(TclFetchLiteral(envPtr, literal),
+ numCL, clPosition);
}
numCL = 0;
}
@@ -2271,7 +2269,7 @@ TclCompileTokens(
TclEmitPush(literal, envPtr);
numObjsToConcat++;
if (numCL) {
- TclContinuationsEnter(envPtr->literalArrayPtr[literal].objPtr,
+ TclContinuationsEnter(TclFetchLiteral(envPtr, literal),
numCL, clPosition);
}
numCL = 0;
@@ -2579,7 +2577,9 @@ TclInitByteCodeObj(
p += TCL_ALIGN(codeBytes); /* align object array */
codePtr->objArrayPtr = (Tcl_Obj **) p;
for (i = 0; i < numLitObjects; i++) {
- if (objPtr == envPtr->literalArrayPtr[i].objPtr) {
+ Tcl_Obj *fetched = TclFetchLiteral(envPtr, i);
+
+ if (objPtr == fetched) {
/*
* Prevent circular reference where the bytecode intrep of
* a value contains a literal which is that same value.
@@ -2598,7 +2598,7 @@ TclInitByteCodeObj(
Tcl_IncrRefCount(codePtr->objArrayPtr[i]);
Tcl_DecrRefCount(objPtr);
} else {
- codePtr->objArrayPtr[i] = envPtr->literalArrayPtr[i].objPtr;
+ codePtr->objArrayPtr[i] = fetched;
}
}