diff options
author | Clifford Wolf <clifford@clifford.at> | 2013-12-27 16:25:27 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2013-12-27 16:25:27 +0100 |
commit | 1dcbba1abf28afae846bd42f49d716892ffd685c (patch) | |
tree | b831aa99e9b64f4e1fce70fce91ededefc742b61 /frontends/verilog | |
parent | 0f5ab7649e4496b1923cad6f093c735a2350fdc8 (diff) | |
download | yosys-1dcbba1abf28afae846bd42f49d716892ffd685c.tar.gz yosys-1dcbba1abf28afae846bd42f49d716892ffd685c.tar.bz2 yosys-1dcbba1abf28afae846bd42f49d716892ffd685c.zip |
Fixed parsing of non-arg macro calls followed by "("
Diffstat (limited to 'frontends/verilog')
-rw-r--r-- | frontends/verilog/preproc.cc | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/frontends/verilog/preproc.cc b/frontends/verilog/preproc.cc index 501adf059..5cfa0f24b 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<std::string, std::string> pre_defines_map, const std::list<std::string> include_dirs) { + std::set<std::string> defines_with_args; std::map<std::string, std::string> 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<std::string> args; args.push_back(std::string()); |