diff options
author | dgp <dgp@users.sourceforge.net> | 2013-09-11 05:07:52 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2013-09-11 05:07:52 (GMT) |
commit | 23bb5a2c20bd07e4b66ad4293fb927128e9e975b (patch) | |
tree | f87b6d8500e662ad5e4efb9293f1597a1eaa30ea | |
parent | 7eabd2838a8210a30da24672179294fd7d8b1b0a (diff) | |
download | tcl-23bb5a2c20bd07e4b66ad4293fb927128e9e975b.zip tcl-23bb5a2c20bd07e4b66ad4293fb927128e9e975b.tar.gz tcl-23bb5a2c20bd07e4b66ad4293fb927128e9e975b.tar.bz2 |
Eliminate another surplus storage field. Make a(n ab)use of the existing
JumpFixup fields instead.
-rw-r--r-- | generic/tclCompExpr.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/generic/tclCompExpr.c b/generic/tclCompExpr.c index 0021323..4afb069 100644 --- a/generic/tclCompExpr.c +++ b/generic/tclCompExpr.c @@ -490,9 +490,6 @@ typedef struct JumpList { JumpFixup jump; /* Pass this argument to matching calls of * TclEmitForwardJump() and * TclFixupForwardJump(). */ - int convert; /* Temporary storage used to compute whether - * numeric conversion will be needed following - * the operator we're compiling. */ struct JumpList *next; /* Point to next item on the stack */ } JumpList; @@ -2318,7 +2315,9 @@ CompileExprTree( TclEmitForwardJump(envPtr, TCL_UNCONDITIONAL_JUMP, &jumpPtr->next->jump); TclAdjustStackDepth(-1, envPtr); - jumpPtr->convert = convert; + if (convert) { + jumpPtr->jump.jumpType = TCL_TRUE_JUMP; + } convert = 1; break; case AND: @@ -2368,6 +2367,10 @@ CompileExprTree( break; case COLON: CLANG_ASSERT(jumpPtr); + if (jumpPtr->jump.jumpType == TCL_TRUE_JUMP) { + jumpPtr->jump.jumpType = TCL_FALSE_JUMP; + convert = 1; + } if (TclFixupForwardJump(envPtr, &jumpPtr->next->jump, (envPtr->codeNext - envPtr->codeStart) - jumpPtr->next->jump.codeOffset, 127)) { @@ -2375,7 +2378,6 @@ CompileExprTree( } TclFixupForwardJump(envPtr, &jumpPtr->jump, jumpPtr->next->jump.codeOffset + 2 -jumpPtr->jump.codeOffset, 127); - convert |= jumpPtr->convert; freePtr = jumpPtr; jumpPtr = jumpPtr->next; TclStackFree(interp, freePtr); |