summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--generic/tclExecute.c97
-rw-r--r--tests/nre.test2
3 files changed, 51 insertions, 54 deletions
diff --git a/ChangeLog b/ChangeLog
index 372f9c4..0fb2471 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
-2011-03-01 Miguel Sofer <msofer@users.sf.net>
+2011-03-05 Miguel Sofer <msofer@users.sf.net>
+ * generic/tclExecute.c:
+ * tests/nre.test: Renamed BottomData to TEBCdata, so that the name
+ refers to what it is rather than to its storage location.
+
* generic/tclBasic.c: Renamed struct TEOV_callback to
* generic/tclCompExpr.c: the more descriptive NRE_callback.
* generic/tclCompile.c:
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index 5586506..6703d43 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -168,28 +168,28 @@ static BuiltinFunc const tclBuiltinFuncTable[] = {
* Minimal data required to fully reconstruct the execution state.
*/
-typedef struct BottomData {
+typedef struct TEBCdata {
ByteCode *codePtr; /* Constant until the BC returns */
/* -----------------------------------------*/
- struct BottomData *expanded;/* NULL if unchanged, pointer to the succesor
+ struct TEBCdata *expanded;/* NULL if unchanged, pointer to the succesor
* if it was expanded */
const unsigned char *pc; /* These fields are used on return TO this */
ptrdiff_t *catchTop; /* this level: they record the state when a */
int cleanup; /* new codePtr was received for NR */
Tcl_Obj *auxObjList; /* execution. */
int checkInterp;
-} BottomData;
+} TEBCdata;
-#define NR_YIELD(invoke) \
+#define TEBC_YIELD() \
esPtr->tosPtr = tosPtr; \
- BP->pc = pc; \
- BP->cleanup = cleanup; \
- TclNRAddCallback(interp, TEBCresume, BP, \
- INT2PTR(invoke), NULL, NULL)
+ TD->pc = pc; \
+ TD->cleanup = cleanup; \
+ TclNRAddCallback(interp, TEBCresume, TD, \
+ INT2PTR(1), NULL, NULL)
-#define NR_DATA_DIG() \
- pc = BP->pc; \
- cleanup = BP->cleanup; \
+#define TEBC_DATA_DIG() \
+ pc = TD->pc; \
+ cleanup = TD->cleanup; \
tosPtr = esPtr->tosPtr
@@ -1910,7 +1910,7 @@ TclIncrObj(
*
*----------------------------------------------------------------------
*/
-#define bcFramePtr ((CmdFrame *) (BP + 1))
+#define bcFramePtr ((CmdFrame *) (TD + 1))
#define initCatchTop (((ptrdiff_t *) (bcFramePtr + 1)) - 1)
#define initTosPtr ((Tcl_Obj **) (initCatchTop+codePtr->maxExceptDepth))
#define esPtr (iPtr->execEnvPtr->execStackPtr)
@@ -1921,8 +1921,8 @@ TclNRExecuteByteCode(
ByteCode *codePtr) /* The bytecode sequence to interpret. */
{
Interp *iPtr = (Interp *) interp;
- BottomData *BP;
- int size = sizeof(BottomData) + sizeof(CmdFrame) +
+ TEBCdata *TD;
+ int size = sizeof(TEBCdata) + sizeof(CmdFrame) +
+ (codePtr->maxStackDepth + codePtr->maxExceptDepth)
*(sizeof(Tcl_Obj *));
int numWords = (size + sizeof(Tcl_Obj *) - 1)/sizeof(Tcl_Obj *);
@@ -1934,9 +1934,9 @@ TclNRExecuteByteCode(
codePtr->refCount++;
/*
- * Reserve the stack, setup the BottomPtr and CallFrame
+ * Reserve the stack, setup the TEBCdataPtr (TD) and CallFrame
*
- * The execution uses a unified stack: first a BottomData, immediately
+ * The execution uses a unified stack: first a TEBCdata, immediately
* above it a CmdFrame, then the catch stack, then the execution stack.
*
* Make sure the catch stack is large enough to hold the maximum number of
@@ -1945,20 +1945,20 @@ TclNRExecuteByteCode(
* execution stack is large enough to execute this ByteCode.
*/
- BP = (BottomData *) GrowEvaluationStack(iPtr->execEnvPtr, numWords, 0);
+ TD = (TEBCdata *) GrowEvaluationStack(iPtr->execEnvPtr, numWords, 0);
esPtr->tosPtr = initTosPtr;
- BP->codePtr = codePtr;
- BP->expanded = NULL;
- BP->pc = codePtr->codeStart;
- BP->catchTop = initCatchTop;
- BP->cleanup = 0;
- BP->auxObjList = NULL;
- BP->checkInterp = 0;
+ TD->codePtr = codePtr;
+ TD->expanded = NULL;
+ TD->pc = codePtr->codeStart;
+ TD->catchTop = initCatchTop;
+ TD->cleanup = 0;
+ TD->auxObjList = NULL;
+ TD->checkInterp = 0;
/*
* TIP #280: Initialize the frame. Do not push it yet: it will be pushed
- * every time that we call out from this BP, popped when we return to it.
+ * every time that we call out from this TD, popped when we return to it.
*/
bcFramePtr->type = ((codePtr->flags & TCL_BYTECODE_PRECOMPILED)
@@ -1985,9 +1985,9 @@ TclNRExecuteByteCode(
* - bytecode execution
*/
- TclNRAddCallback(interp, TEBCreturn, BP, NULL,
+ TclNRAddCallback(interp, TEBCreturn, TD, NULL,
NULL, NULL);
- TclNRAddCallback(interp, TEBCresume, BP,
+ TclNRAddCallback(interp, TEBCresume, TD,
/*resume*/ INT2PTR(0), NULL, NULL);
return TCL_OK;
@@ -1999,16 +1999,16 @@ TEBCreturn(
Tcl_Interp *interp,
int result)
{
- BottomData *BP = data[0];
- ByteCode *codePtr = BP->codePtr;
+ TEBCdata *TD = data[0];
+ ByteCode *codePtr = TD->codePtr;
if (--codePtr->refCount <= 0) {
TclCleanupByteCode(codePtr);
}
- while (BP->expanded) {
- BP = BP->expanded;
+ while (TD->expanded) {
+ TD = TD->expanded;
}
- TclStackFree(interp, BP); /* free my stack */
+ TclStackFree(interp, TD); /* free my stack */
return result;
}
@@ -2036,7 +2036,6 @@ TEBCresume(
/*
* Bottom of allocated stack holds the NR data
*/
- /* NR_TEBC */
/*
* Constants: variables that do not change during the execution, used
@@ -2062,11 +2061,11 @@ TEBCresume(
* used too frequently
*/
- BottomData *BP = data[0];
-#define auxObjList (BP->auxObjList)
-#define catchTop (BP->catchTop)
-#define codePtr (BP->codePtr)
-#define checkInterp (BP->checkInterp)
+ TEBCdata *TD = data[0];
+#define auxObjList (TD->auxObjList)
+#define catchTop (TD->catchTop)
+#define codePtr (TD->codePtr)
+#define checkInterp (TD->checkInterp)
/* Indicates when a check of interp readyness
* is necessary. Set by CACHE_STACK_INFO() */
@@ -2105,7 +2104,7 @@ TEBCresume(
traceInstructions = (tclTraceExec == 3);
#endif
- NR_DATA_DIG();
+ TEBC_DATA_DIG();
#ifdef TCL_COMPILE_DEBUG
if (!data[1] && (tclTraceExec >= 2)) {
@@ -2686,17 +2685,17 @@ TEBCresume(
length = objc + (codePtr->maxStackDepth - TclGetInt4AtPtr(pc+1));
DECACHE_STACK_INFO();
moved = GrowEvaluationStack(iPtr->execEnvPtr, length, 1)
- - (Tcl_Obj **) BP;
+ - (Tcl_Obj **) TD;
if (moved) {
/*
* Change the global data to point to the new stack: move the
- * bottomPtr, recompute the position of every other
+ * TEBCdataPtr TD, recompute the position of every other
* stack-allocated parameter, update the stack pointers.
*/
esPtr = iPtr->execEnvPtr->execStackPtr;
- BP->expanded = (BottomData *) (((Tcl_Obj **)BP) + moved);
- BP = BP->expanded;
+ TD->expanded = (TEBCdata *) (((Tcl_Obj **)TD) + moved);
+ TD = TD->expanded;
catchTop += moved;
tosPtr += moved;
@@ -2725,7 +2724,7 @@ TEBCresume(
CACHE_STACK_INFO();
cleanup = 1;
pc++;
- NR_YIELD(1);
+ TEBC_YIELD();
return TclNRExecuteByteCode(interp, newCodePtr);
}
@@ -2740,7 +2739,7 @@ TEBCresume(
cleanup = 1;
pc += 1;
- NR_YIELD(1);
+ TEBC_YIELD();
return TclNREvalObjEx(interp, OBJ_AT_TOS, 0, NULL, 0);
case INST_INVOKE_EXPANDED:
@@ -2811,7 +2810,7 @@ TEBCresume(
DECACHE_STACK_INFO();
pc += pcAdjustment;
- NR_YIELD(1);
+ TEBC_YIELD();
return TclNREvalObjv(interp, objc, objv,
TCL_EVAL_NOERR, NULL);
@@ -6418,12 +6417,6 @@ TEBCresume(
CLANG_ASSERT(bcFramePtr);
}
- /*
- * Store the previous bottomPtr for returning to it, then free all
- * resources used by this bytecode and process callbacks until you return
- * to the previous bytecode (if any).
- */
-
iPtr->cmdFramePtr = bcFramePtr->nextPtr;
return result;
}
diff --git a/tests/nre.test b/tests/nre.test
index 2fe5825..c0d0aaa 100644
--- a/tests/nre.test
+++ b/tests/nre.test
@@ -302,7 +302,7 @@ test nre-7.8 {bug #2910748: switch out of stale BC is not nre-aware} -setup {
test nre-8.1 {nre and {*}} -body {
# force an expansion that grows the evaluation stack, check that nre
- # adapts the bottomPtr. This crashes on failure.
+ # adapts the TEBCdataPtr. This crashes on failure.
proc inner {} {
set long [lrepeat 1000000 1]