aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2024-02-15 08:47:44 +1000
committerSteve Bennett <steveb@workware.net.au>2024-02-15 08:47:44 +1000
commitd1612743af1e84d5eafd4f3ee5ac5ebeaab12d4e (patch)
treec270669e0d9d1bc3dcc8a55b03eeb3b6348cbf5e
parent67e32c82fa2248a70a02d0828b8785b9a25692b0 (diff)
downloadjimtcl-d1612743af1e84d5eafd4f3ee5ac5ebeaab12d4e.zip
jimtcl-d1612743af1e84d5eafd4f3ee5ac5ebeaab12d4e.tar.gz
jimtcl-d1612743af1e84d5eafd4f3ee5ac5ebeaab12d4e.tar.bz2
subst: don't ignore vars after first failed var
If $ is followed by something that isn't a variable name, previously all subsequent variables were being ignored. Fixes #296 Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r--jim.c8
-rw-r--r--tests/subst.test5
2 files changed, 10 insertions, 3 deletions
diff --git a/jim.c b/jim.c
index 3134b83..6520670 100644
--- a/jim.c
+++ b/jim.c
@@ -109,7 +109,7 @@
/* Maximum size of an integer */
#define JIM_INTEGER_SPACE 24
-#if defined(DEBUG_SHOW_SCRIPT) || defined(DEBUG_SHOW_SCRIPT_TOKENS) || defined(JIM_DEBUG_COMMAND)
+#if defined(DEBUG_SHOW_SCRIPT) || defined(DEBUG_SHOW_SCRIPT_TOKENS) || defined(JIM_DEBUG_COMMAND) || defined(DEBUG_SHOW_SUBST)
static const char *jim_tt_name(int type);
#endif
@@ -9273,7 +9273,7 @@ static int JimParseExprOperator(struct JimParserCtx *pc)
return JIM_OK;
}
-#if (defined(DEBUG_SHOW_SCRIPT) || defined(DEBUG_SHOW_SCRIPT_TOKENS) || defined(JIM_DEBUG_COMMAND)) && !defined(JIM_BOOTSTRAP)
+#if (defined(DEBUG_SHOW_SCRIPT) || defined(DEBUG_SHOW_SCRIPT_TOKENS) || defined(JIM_DEBUG_COMMAND) || defined(DEBUG_SHOW_SUBST)) && !defined(JIM_BOOTSTRAP)
static const char *jim_tt_name(int type)
{
static const char * const tt_names[JIM_TT_EXPR_OP] =
@@ -11736,7 +11736,9 @@ static void JimParseSubst(struct JimParserCtx *pc, int flags)
}
/* Not a var, so treat as a string */
pc->tstart = pc->p;
- flags |= JIM_SUBST_NOVAR;
+ /* Skip this $ */
+ pc->p++;
+ pc->len--;
}
while (pc->len) {
if (*pc->p == '$' && !(flags & JIM_SUBST_NOVAR)) {
diff --git a/tests/subst.test b/tests/subst.test
index 5128a99..5450130 100644
--- a/tests/subst.test
+++ b/tests/subst.test
@@ -176,6 +176,11 @@ test subst-12.3 {variable inside [] with -noc} {
subst -noc {x[join $a]y}
} {x[join 1]y}
+test subst-12.4 {variable after not variable} {
+ set a 1
+ subst -noc {$\[ $a}
+} {$[ 1}
+
# cleanup
testreport