diff options
author | Rupert Swarbrick <rswarbrick@lowrisc.org> | 2020-03-17 09:34:31 +0000 |
---|---|---|
committer | Rupert Swarbrick <rswarbrick@gmail.com> | 2020-03-27 16:08:26 +0000 |
commit | 044ca9dde409e3c91542fe95513d6641110f8462 (patch) | |
tree | 564c849ec0a8884171e22d89843e7e9c3e9115b0 /frontends/verilog/verilog_frontend.h | |
parent | 4c38895fab3ca2426ffc23e40601f3042a953e47 (diff) | |
download | yosys-044ca9dde409e3c91542fe95513d6641110f8462.tar.gz yosys-044ca9dde409e3c91542fe95513d6641110f8462.tar.bz2 yosys-044ca9dde409e3c91542fe95513d6641110f8462.zip |
Add support for SystemVerilog-style `define to Verilog frontend
This patch should support things like
`define foo(a, b = 3, c) a+b+c
`foo(1, ,2)
which will evaluate to 1+3+2. It also spots mistakes like
`foo(1)
(the 3rd argument doesn't have a default value, so a call site is
required to set it).
Most of the patch is a simple parser for the format in preproc.cc, but
I've also taken the opportunity to wrap up the "name -> definition"
map in a type, rather than use multiple std::map's.
Since this type needs to be visible to code that touches defines, I've
pulled it (and the frontend_verilog_preproc declaration) out into a
new file at frontends/verilog/preproc.h and included that where
necessary.
Finally, the patch adds a few tests in tests/various to check that we
are parsing everything correctly.
Diffstat (limited to 'frontends/verilog/verilog_frontend.h')
-rw-r--r-- | frontends/verilog/verilog_frontend.h | 4 |
1 files changed, 0 insertions, 4 deletions
diff --git a/frontends/verilog/verilog_frontend.h b/frontends/verilog/verilog_frontend.h index 73ea51e6c..636a4ceca 100644 --- a/frontends/verilog/verilog_frontend.h +++ b/frontends/verilog/verilog_frontend.h @@ -85,10 +85,6 @@ namespace VERILOG_FRONTEND extern std::istream *lexin; } -// the pre-processor -std::string frontend_verilog_preproc(std::istream &f, std::string filename, const std::map<std::string, std::string> &pre_defines_map, - dict<std::string, std::pair<std::string, bool>> &global_defines_cache, const std::list<std::string> &include_dirs); - YOSYS_NAMESPACE_END // the usual bison/flex stuff |