diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-01-18 15:39:21 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-01-18 15:39:21 (GMT) |
| commit | f97560a94963b378ccc5b75e5dbc2949eca30b9f (patch) | |
| tree | 9cab1970a2554690061d6b0cb437de08f09ffffa /generic/tclExecute.c | |
| parent | 01a48e2369782044a30d922c5f8ed52262ef4fcd (diff) | |
| parent | c3bcd951b8dd8bf57202915b9d914bcddc73b9bb (diff) | |
| download | tcl-f97560a94963b378ccc5b75e5dbc2949eca30b9f.zip tcl-f97560a94963b378ccc5b75e5dbc2949eca30b9f.tar.gz tcl-f97560a94963b378ccc5b75e5dbc2949eca30b9f.tar.bz2 | |
Fix [e9a2715d91]: Incompatible Tcl_GetRange(). From now on (unofficially) the last function argument can be set to -1 (or any negative value) meaning 'end'.
Diffstat (limited to 'generic/tclExecute.c')
| -rw-r--r-- | generic/tclExecute.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c index c39bc21..a3b0401 100644 --- a/generic/tclExecute.c +++ b/generic/tclExecute.c @@ -5609,7 +5609,11 @@ TEBCresume( goto gotError; } - objResultPtr = Tcl_GetRange(OBJ_AT_DEPTH(2), fromIdx, toIdx); + if (toIdx < 0) { + TclNewObj(objResultPtr); + } else { + objResultPtr = Tcl_GetRange(OBJ_AT_DEPTH(2), fromIdx, toIdx); + } TRACE_APPEND(("\"%.30s\"\n", O2S(objResultPtr))); NEXT_INST_V(1, 3, 1); @@ -5653,11 +5657,14 @@ TEBCresume( fromIdx = TCL_INDEX_START; } if (fromIdx == TCL_INDEX_AFTER) { + goto emptyRange; + } + fromIdx = TclIndexDecode(fromIdx, length - 1); + if (toIdx >= 0) { + objResultPtr = Tcl_GetRange(valuePtr, fromIdx, toIdx); + } else { emptyRange: TclNewObj(objResultPtr); - } else { - fromIdx = TclIndexDecode(fromIdx, length - 1); - objResultPtr = Tcl_GetRange(valuePtr, fromIdx, toIdx); } TRACE_APPEND(("%.30s\n", O2S(objResultPtr))); NEXT_INST_F(9, 1, 1); |
