summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/parser.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/parser.c b/src/parser.c
index efa8060..8e40781 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -1325,10 +1325,11 @@ badsub:
 			pungetc();
 		}
 
-		if (newsyn == ARISYNTAX && subtype > VSNORMAL)
+		if (newsyn == ARISYNTAX)
 			newsyn = DQSYNTAX;
 
-		if (newsyn != synstack->syntax) {
+		if ((newsyn != synstack->syntax || synstack->innerdq) &&
+		    subtype != VSNORMAL) {
 			synstack_push(&synstack,
 				      synstack->prev ?:
 				      alloca(sizeof(*synstack)),