mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
muscles: fix handling of the "@'" escape
When we use `b4_` or `m4_` somewhere in the input, it is escaped as `b4@'_`/`m4@'_` so that the warning about unexpanded b4_foo/m4_foo macros does not fire. But in the case of muscles, the `@'` escape was not recognized, and an assertion was triggered. Reported by Han Zheng. <https://github.com/akimd/bison/issues/91> * src/muscle-tab.c (COMMON_DECODE): Handle `@'`. * tests/skeletons.at (Suspicious sequences): Check that case.
This commit is contained in:
@@ -294,10 +294,11 @@ muscle_location_grow (char const *key, location loc)
|
|||||||
case '@': \
|
case '@': \
|
||||||
switch (*++(Value)) \
|
switch (*++(Value)) \
|
||||||
{ \
|
{ \
|
||||||
case '@': obstack_sgrow (&muscle_obstack, "@" ); break; \
|
case '\'': /* Ignore "@'" */ break; \
|
||||||
case '{': obstack_sgrow (&muscle_obstack, "[" ); break; \
|
case '@': obstack_sgrow (&muscle_obstack, "@" ); break; \
|
||||||
case '}': obstack_sgrow (&muscle_obstack, "]" ); break; \
|
case '{': obstack_sgrow (&muscle_obstack, "[" ); break; \
|
||||||
default: aver (false); break; \
|
case '}': obstack_sgrow (&muscle_obstack, "]" ); break; \
|
||||||
|
default: aver (false); break; \
|
||||||
} \
|
} \
|
||||||
break; \
|
break; \
|
||||||
default: \
|
default: \
|
||||||
|
|||||||
@@ -369,5 +369,20 @@ AT_BISON_CHECK([[input1.y]], [], [],
|
|||||||
input1.tab.c:13: warning: suspicious sequence in the output: m4@&t@_poison [-Wother]
|
input1.tab.c:13: warning: suspicious sequence in the output: m4@&t@_poison [-Wother]
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
# Regression test for <https://github.com/akimd/bison/issues/91>.
|
||||||
|
AT_DATA([[input2.y]],
|
||||||
|
[[%define parse.trace {m4@&t@_foo}
|
||||||
|
%debug
|
||||||
|
%%
|
||||||
|
exp:
|
||||||
|
]])
|
||||||
|
|
||||||
|
AT_BISON_CHECK([[input2.y]], [1], [],
|
||||||
|
[[input2.y:1.1-28: warning: %define variable 'parse.trace' requires keyword values [-Wdeprecated]
|
||||||
|
input2.y:1.1-28: error: invalid value for %define Boolean variable 'parse.trace'
|
||||||
|
input2.y:2.1-6: error: %define variable 'parse.trace' redefined
|
||||||
|
input2.y:1.1-28: note: previous definition
|
||||||
|
input2.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother]
|
||||||
|
]])
|
||||||
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|||||||
Reference in New Issue
Block a user