From 1dcbba1abf28afae846bd42f49d716892ffd685c Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Fri, 27 Dec 2013 16:25:27 +0100 Subject: [PATCH] Fixed parsing of non-arg macro calls followed by "(" --- frontends/verilog/preproc.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/frontends/verilog/preproc.cc b/frontends/verilog/preproc.cc index 501adf05..5cfa0f24 100644 --- a/frontends/verilog/preproc.cc +++ b/frontends/verilog/preproc.cc @@ -204,6 +204,7 @@ static void input_file(FILE *f, std::string filename) std::string frontend_verilog_preproc(FILE *f, std::string filename, const std::map pre_defines_map, const std::list include_dirs) { + std::set defines_with_args; std::map defines_map(pre_defines_map); int ifdef_fail_level = 0; bool in_elseif = false; @@ -354,6 +355,10 @@ std::string frontend_verilog_preproc(FILE *f, std::string filename, const std::m return_char('\n'); // printf("define: >>%s<< -> >>%s<<\n", name.c_str(), value.c_str()); defines_map[name] = value; + if (state == 2) + defines_with_args.insert(name); + else + defines_with_args.erase(name); continue; } @@ -363,6 +368,7 @@ std::string frontend_verilog_preproc(FILE *f, std::string filename, const std::m name = next_token(true); // printf("undef: >>%s<<\n", name.c_str()); defines_map.erase(name); + defines_with_args.erase(name); continue; } @@ -381,7 +387,7 @@ std::string frontend_verilog_preproc(FILE *f, std::string filename, const std::m // printf("expand: >>%s<< -> >>%s<<\n", name.c_str(), defines_map[name].c_str()); std::string skipped_spaces = skip_spaces(); tok = next_token(true); - if (tok == "(") { + if (tok == "(" && defines_with_args.count(name) > 0) { int level = 1; std::vector args; args.push_back(std::string());