@@ -55,23 +55,27 @@ bool verilog_languaget::parse(
55
55
const std::string &path,
56
56
message_handlert &message_handler)
57
57
{
58
- verilog_parsert verilog_parser;
59
-
60
58
std::stringstream str;
61
59
62
60
if (preprocess (instream, path, str, message_handler))
63
61
return true ;
64
62
63
+ verilog_standardt standard;
64
+
65
+ if (has_suffix (path, " .sv" ) || force_systemverilog)
66
+ standard = verilog_standardt::SV2023;
67
+ else if (vl2smv_extensions)
68
+ standard = verilog_standardt::V2005_SMV;
69
+ else
70
+ standard = verilog_standardt::V2005_SMV;
71
+
72
+ verilog_parsert verilog_parser (standard);
73
+
65
74
verilog_parser.set_file (path);
66
75
verilog_parser.in =&str;
67
76
verilog_parser.log .set_message_handler (message_handler);
68
77
verilog_parser.grammar =verilog_parsert::LANGUAGE;
69
78
70
- if (has_suffix (path, " .sv" ) || force_systemverilog)
71
- verilog_parser.mode = verilog_standardt::SV2023;
72
- else if (vl2smv_extensions)
73
- verilog_parser.mode = verilog_standardt::V2005_SMV;
74
-
75
79
verilog_scanner_init ();
76
80
77
81
bool result=verilog_parser.parse ();
@@ -182,7 +186,8 @@ bool verilog_languaget::typecheck(
182
186
messaget message (message_handler);
183
187
message.debug () << " Synthesis " << module << messaget::eom;
184
188
185
- if (verilog_synthesis (symbol_table, module , message_handler, options))
189
+ if (verilog_synthesis (
190
+ symbol_table, module , parse_tree.standard , message_handler, options))
186
191
return true ;
187
192
188
193
return false ;
@@ -289,8 +294,10 @@ bool verilog_languaget::to_expr(
289
294
290
295
std::istringstream i_preprocessed (code);
291
296
297
+ verilog_standardt standard = verilog_standardt::V2005;
298
+
292
299
// parsing
293
- verilog_parsert verilog_parser;
300
+ verilog_parsert verilog_parser (standard) ;
294
301
295
302
verilog_parser.set_file (" " );
296
303
verilog_parser.in =&i_preprocessed;
@@ -304,12 +311,12 @@ bool verilog_languaget::to_expr(
304
311
expr.swap (verilog_parser.parse_tree .expr );
305
312
306
313
// typecheck it
307
- result = verilog_typecheck (expr, module , message_handler, ns);
314
+ result = verilog_typecheck (expr, module , standard, message_handler, ns);
308
315
if (result)
309
316
return true ;
310
317
311
318
// synthesize it
312
- result = verilog_synthesis (expr, module , message_handler, ns);
319
+ result = verilog_synthesis (expr, module , standard, message_handler, ns);
313
320
if (result)
314
321
return true ;
315
322
0 commit comments