From 6fa63a0ce2b2aa31a343ca0841b57895d11b5754 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Sun, 22 Feb 2015 21:32:08 +0000 Subject: 34606: fix up nested arithmetic substitution Arithmetic within a parameter substitution is a special case that needs fixing with the introduction of the new Inparmath token. Add test. --- Src/subst.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'Src') diff --git a/Src/subst.c b/Src/subst.c index 176a004ac..f52bcdfc8 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -2217,12 +2217,28 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags) */ idbeg = s; if ((subexp = (inbrace && s[-1] && isstring(*s) && - (s[1] == Inbrace || s[1] == Inpar)))) { + (s[1] == Inbrace || s[1] == Inpar || s[1] == Inparmath)))) { int sav; int quoted = *s == Qstring; + int outtok; val = s++; - skipparens(*s, *s == Inpar ? Outpar : Outbrace, &s); + switch (*s) { + case Inbrace: + outtok = Outbrace; + break; + case Inpar: + outtok = Outpar; + break; + case Inparmath: + outtok = Outparmath; + break; + default: + /* "Can't Happen" (TM) */ + DPUTS(1, "Nested substitution: This Can't Happen (TM)"); + return NULL; + } + skipparens(*s, outtok, &s); sav = *s; *s = 0; /* -- cgit 1.4.1