Skip to content

Commit fa358f4

Browse files
committed
verilog: skip compiler directives in enum definition
Signed-off-by: Hiroo HAYASHI <24754036+hirooih@users.noreply.github.com>
1 parent adcc121 commit fa358f4

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

Units/parser-verilog.r/systemverilog-github4056.d/expected.tags

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,30 @@ my_enum input.sv /^} my_enum;$/;" T
22
OTHER_VAL1 input.sv /^ OTHER_VAL1,$/;" c typedef:my_enum
33
OTHER_VAL2 input.sv /^ OTHER_VAL2$/;" c typedef:my_enum
44
e input.sv /^my_enum e;$/;" r
5+
O input.sv /^class O;$/;" C
6+
complex0_s input.sv /^ } [1:0] complex0_s, complex1_s;$/;" S class:O
7+
a input.sv /^ logic a,b ;$/;" w struct:O.complex0_s
8+
b input.sv /^ logic a,b ;$/;" w struct:O.complex0_s
9+
s0 input.sv /^ logic [15:0] [7:0] s0 , s1;$/;" w struct:O.complex0_s
10+
s1 input.sv /^ logic [15:0] [7:0] s0 , s1;$/;" w struct:O.complex0_s
11+
struct0_s input.sv /^ } [15:0] [7:0] struct0_s, struct1_s;$/;" w struct:O.complex0_s
12+
struct1_s input.sv /^ } [15:0] [7:0] struct0_s, struct1_s;$/;" w struct:O.complex0_s
13+
enum00_e input.sv /^ enum user_t [1:0] { FOO, BAR, BAZ } [3:0] enum00_e, enum01_e ;$/;" w struct:O.complex0_s
14+
enum01_e input.sv /^ enum user_t [1:0] { FOO, BAR, BAZ } [3:0] enum00_e, enum01_e ;$/;" w struct:O.complex0_s
15+
enum10_e input.sv /^ enum logic unsigned{A,B,C}[1:0]enum10_e,enum11_e;$/;" w struct:O.complex0_s
16+
enum11_e input.sv /^ enum logic unsigned{A,B,C}[1:0]enum10_e,enum11_e;$/;" w struct:O.complex0_s
17+
d input.sv /^ bit[7:0][1:0]d,e;$/;" w struct:O.complex0_s
18+
e input.sv /^ bit[7:0][1:0]d,e;$/;" w struct:O.complex0_s
19+
complex1_s input.sv /^ } [1:0] complex0_s, complex1_s;$/;" S class:O
20+
a input.sv /^ logic a,b ;$/;" w struct:O.complex1_s
21+
b input.sv /^ logic a,b ;$/;" w struct:O.complex1_s
22+
s0 input.sv /^ logic [15:0] [7:0] s0 , s1;$/;" w struct:O.complex1_s
23+
s1 input.sv /^ logic [15:0] [7:0] s0 , s1;$/;" w struct:O.complex1_s
24+
struct0_s input.sv /^ } [15:0] [7:0] struct0_s, struct1_s;$/;" w struct:O.complex1_s
25+
struct1_s input.sv /^ } [15:0] [7:0] struct0_s, struct1_s;$/;" w struct:O.complex1_s
26+
enum00_e input.sv /^ enum user_t [1:0] { FOO, BAR, BAZ } [3:0] enum00_e, enum01_e ;$/;" w struct:O.complex1_s
27+
enum01_e input.sv /^ enum user_t [1:0] { FOO, BAR, BAZ } [3:0] enum00_e, enum01_e ;$/;" w struct:O.complex1_s
28+
enum10_e input.sv /^ enum logic unsigned{A,B,C}[1:0]enum10_e,enum11_e;$/;" w struct:O.complex1_s
29+
enum11_e input.sv /^ enum logic unsigned{A,B,C}[1:0]enum10_e,enum11_e;$/;" w struct:O.complex1_s
30+
d input.sv /^ bit[7:0][1:0]d,e;$/;" w struct:O.complex1_s
31+
e input.sv /^ bit[7:0][1:0]d,e;$/;" w struct:O.complex1_s

Units/parser-verilog.r/systemverilog-github4056.d/input.sv

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,25 @@ typedef enum {
88
} my_enum;
99

1010
my_enum e;
11+
12+
// from Units/parser-verilog.r/systemverilog-struct.d/input.sv
13+
class O;
14+
// complex struct
15+
struct packed signed {
16+
`include "test1.txt"
17+
logic a,b ;
18+
logic [15:0] [7:0] s0 , s1;
19+
`include "test1.txt"
20+
struct {
21+
`include "test1.txt"
22+
logic x, y; // not emitted
23+
`include "test1.txt"
24+
} [15:0] [7:0] struct0_s, struct1_s;
25+
`include "test1.txt"
26+
enum user_t [1:0] { FOO, BAR, BAZ } [3:0] enum00_e, enum01_e ;
27+
`include "test1.txt"
28+
enum logic unsigned{A,B,C}[1:0]enum10_e,enum11_e;
29+
bit[7:0][1:0]d,e;
30+
`include "test1.txt"
31+
} [1:0] complex0_s, complex1_s;
32+
endclass

parsers/verilog.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1653,6 +1653,9 @@ static int pushMembers (tokenInfo* token, int c)
16531653
{
16541654
verilogKind kind = K_UNDEFINED; // set kind of context for processType()
16551655
bool not_used;
1656+
c = skipMacro (c, token);
1657+
if (c == '}')
1658+
break; // end of struct/union
16561659
if (!isWordToken (c))
16571660
{
16581661
VERBOSE ("Unexpected input: %c\n", c);

0 commit comments

Comments
 (0)