From 1a0bd10d3d09ad9f94d351f6014dc0bdf4a23b43 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Tue, 13 Feb 2024 19:57:46 -0500 Subject: [PATCH] Tweak interp rules --- parse.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/parse.c b/parse.c index a955ce7..e0690ff 100644 --- a/parse.c +++ b/parse.c @@ -884,12 +884,23 @@ PARSER(parse_string) { } else if (match(&pos, "'")) { open_quote = '\'', close_quote = '\''; } else if (match(&pos, "$")) { - open_interp = *(pos++); - close_interp = closing[(int)open_interp]; - if (*pos == close_interp) ++pos; - open_quote = *pos; - close_quote = closing[(int)*pos] ? closing[(int)*pos] : *pos; - ++pos; + if (strspn(pos, (char[]){*pos, 0}) >= 2) { + // Disable interp using a double opener: $;;...; or $``text` + open_quote = *pos; + pos += 2; + } else { + // $@"...." or $()"....." + open_interp = *pos; + ++pos; + close_interp = closing[(int)open_interp]; + if (close_interp && *pos == close_interp) + ++pos; + open_quote = *pos; + ++pos; + } + close_quote = closing[(int)open_quote] ? closing[(int)open_quote] : open_quote; + if (open_interp == close_quote) + open_interp = '\0'; } else { return NULL; }