From 35849c57dca7c0ba8e6debfa9a520001f5f14560 Mon Sep 17 00:00:00 2001 From: Johannes Altmanninger Date: Fri, 2 May 2025 06:38:20 +0200 Subject: [PATCH] Explicit type for "$()" hack in parse_util_locate_cmdsub (cherry picked from commit 8abab0e2cc5dbdc9e100ba3ee43b7de91895e988) --- src/parse_util.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/parse_util.rs b/src/parse_util.rs index 32d734356..552f3224c 100644 --- a/src/parse_util.rs +++ b/src/parse_util.rs @@ -218,6 +218,10 @@ fn parse_util_locate_cmdsub( let mut last_dollar = None; let mut paran_begin = None; let mut paran_end = None; + enum Quote { + Real(char), + VirtualDouble, + } fn process_opening_quote( input: &[char], inout_is_quoted: &mut Option<&mut bool>, @@ -225,8 +229,12 @@ fn process_opening_quote( quoted_cmdsubs: &mut Vec, pos: usize, last_dollar: &mut Option, - quote: char, + quote: Quote, ) -> Option { + let quote = match quote { + Quote::Real(q) => q, + Quote::VirtualDouble => '"', + }; let q_end = quote_end(input.into(), pos, quote)?; // Found a valid closing quote. if input[q_end] == '$' { @@ -256,7 +264,7 @@ fn process_opening_quote( &mut quoted_cmdsubs, pos, &mut last_dollar, - '"', + Quote::VirtualDouble, ) .unwrap_or(input.len()); } @@ -272,7 +280,7 @@ fn process_opening_quote( &mut quoted_cmdsubs, pos, &mut last_dollar, - c, + Quote::Real(c), ) { Some(q_end) => pos = q_end, None => break, @@ -317,7 +325,7 @@ fn process_opening_quote( &mut quoted_cmdsubs, pos, &mut last_dollar, - '"', + Quote::VirtualDouble, ) { Some(q_end) => pos = q_end, None => break,