verilog: parser: verilog_lexical_context: Added delay value tracking
Added tracking delay values up to next semicolon in
always/final/begin/initial statements to avoid misinterpreting the arrow
as an implication
Signed-off-by: Jan Bylicki <jbylicki@antmicro.com>
diff --git a/verilog/parser/verilog_lexical_context.cc b/verilog/parser/verilog_lexical_context.cc
index d6ce739..749a663 100644
--- a/verilog/parser/verilog_lexical_context.cc
+++ b/verilog/parser/verilog_lexical_context.cc
@@ -567,6 +567,7 @@
if (in_initial_always_final_construct_) {
// Exit construct for single-statement bodies.
// e.g. initial $foo();
+ seen_delay_value_in_initial_always_final_construct_context = false;
if (block_stack_.empty()) {
in_initial_always_final_construct_ = false;
}
@@ -626,6 +627,12 @@
in_extern_declaration_ = false; // reset
}
break;
+ case '#':
+ if (in_initial_always_final_construct_) {
+ seen_delay_value_in_initial_always_final_construct_context = true;
+ }
+ // std::cout << "Found delay" << std::endl;
+ break;
default:
break;
} // switch (token.token_enum)
@@ -740,6 +747,9 @@
}
// return {true, "inside 'always/initial/final'"};
// }
+ if (seen_delay_value_in_initial_always_final_construct_context) {
+ return {true, "seen a delay value, expecting another statement"};
+ }
return {false, "all other cases (default)"};
}
diff --git a/verilog/parser/verilog_lexical_context.h b/verilog/parser/verilog_lexical_context.h
index e176686..9ffbd63 100644
--- a/verilog/parser/verilog_lexical_context.h
+++ b/verilog/parser/verilog_lexical_context.h
@@ -296,6 +296,8 @@
bool in_initial_always_final_construct_ = false;
+ bool seen_delay_value_in_initial_always_final_construct_context = false;
+
bool in_function_declaration_ = false;
bool in_function_body_ = false;