diff options
author | dgp <dgp@users.sourceforge.net> | 2019-02-14 20:05:11 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2019-02-14 20:05:11 (GMT) |
commit | a475e0b1ee3d2716a524c722064a7e3e404d3e38 (patch) | |
tree | 41d255a37c3dbe955fb413564812575b6bdd4c13 /generic/tclCompCmdsSZ.c | |
parent | cc6faa155b3ac525cab5b017159361b62c4a9c6a (diff) | |
parent | 5fd6fc8ae4d88e17f66c93e521c89fba72b77fd4 (diff) | |
download | tcl-a475e0b1ee3d2716a524c722064a7e3e404d3e38.zip tcl-a475e0b1ee3d2716a524c722064a7e3e404d3e38.tar.gz tcl-a475e0b1ee3d2716a524c722064a7e3e404d3e38.tar.bz2 |
merge 8.7
Diffstat (limited to 'generic/tclCompCmdsSZ.c')
-rw-r--r-- | generic/tclCompCmdsSZ.c | 49 |
1 files changed, 23 insertions, 26 deletions
diff --git a/generic/tclCompCmdsSZ.c b/generic/tclCompCmdsSZ.c index c608017..72cb6f2 100644 --- a/generic/tclCompCmdsSZ.c +++ b/generic/tclCompCmdsSZ.c @@ -1003,7 +1003,7 @@ TclCompileStringRangeCmd( * Parse the two indices. */ - if (TclGetIndexFromToken(fromTokenPtr, TCL_INDEX_START, TCL_INDEX_AFTER, + if (TclGetIndexFromToken(fromTokenPtr, TCL_INDEX_START, TCL_INDEX_NONE, &idx1) != TCL_OK) { goto nonConstantIndices; } @@ -1012,14 +1012,14 @@ TclCompileStringRangeCmd( * the string the same as the start of the string. */ - if (idx1 == TCL_INDEX_AFTER) { + if (idx1 == TCL_INDEX_NONE) { /* [string range $s end+1 $last] must be empty string */ OP( POP); PUSH( ""); return TCL_OK; } - if (TclGetIndexFromToken(toTokenPtr, TCL_INDEX_BEFORE, TCL_INDEX_END, + if (TclGetIndexFromToken(toTokenPtr, TCL_INDEX_NONE, TCL_INDEX_END, &idx2) != TCL_OK) { goto nonConstantIndices; } @@ -1027,7 +1027,7 @@ TclCompileStringRangeCmd( * Token parsed as an index expression. We treat all indices after * the string the same as the end of the string. */ - if (idx2 == TCL_INDEX_BEFORE) { + if (idx2 == TCL_INDEX_NONE) { /* [string range $s $first -1] must be empty string */ OP( POP); PUSH( ""); @@ -1077,7 +1077,7 @@ TclCompileStringReplaceCmd( * Check for first index known and useful at compile time. */ tokenPtr = TokenAfter(valueTokenPtr); - if (TclGetIndexFromToken(tokenPtr, TCL_INDEX_BEFORE, TCL_INDEX_AFTER, + if (TclGetIndexFromToken(tokenPtr, TCL_INDEX_START, TCL_INDEX_NONE, &first) != TCL_OK) { goto genericReplace; } @@ -1086,7 +1086,7 @@ TclCompileStringReplaceCmd( * Check for last index known and useful at compile time. */ tokenPtr = TokenAfter(tokenPtr); - if (TclGetIndexFromToken(tokenPtr, TCL_INDEX_BEFORE, TCL_INDEX_AFTER, + if (TclGetIndexFromToken(tokenPtr, TCL_INDEX_NONE, TCL_INDEX_END, &last) != TCL_OK) { goto genericReplace; } @@ -1105,8 +1105,8 @@ TclCompileStringReplaceCmd( * compile direct to bytecode implementing the no-op. */ - if ((last == TCL_INDEX_BEFORE) /* Know (last < 0) */ - || (first == TCL_INDEX_AFTER) /* Know (first > end) */ + if ((last == TCL_INDEX_NONE) /* Know (last < 0) */ + || (first == TCL_INDEX_NONE) /* Know (first > end) */ /* * Tricky to determine when runtime (last < first) can be @@ -1114,20 +1114,17 @@ TclCompileStringReplaceCmd( * cases... * * (first <= TCL_INDEX_END) && - * (last == TCL_INDEX_AFTER) => cannot tell REJECT * (last <= TCL_INDEX END) && (last < first) => ACCEPT * else => cannot tell REJECT */ || ((first <= TCL_INDEX_END) && (last <= TCL_INDEX_END) && (last < first)) /* Know (last < first) */ /* - * (first == TCL_INDEX_BEFORE) && - * (last == TCL_INDEX_AFTER) => (first < last) REJECT + * (first == TCL_INDEX_NONE) && * (last <= TCL_INDEX_END) => cannot tell REJECT * else => (first < last) REJECT * * else [[first >= TCL_INDEX_START]] && - * (last == TCL_INDEX_AFTER) => cannot tell REJECT * (last <= TCL_INDEX_END) => cannot tell REJECT * else [[last >= TCL_INDEX START]] && (last < first) => ACCEPT */ @@ -1160,34 +1157,34 @@ TclCompileStringReplaceCmd( * (first <= end) * * The encoded indices (first <= TCL_INDEX END) and - * (first == TCL_INDEX_BEFORE) always meets this condition, but + * (first == TCL_INDEX_NONE) always meets this condition, but * any other encoded first index has some list for which it fails. * * We also need, second: * * (last >= 0) * - * The encoded indices (last >= TCL_INDEX_START) and - * (last == TCL_INDEX_AFTER) always meet this condition but any - * other encoded last index has some list for which it fails. + * The encoded index (last >= TCL_INDEX_START) always meet this + * condition but any other encoded last index has some list for + * which it fails. * * Finally we need, third: * * (first <= last) * * Considered in combination with the constraints we already have, - * we see that we can proceed when (first == TCL_INDEX_BEFORE) - * or (last == TCL_INDEX_AFTER). These also permit simplification - * of the prefix|replace|suffix construction. The other constraints, - * though, interfere with getting a guarantee that first <= last. + * we see that we can proceed when (first == TCL_INDEX_NONE). + * These also permit simplification of the prefix|replace|suffix + * construction. The other constraints, though, interfere with + * getting a guarantee that first <= last. */ - if ((first == TCL_INDEX_BEFORE) && (last >= TCL_INDEX_START)) { + if ((first == TCL_INDEX_START) && (last >= TCL_INDEX_START)) { /* empty prefix */ tokenPtr = TokenAfter(tokenPtr); CompileWord(envPtr, tokenPtr, interp, 4); OP4( REVERSE, 2); - if (last == TCL_INDEX_AFTER) { + if (last == INT_MAX) { OP( POP); /* Pop original */ } else { OP44( STR_RANGE_IMM, last + 1, TCL_INDEX_END); @@ -1196,7 +1193,7 @@ TclCompileStringReplaceCmd( return TCL_OK; } - if ((last == TCL_INDEX_AFTER) && (first <= TCL_INDEX_END)) { + if ((last == TCL_INDEX_NONE) && (first <= TCL_INDEX_END)) { OP44( STR_RANGE_IMM, 0, first-1); tokenPtr = TokenAfter(tokenPtr); CompileWord(envPtr, tokenPtr, interp, 4); @@ -1213,10 +1210,10 @@ TclCompileStringReplaceCmd( * are harmless when they are replaced by another empty string. */ - if ((first == TCL_INDEX_BEFORE) || (first == TCL_INDEX_START)) { + if (first == TCL_INDEX_START) { /* empty prefix - build suffix only */ - if ((last == TCL_INDEX_END) || (last == TCL_INDEX_AFTER)) { + if (last == TCL_INDEX_END) { /* empty suffix too => empty result */ OP( POP); /* Pop original */ PUSH ( ""); @@ -1225,7 +1222,7 @@ TclCompileStringReplaceCmd( OP44( STR_RANGE_IMM, last + 1, TCL_INDEX_END); return TCL_OK; } else { - if ((last == TCL_INDEX_END) || (last == TCL_INDEX_AFTER)) { + if (last == TCL_INDEX_END) { /* empty suffix - build prefix only */ OP44( STR_RANGE_IMM, 0, first-1); return TCL_OK; |