Re: [ANN] nyacc 3.00.0 released
Matt Wette <[email protected]> Wed, 12 Nov 2025 07:46:51 -0800
| Newsgroups | gmane.lisp.guile.user |
|---|---|
| Message-ID | <[email protected]> |
On 11/12/25 1:51 AM, Janneke Nieuwenhuizen wrote:
> I found a C99 parse bug after we refactored Mes' src/display.c:
> declacing a variable as first statement of a `case' statement gives
>
> --8<---------------cut here---------------start------------->8---
> $ MES=guile ./pre-inst-env mescc switch.c
> switch.c:8: parse failed at state 623, on input "int"
> --8<---------------cut here---------------end--------------->8---
>
> See attached file. As Mes currently supports NYACC >= 1.00.2 (we should
> probably raise that requirement, for the new bootstrap we use latest
> greatest anyway to be able compile latest tcc), I've moved the
> statements inside case into a block; so there's no urgency at all from
> our side.
>
> Greetings,
> Janneke
>
Hmm. I checked. Your case statement (first one below) does not seem
to match
syntax for C99. This might be a gcc bug as it accepts with -std=c99.
The second
case statement would pass nyacc.
switch (c)
{
case 0:
int i = 3;
return 0;
case 1: {
int i = 4;
return 2;
}
}
return 1;
I'm not sure how to handle this right now. I could
kludge for your case with:
--- a/module/nyacc/lang/c99/mach.scm
+++ b/module/nyacc/lang/c99/mach.scm
@@ -719,6 +719,7 @@
(identifier ":" attribute-specifier statement
($$ `(labeled-stmt ,$1 ,$4)))
("case" constant-expression ":" statement ($$ `(case ,$2 ,$4)))
+ ("case" constant-expression ":" declaration ($$ `(case ,$2 ,$4)))
("default" ":" statement ($$ `(default ,$3))))
In the spec `label :' is followed by `statement', not `block-item'.
See https://slebok.github.io/zoo/c/c99/iso-9899-tc3/extracted/index.html
Matt