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:
Akim Demaille
2022-09-04 08:34:11 +02:00
parent eb83487606
commit 6376364120
2 changed files with 20 additions and 4 deletions

View File

@@ -369,5 +369,20 @@ AT_BISON_CHECK([[input1.y]], [], [],
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