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;