Skip to content

Commit 829854e

Browse files
authored
Merge pull request #513 from diffblue/verilog-standard
Verilog: add verilog_standardt
2 parents aa7caf5 + 433d422 commit 829854e

File tree

6 files changed

+203
-164
lines changed

6 files changed

+203
-164
lines changed

src/verilog/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ SRC = expr2verilog.cpp \
1414
verilog_preprocessor.cpp \
1515
verilog_preprocessor_lex.yy.cpp \
1616
verilog_preprocessor_tokenizer.cpp \
17+
verilog_standard.cpp \
1718
verilog_symbol_table.cpp \
1819
verilog_synthesis.cpp \
1920
verilog_typecheck.cpp \

src/verilog/scanner.l

Lines changed: 155 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -70,35 +70,35 @@ static void preprocessor()
7070
name->is_type ? TOK_TYPE_IDENTIFIER : \
7171
TOK_NON_TYPE_IDENTIFIER; \
7272
}
73-
#define SYSTEM_VERILOG_KEYWORD(x) \
74-
{ if(PARSER.mode==verilog_parsert::SYSTEM_VERILOG) \
73+
#define KEYWORD(s, x) \
74+
{ if(PARSER.mode >= verilog_standardt::s) \
7575
return x; \
7676
else \
7777
IDENTIFIER(yytext); \
7878
}
7979
#define SYSTEM_VERILOG_OPERATOR(token, text) \
80-
{ if(PARSER.mode==verilog_parsert::SYSTEM_VERILOG) \
80+
{ if(PARSER.mode >= verilog_standardt::SV2005) \
8181
return token; \
8282
else \
8383
yyverilogerror(text " is a System Verilog operator"); \
8484
}
8585
#define VL2SMV_OR_SYSTEM_VERILOG_KEYWORD(x) \
86-
{ if(PARSER.mode==verilog_parsert::SYSTEM_VERILOG || \
87-
PARSER.mode==verilog_parsert::VL2SMV_VERILOG) \
86+
{ if(PARSER.mode >= verilog_standardt::SV2005 || \
87+
PARSER.mode == verilog_standardt::V2005_SMV) \
8888
return x; \
8989
else \
9090
IDENTIFIER(yytext); \
9191
}
9292
#define VL2SMV_VERILOG_KEYWORD(x) \
93-
{ if(PARSER.mode==verilog_parsert::VL2SMV_VERILOG) \
93+
{ if(PARSER.mode == verilog_standardt::V2005_SMV) \
9494
return x; \
9595
else \
9696
IDENTIFIER(yytext); \
9797
}
9898
#define VIS_OR_VL2SMV_OR_SYSTEM_VERILOG_KEYWORD(x) \
99-
{ if(PARSER.mode==verilog_parsert::SYSTEM_VERILOG || \
100-
PARSER.mode==verilog_parsert::VL2SMV_VERILOG || \
101-
PARSER.mode==verilog_parsert::VIS_VERILOG) \
99+
{ if(PARSER.mode >= verilog_standardt::SV2005 || \
100+
PARSER.mode == verilog_standardt::V2005_SMV || \
101+
PARSER.mode == verilog_standardt::V2005_VIS) \
102102
return x; \
103103
else \
104104
IDENTIFIER(yytext); \
@@ -375,166 +375,169 @@ $removal { return TOK_REMOVAL; }
375375
$width { return TOK_WIDTH; }
376376
$skew { return TOK_SKEW; }
377377

378-
/* Verilog 1364-2001 keywords */
379-
380-
automatic { return TOK_AUTOMATIC; }
381-
cell { return TOK_CELL; }
382-
config { return TOK_CONFIG; }
383-
design { return TOK_DESIGN; }
384-
endconfig { return TOK_ENDCONFIG; }
385-
endgenerate { return TOK_ENDGENERATE; }
386-
generate { return TOK_GENERATE; }
387-
genvar { return TOK_GENVAR; }
388-
incdir { return TOK_INCDIR; }
389-
include { return TOK_INCLUDE; }
390-
instance { return TOK_INSTANCE; }
391-
liblist { return TOK_LIBLIST; }
392-
library { return TOK_LIBRARY; }
393-
localparam { return TOK_LOCALPARAM; }
394-
noshowcancelled { return TOK_NOSHOWCANCELLED; }
395-
pulsestyle_ondetect { return TOK_PULSESTYLE_ONDETECT; }
396-
pulsestyle_onevent { return TOK_PULSESTYLE_ONEVENT; }
397-
showcancelled { return TOK_SHOWCANCELLED; }
398-
signed { return TOK_SIGNED; }
399-
unsigned { return TOK_UNSIGNED; }
400-
use { return TOK_USE; }
378+
/* Verilog 1364-2001-noconfig keywords */
379+
380+
automatic { KEYWORD(V2001_NOCONFIG, TOK_AUTOMATIC); }
381+
endgenerate { KEYWORD(V2001_NOCONFIG, TOK_ENDGENERATE); }
382+
generate { KEYWORD(V2001_NOCONFIG, TOK_GENERATE); }
383+
genvar { KEYWORD(V2001_NOCONFIG, TOK_GENVAR); }
384+
localparam { KEYWORD(V2001_NOCONFIG, TOK_LOCALPARAM); }
385+
noshowcancelled { KEYWORD(V2001_NOCONFIG, TOK_NOSHOWCANCELLED); }
386+
pulsestyle_ondetect { KEYWORD(V2001_NOCONFIG, TOK_PULSESTYLE_ONDETECT); }
387+
pulsestyle_onevent { KEYWORD(V2001_NOCONFIG, TOK_PULSESTYLE_ONEVENT); }
388+
showcancelled { KEYWORD(V2001_NOCONFIG, TOK_SHOWCANCELLED); }
389+
signed { KEYWORD(V2001_NOCONFIG, TOK_SIGNED); }
390+
unsigned { KEYWORD(V2001_NOCONFIG, TOK_UNSIGNED); }
391+
392+
/* Verilog 1364-2001-config keywords */
393+
394+
cell { KEYWORD(V2001, TOK_CELL); }
395+
config { KEYWORD(V2001, TOK_CONFIG); }
396+
design { KEYWORD(V2001, TOK_DESIGN); }
397+
endconfig { KEYWORD(V2001, TOK_ENDCONFIG); }
398+
incdir { KEYWORD(V2001, TOK_INCDIR); }
399+
include { KEYWORD(V2001, TOK_INCLUDE); }
400+
instance { KEYWORD(V2001, TOK_INSTANCE); }
401+
liblist { KEYWORD(V2001, TOK_LIBLIST); }
402+
library { KEYWORD(V2001, TOK_LIBRARY); }
403+
use { KEYWORD(V2001, TOK_USE); }
401404

402405
/* Verilog 1364-2005 keywords */
403406

404-
uwire { return TOK_UWIRE; }
407+
uwire { KEYWORD(V2005, TOK_UWIRE); }
405408

406409
/* System Verilog 1800-2005 Keywords */
407410

408-
alias { SYSTEM_VERILOG_KEYWORD(TOK_ALIAS); }
409-
always_comb { SYSTEM_VERILOG_KEYWORD(TOK_ALWAYS_COMB); }
410-
always_ff { SYSTEM_VERILOG_KEYWORD(TOK_ALWAYS_FF); }
411-
always_latch { SYSTEM_VERILOG_KEYWORD(TOK_ALWAYS_LATCH); }
411+
alias { KEYWORD(SV2005, TOK_ALIAS); }
412+
always_comb { KEYWORD(SV2005, TOK_ALWAYS_COMB); }
413+
always_ff { KEYWORD(SV2005, TOK_ALWAYS_FF); }
414+
always_latch { KEYWORD(SV2005, TOK_ALWAYS_LATCH); }
412415
assert { VIS_OR_VL2SMV_OR_SYSTEM_VERILOG_KEYWORD(TOK_ASSERT); }
413416
assume { VL2SMV_OR_SYSTEM_VERILOG_KEYWORD(TOK_ASSUME); }
414-
before { SYSTEM_VERILOG_KEYWORD(TOK_BEFORE); }
415-
bind { SYSTEM_VERILOG_KEYWORD(TOK_BIND); }
416-
bins { SYSTEM_VERILOG_KEYWORD(TOK_BINS); }
417-
binsof { SYSTEM_VERILOG_KEYWORD(TOK_BINSOF); }
418-
bit { SYSTEM_VERILOG_KEYWORD(TOK_BIT); }
419-
break { SYSTEM_VERILOG_KEYWORD(TOK_BREAK); }
420-
byte { SYSTEM_VERILOG_KEYWORD(TOK_BYTE); }
421-
chandle { SYSTEM_VERILOG_KEYWORD(TOK_CHANDLE); }
422-
class { SYSTEM_VERILOG_KEYWORD(TOK_CLASS); }
423-
clocking { SYSTEM_VERILOG_KEYWORD(TOK_CLOCKING); }
424-
const { SYSTEM_VERILOG_KEYWORD(TOK_CONST); }
425-
constraint { SYSTEM_VERILOG_KEYWORD(TOK_CONSTRAINT); }
426-
context { SYSTEM_VERILOG_KEYWORD(TOK_CONTEXT); }
427-
continue { SYSTEM_VERILOG_KEYWORD(TOK_CONTINUE); }
428-
cover { SYSTEM_VERILOG_KEYWORD(TOK_COVER); }
429-
covergroup { SYSTEM_VERILOG_KEYWORD(TOK_COVERGROUP); }
430-
coverpoint { SYSTEM_VERILOG_KEYWORD(TOK_COVERPOINT); }
431-
cross { SYSTEM_VERILOG_KEYWORD(TOK_CROSS); }
432-
dist { SYSTEM_VERILOG_KEYWORD(TOK_DIST); }
433-
do { SYSTEM_VERILOG_KEYWORD(TOK_DO); }
434-
endclass { SYSTEM_VERILOG_KEYWORD(TOK_ENDCLASS); }
435-
endclocking { SYSTEM_VERILOG_KEYWORD(TOK_ENDCLOCKING); }
436-
endgroup { SYSTEM_VERILOG_KEYWORD(TOK_ENDGROUP); }
437-
endinterface { SYSTEM_VERILOG_KEYWORD(TOK_ENDINTERFACE); }
438-
endpackage { SYSTEM_VERILOG_KEYWORD(TOK_ENDPACKAGE); }
439-
endprogram { SYSTEM_VERILOG_KEYWORD(TOK_ENDPROGRAM); }
440-
endproperty { SYSTEM_VERILOG_KEYWORD(TOK_ENDPROPERTY); }
441-
endsequence { SYSTEM_VERILOG_KEYWORD(TOK_ENDSEQUENCE); }
417+
before { KEYWORD(SV2005, TOK_BEFORE); }
418+
bind { KEYWORD(SV2005, TOK_BIND); }
419+
bins { KEYWORD(SV2005, TOK_BINS); }
420+
binsof { KEYWORD(SV2005, TOK_BINSOF); }
421+
bit { KEYWORD(SV2005, TOK_BIT); }
422+
break { KEYWORD(SV2005, TOK_BREAK); }
423+
byte { KEYWORD(SV2005, TOK_BYTE); }
424+
chandle { KEYWORD(SV2005, TOK_CHANDLE); }
425+
class { KEYWORD(SV2005, TOK_CLASS); }
426+
clocking { KEYWORD(SV2005, TOK_CLOCKING); }
427+
const { KEYWORD(SV2005, TOK_CONST); }
428+
constraint { KEYWORD(SV2005, TOK_CONSTRAINT); }
429+
context { KEYWORD(SV2005, TOK_CONTEXT); }
430+
continue { KEYWORD(SV2005, TOK_CONTINUE); }
431+
cover { KEYWORD(SV2005, TOK_COVER); }
432+
covergroup { KEYWORD(SV2005, TOK_COVERGROUP); }
433+
coverpoint { KEYWORD(SV2005, TOK_COVERPOINT); }
434+
cross { KEYWORD(SV2005, TOK_CROSS); }
435+
dist { KEYWORD(SV2005, TOK_DIST); }
436+
do { KEYWORD(SV2005, TOK_DO); }
437+
endclass { KEYWORD(SV2005, TOK_ENDCLASS); }
438+
endclocking { KEYWORD(SV2005, TOK_ENDCLOCKING); }
439+
endgroup { KEYWORD(SV2005, TOK_ENDGROUP); }
440+
endinterface { KEYWORD(SV2005, TOK_ENDINTERFACE); }
441+
endpackage { KEYWORD(SV2005, TOK_ENDPACKAGE); }
442+
endprogram { KEYWORD(SV2005, TOK_ENDPROGRAM); }
443+
endproperty { KEYWORD(SV2005, TOK_ENDPROPERTY); }
444+
endsequence { KEYWORD(SV2005, TOK_ENDSEQUENCE); }
442445
enum { VIS_OR_VL2SMV_OR_SYSTEM_VERILOG_KEYWORD(TOK_ENUM); }
443-
expect { SYSTEM_VERILOG_KEYWORD(TOK_EXPECT); }
444-
export { SYSTEM_VERILOG_KEYWORD(TOK_EXPORT); }
445-
extends { SYSTEM_VERILOG_KEYWORD(TOK_EXTENDS); }
446-
extern { SYSTEM_VERILOG_KEYWORD(TOK_EXTERN); }
447-
final { SYSTEM_VERILOG_KEYWORD(TOK_FINAL); }
448-
first_match { SYSTEM_VERILOG_KEYWORD(TOK_FIRST_MATCH); }
449-
foreach { SYSTEM_VERILOG_KEYWORD(TOK_FOREACH); }
450-
forkjoin { SYSTEM_VERILOG_KEYWORD(TOK_FORKJOIN); }
451-
iff { SYSTEM_VERILOG_KEYWORD(TOK_IFF); }
452-
ignore_bins { SYSTEM_VERILOG_KEYWORD(TOK_IGNORE_BINS); }
453-
illegal_bins { SYSTEM_VERILOG_KEYWORD(TOK_ILLEGAL_BINS); }
454-
import { SYSTEM_VERILOG_KEYWORD(TOK_IMPORT); }
455-
inside { SYSTEM_VERILOG_KEYWORD(TOK_INSIDE); }
456-
int { SYSTEM_VERILOG_KEYWORD(TOK_INT); }
457-
interface { SYSTEM_VERILOG_KEYWORD(TOK_INTERFACE); }
458-
intersect { SYSTEM_VERILOG_KEYWORD(TOK_INTERSECT); }
459-
join_any { SYSTEM_VERILOG_KEYWORD(TOK_JOIN_ANY); }
460-
join_none { SYSTEM_VERILOG_KEYWORD(TOK_JOIN_NONE); }
461-
local { SYSTEM_VERILOG_KEYWORD(TOK_LOCAL); }
462-
logic { SYSTEM_VERILOG_KEYWORD(TOK_LOGIC); }
463-
longint { SYSTEM_VERILOG_KEYWORD(TOK_LONGINT); }
464-
matches { SYSTEM_VERILOG_KEYWORD(TOK_MATCHES); }
465-
modport { SYSTEM_VERILOG_KEYWORD(TOK_MODPORT); }
466-
new { SYSTEM_VERILOG_KEYWORD(TOK_NEW); }
467-
null { SYSTEM_VERILOG_KEYWORD(TOK_NULL); }
468-
package { SYSTEM_VERILOG_KEYWORD(TOK_PACKAGE); }
469-
packed { SYSTEM_VERILOG_KEYWORD(TOK_PACKED); }
470-
priority { SYSTEM_VERILOG_KEYWORD(TOK_PRIORITY); }
471-
program { SYSTEM_VERILOG_KEYWORD(TOK_PROGRAM); }
472-
property { SYSTEM_VERILOG_KEYWORD(TOK_PROPERTY); }
473-
protected { SYSTEM_VERILOG_KEYWORD(TOK_PROTECTED); }
474-
pure { SYSTEM_VERILOG_KEYWORD(TOK_PURE); }
475-
rand { SYSTEM_VERILOG_KEYWORD(TOK_RAND); }
476-
randc { SYSTEM_VERILOG_KEYWORD(TOK_RANDC); }
477-
randcase { SYSTEM_VERILOG_KEYWORD(TOK_RANDCASE); }
478-
randsequence { SYSTEM_VERILOG_KEYWORD(TOK_RANDSEQUENCE); }
479-
ref { SYSTEM_VERILOG_KEYWORD(TOK_REF); }
480-
return { SYSTEM_VERILOG_KEYWORD(TOK_RETURN); }
481-
sequence { SYSTEM_VERILOG_KEYWORD(TOK_SEQUENCE); }
482-
shortint { SYSTEM_VERILOG_KEYWORD(TOK_SHORTINT); }
483-
shortreal { SYSTEM_VERILOG_KEYWORD(TOK_SHORTREAL); }
484-
solve { SYSTEM_VERILOG_KEYWORD(TOK_SOLVE); }
485-
static { SYSTEM_VERILOG_KEYWORD(TOK_STATIC); }
486-
string { SYSTEM_VERILOG_KEYWORD(TOK_STRING); }
487-
struct { SYSTEM_VERILOG_KEYWORD(TOK_STRUCT); }
488-
super { SYSTEM_VERILOG_KEYWORD(TOK_SUPER); }
489-
tagged { SYSTEM_VERILOG_KEYWORD(TOK_TAGGED); }
490-
this { SYSTEM_VERILOG_KEYWORD(TOK_THIS); }
491-
throughout { SYSTEM_VERILOG_KEYWORD(TOK_THROUGHOUT); }
492-
timeprecision { SYSTEM_VERILOG_KEYWORD(TOK_TIMEPRECISION); }
493-
timeunit { SYSTEM_VERILOG_KEYWORD(TOK_TIMEUNIT); }
494-
type { SYSTEM_VERILOG_KEYWORD(TOK_TYPE); }
446+
expect { KEYWORD(SV2005, TOK_EXPECT); }
447+
export { KEYWORD(SV2005, TOK_EXPORT); }
448+
extends { KEYWORD(SV2005, TOK_EXTENDS); }
449+
extern { KEYWORD(SV2005, TOK_EXTERN); }
450+
final { KEYWORD(SV2005, TOK_FINAL); }
451+
first_match { KEYWORD(SV2005, TOK_FIRST_MATCH); }
452+
foreach { KEYWORD(SV2005, TOK_FOREACH); }
453+
forkjoin { KEYWORD(SV2005, TOK_FORKJOIN); }
454+
iff { KEYWORD(SV2005, TOK_IFF); }
455+
ignore_bins { KEYWORD(SV2005, TOK_IGNORE_BINS); }
456+
illegal_bins { KEYWORD(SV2005, TOK_ILLEGAL_BINS); }
457+
import { KEYWORD(SV2005, TOK_IMPORT); }
458+
inside { KEYWORD(SV2005, TOK_INSIDE); }
459+
int { KEYWORD(SV2005, TOK_INT); }
460+
interface { KEYWORD(SV2005, TOK_INTERFACE); }
461+
intersect { KEYWORD(SV2005, TOK_INTERSECT); }
462+
join_any { KEYWORD(SV2005, TOK_JOIN_ANY); }
463+
join_none { KEYWORD(SV2005, TOK_JOIN_NONE); }
464+
local { KEYWORD(SV2005, TOK_LOCAL); }
465+
logic { KEYWORD(SV2005, TOK_LOGIC); }
466+
longint { KEYWORD(SV2005, TOK_LONGINT); }
467+
matches { KEYWORD(SV2005, TOK_MATCHES); }
468+
modport { KEYWORD(SV2005, TOK_MODPORT); }
469+
new { KEYWORD(SV2005, TOK_NEW); }
470+
null { KEYWORD(SV2005, TOK_NULL); }
471+
package { KEYWORD(SV2005, TOK_PACKAGE); }
472+
packed { KEYWORD(SV2005, TOK_PACKED); }
473+
priority { KEYWORD(SV2005, TOK_PRIORITY); }
474+
program { KEYWORD(SV2005, TOK_PROGRAM); }
475+
property { KEYWORD(SV2005, TOK_PROPERTY); }
476+
protected { KEYWORD(SV2005, TOK_PROTECTED); }
477+
pure { KEYWORD(SV2005, TOK_PURE); }
478+
rand { KEYWORD(SV2005, TOK_RAND); }
479+
randc { KEYWORD(SV2005, TOK_RANDC); }
480+
randcase { KEYWORD(SV2005, TOK_RANDCASE); }
481+
randsequence { KEYWORD(SV2005, TOK_RANDSEQUENCE); }
482+
ref { KEYWORD(SV2005, TOK_REF); }
483+
return { KEYWORD(SV2005, TOK_RETURN); }
484+
sequence { KEYWORD(SV2005, TOK_SEQUENCE); }
485+
shortint { KEYWORD(SV2005, TOK_SHORTINT); }
486+
shortreal { KEYWORD(SV2005, TOK_SHORTREAL); }
487+
solve { KEYWORD(SV2005, TOK_SOLVE); }
488+
static { KEYWORD(SV2005, TOK_STATIC); }
489+
string { KEYWORD(SV2005, TOK_STRING); }
490+
struct { KEYWORD(SV2005, TOK_STRUCT); }
491+
super { KEYWORD(SV2005, TOK_SUPER); }
492+
tagged { KEYWORD(SV2005, TOK_TAGGED); }
493+
this { KEYWORD(SV2005, TOK_THIS); }
494+
throughout { KEYWORD(SV2005, TOK_THROUGHOUT); }
495+
timeprecision { KEYWORD(SV2005, TOK_TIMEPRECISION); }
496+
timeunit { KEYWORD(SV2005, TOK_TIMEUNIT); }
497+
type { KEYWORD(SV2005, TOK_TYPE); }
495498
typedef { VIS_OR_VL2SMV_OR_SYSTEM_VERILOG_KEYWORD(TOK_TYPEDEF); }
496-
union { SYSTEM_VERILOG_KEYWORD(TOK_UNION); }
497-
unique { SYSTEM_VERILOG_KEYWORD(TOK_UNIQUE); }
498-
var { SYSTEM_VERILOG_KEYWORD(TOK_VAR); }
499-
virtual { SYSTEM_VERILOG_KEYWORD(TOK_VIRTUAL); }
500-
void { SYSTEM_VERILOG_KEYWORD(TOK_VOID); }
501-
wait_order { SYSTEM_VERILOG_KEYWORD(TOK_WAIT_ORDER); }
502-
wildcard { SYSTEM_VERILOG_KEYWORD(TOK_WILDCARD); }
503-
with { SYSTEM_VERILOG_KEYWORD(TOK_WITH); }
504-
within { SYSTEM_VERILOG_KEYWORD(TOK_WITHIN); }
499+
union { KEYWORD(SV2005, TOK_UNION); }
500+
unique { KEYWORD(SV2005, TOK_UNIQUE); }
501+
var { KEYWORD(SV2005, TOK_VAR); }
502+
virtual { KEYWORD(SV2005, TOK_VIRTUAL); }
503+
void { KEYWORD(SV2005, TOK_VOID); }
504+
wait_order { KEYWORD(SV2005, TOK_WAIT_ORDER); }
505+
wildcard { KEYWORD(SV2005, TOK_WILDCARD); }
506+
with { KEYWORD(SV2005, TOK_WITH); }
507+
within { KEYWORD(SV2005, TOK_WITHIN); }
505508

506509
/* System Verilog 1800-2009 Keywords */
507510

508-
accept_on { SYSTEM_VERILOG_KEYWORD(TOK_ACCEPT_ON); }
509-
checker { SYSTEM_VERILOG_KEYWORD(TOK_CHECKER); }
510-
endchecker { SYSTEM_VERILOG_KEYWORD(TOK_ENDCHECKER); }
511+
accept_on { KEYWORD(SV2009, TOK_ACCEPT_ON); }
512+
checker { KEYWORD(SV2009, TOK_CHECKER); }
513+
endchecker { KEYWORD(SV2009, TOK_ENDCHECKER); }
511514
eventually { VL2SMV_OR_SYSTEM_VERILOG_KEYWORD(TOK_EVENTUALLY); }
512-
global { SYSTEM_VERILOG_KEYWORD(TOK_GLOBAL); }
513-
implies { SYSTEM_VERILOG_KEYWORD(TOK_IMPLIES); }
514-
let { SYSTEM_VERILOG_KEYWORD(TOK_LET); }
515-
nexttime { SYSTEM_VERILOG_KEYWORD(TOK_NEXTTIME); }
516-
reject_on { SYSTEM_VERILOG_KEYWORD(TOK_REJECT_ON); }
517-
restrict { SYSTEM_VERILOG_KEYWORD(TOK_RESTRICT); }
518-
s_always { SYSTEM_VERILOG_KEYWORD(TOK_S_ALWAYS); }
519-
s_eventually { SYSTEM_VERILOG_KEYWORD(TOK_S_EVENTUALLY); }
520-
s_nexttime { SYSTEM_VERILOG_KEYWORD(TOK_S_NEXTTIME); }
521-
s_until { SYSTEM_VERILOG_KEYWORD(TOK_S_UNTIL); }
522-
s_until_with { SYSTEM_VERILOG_KEYWORD(TOK_S_UNTIL_WITH); }
523-
strong { SYSTEM_VERILOG_KEYWORD(TOK_STRONG); }
524-
sync_accept_on { SYSTEM_VERILOG_KEYWORD(TOK_SYNC_ACCEPT_ON); }
525-
sync_reject_on { SYSTEM_VERILOG_KEYWORD(TOK_SYNC_REJECT_ON); }
526-
unique0 { SYSTEM_VERILOG_KEYWORD(TOK_UNIQUE0); }
527-
until { SYSTEM_VERILOG_KEYWORD(TOK_UNTIL); }
528-
until_with { SYSTEM_VERILOG_KEYWORD(TOK_UNTIL_WITH); }
529-
untyped { SYSTEM_VERILOG_KEYWORD(TOK_UNTYPED); }
530-
weak { SYSTEM_VERILOG_KEYWORD(TOK_WEAK); }
515+
global { KEYWORD(SV2009, TOK_GLOBAL); }
516+
implies { KEYWORD(SV2009, TOK_IMPLIES); }
517+
let { KEYWORD(SV2009, TOK_LET); }
518+
nexttime { KEYWORD(SV2009, TOK_NEXTTIME); }
519+
reject_on { KEYWORD(SV2009, TOK_REJECT_ON); }
520+
restrict { KEYWORD(SV2009, TOK_RESTRICT); }
521+
s_always { KEYWORD(SV2009, TOK_S_ALWAYS); }
522+
s_eventually { KEYWORD(SV2009, TOK_S_EVENTUALLY); }
523+
s_nexttime { KEYWORD(SV2009, TOK_S_NEXTTIME); }
524+
s_until { KEYWORD(SV2009, TOK_S_UNTIL); }
525+
s_until_with { KEYWORD(SV2009, TOK_S_UNTIL_WITH); }
526+
strong { KEYWORD(SV2009, TOK_STRONG); }
527+
sync_accept_on { KEYWORD(SV2009, TOK_SYNC_ACCEPT_ON); }
528+
sync_reject_on { KEYWORD(SV2009, TOK_SYNC_REJECT_ON); }
529+
unique0 { KEYWORD(SV2009, TOK_UNIQUE0); }
530+
until { KEYWORD(SV2009, TOK_UNTIL); }
531+
until_with { KEYWORD(SV2009, TOK_UNTIL_WITH); }
532+
untyped { KEYWORD(SV2009, TOK_UNTYPED); }
533+
weak { KEYWORD(SV2009, TOK_WEAK); }
531534

532535
/* System Verilog 1800-2012 Keywords */
533536

534-
implements { SYSTEM_VERILOG_KEYWORD(TOK_IMPLEMENTS); }
535-
interconnect { SYSTEM_VERILOG_KEYWORD(TOK_INTERCONNECT); }
536-
nettype { SYSTEM_VERILOG_KEYWORD(TOK_NETTYPE); }
537-
soft { SYSTEM_VERILOG_KEYWORD(TOK_SOFT); }
537+
implements { KEYWORD(SV2012, TOK_IMPLEMENTS); }
538+
interconnect { KEYWORD(SV2012, TOK_INTERCONNECT); }
539+
nettype { KEYWORD(SV2012, TOK_NETTYPE); }
540+
soft { KEYWORD(SV2012, TOK_SOFT); }
538541

539542
/* VL2SMV Keywords */
540543

src/verilog/verilog_language.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,9 @@ bool verilog_languaget::parse(
6868
verilog_parser.grammar=verilog_parsert::LANGUAGE;
6969

7070
if(has_suffix(path, ".sv") || force_systemverilog)
71-
verilog_parser.mode=verilog_parsert::SYSTEM_VERILOG;
71+
verilog_parser.mode = verilog_standardt::SV2023;
7272
else if(vl2smv_extensions)
73-
verilog_parser.mode = verilog_parsert::VL2SMV_VERILOG;
73+
verilog_parser.mode = verilog_standardt::V2005_SMV;
7474

7575
verilog_scanner_init();
7676

0 commit comments

Comments
 (0)