diff options
Diffstat (limited to 'generic/tclExecute.c')
-rw-r--r-- | generic/tclExecute.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c index 7646229..3e6e094 100644 --- a/generic/tclExecute.c +++ b/generic/tclExecute.c @@ -2486,17 +2486,32 @@ ExecuteByteCode( objResultPtr = OBJ_AT_TOS; TRACE_WITH_OBJ(("=> "), objResultPtr); NEXT_INST_F(1, 0, 1); - + case INST_UNDER: + objResultPtr = OBJ_UNDER_TOS; + TRACE_WITH_OBJ(("=> "), objResultPtr); + NEXT_INST_F(1, 0, 1); case INST_OVER: opnd = TclGetUInt4AtPtr(pc+1); objResultPtr = OBJ_AT_DEPTH(opnd); TRACE_WITH_OBJ(("=> "), objResultPtr); NEXT_INST_F(5, 0, 1); - case INST_REVERSE: { + { Tcl_Obj **a, **b; + case INST_EXCH: + TRACE(("\"%.20s\" \"%.20s\" => ", + O2S(OBJ_UNDER_TOS), O2S(OBJ_AT_TOS))); + tmpPtr = OBJ_AT_TOS; + OBJ_AT_TOS = OBJ_UNDER_TOS; + OBJ_UNDER_TOS = tmpPtr; + TRACE_APPEND(("\"%.20s\" \"%.20s\"", + O2S(OBJ_UNDER_TOS), O2S(OBJ_AT_TOS))); + NEXT_INST_F(1, 0, 0); + + case INST_REVERSE: opnd = TclGetUInt4AtPtr(pc+1); + TRACE(("%u\n", opnd)); a = tosPtr-(opnd-1); b = tosPtr; while (a<b) { @@ -4315,7 +4330,7 @@ ExecuteByteCode( * list type. */ - List *listPtr = valuePtr->internalRep.twoPtrValue.ptr1; + List *listPtr = ListRepPtr(valuePtr); if (listPtr->refCount == 1) { TRACE(("\"%.30s\" %d %d => ", O2S(valuePtr), |