summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiguel Sofer <miguel.sofer@gmail.com>2015-11-10 02:27:55 (GMT)
committerMiguel Sofer <miguel.sofer@gmail.com>2015-11-10 02:27:55 (GMT)
commit3ea70c5bbb1dccef126ec75cfb291952527559b1 (patch)
tree9e84525a1e799741be8bd9cf0a0b8111018cafc9
parent250af87c9a8922c8d05c66734d551c0267b98a30 (diff)
downloadtcl-mig_tmp.zip
tcl-mig_tmp.tar.gz
tcl-mig_tmp.tar.bz2
update the range data for code that was moved to the endmig_tmp
-rw-r--r--generic/tclOptimize.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/generic/tclOptimize.c b/generic/tclOptimize.c
index d77e827..5c72460 100644
--- a/generic/tclOptimize.c
+++ b/generic/tclOptimize.c
@@ -227,7 +227,7 @@ Initialize(
}
}
- //MoveUnreachable(envPtr, padPtr);
+ MoveUnreachable(envPtr, padPtr);
/*
* Now insure that all remaining targets are marked as reachable, and also
@@ -1024,6 +1024,13 @@ MoveUnreachable(
}
break;
+ case INST_DONE:
+ case INST_TAILCALL:
+ case INST_CONTINUE:
+ case INST_BREAK:
+ fixend = 0;
+ break;
+
case INST_RETURN_CODE_BRANCH:
/* let's hope there was no 1-jump to OK code! */
nextpc += 10;
@@ -1048,7 +1055,7 @@ MoveUnreachable(
/*
* The code has been moved, jump targets are all absolute. Pass over the
- * moved code, updating jump targets and setting.
+ * moved code, updating jump targets to the correct (relative) value.
*/
for (pc = codeSize;
@@ -1082,7 +1089,7 @@ MoveUnreachable(
padPtr->codeSize = envPtr->codeNext - envPtr->codeStart;
- /* Update all range targets */
+ /* Update all ranges and targets */
imax = envPtr->exceptArrayNext;
for (i = 0 ; i < imax; i++) {
@@ -1097,6 +1104,9 @@ MoveUnreachable(
rangePtr->continueOffset = FOLLOW(NEW[rangePtr->continueOffset]);
}
}
+ target = rangePtr->codeOffset + rangePtr->numCodeBytes;
+ rangePtr->codeOffset = NEW[rangePtr->codeOffset];
+ rangePtr->numCodeBytes = NEW[target]-rangePtr->codeOffset;
}
}