diff --git a/include/verilogAST.hpp b/include/verilogAST.hpp index 903e3d1..a5d83dd 100644 --- a/include/verilogAST.hpp +++ b/include/verilogAST.hpp @@ -580,8 +580,9 @@ class InlineVerilog : public StructuralStatement { ~InlineVerilog(){}; }; -typedef std::vector< - std::pair, std::unique_ptr>> +typedef std::vector, std::unique_ptr>, + std::unique_ptr>> Parameters; typedef std::vector>> diff --git a/src/verilogAST.cpp b/src/verilogAST.cpp index 03dee2f..b7d03fb 100644 --- a/src/verilogAST.cpp +++ b/src/verilogAST.cpp @@ -343,7 +343,7 @@ std::string Module::emitModuleHeader() { module_header_str += " #(\n "; std::vector param_strs; for (auto &it : parameters) { - param_strs.push_back("parameter " + it.first->toString() + " = " + + param_strs.push_back("parameter " + variant_to_string(it.first) + " = " + it.second->toString()); } module_header_str += join(param_strs, ",\n "); @@ -389,7 +389,7 @@ std::string ModuleInstantiation::toString() { module_inst_str += " #(\n "; std::vector param_strs; for (auto &it : parameters) { - param_strs.push_back("." + it.first->toString() + "(" + + param_strs.push_back("." + variant_to_string(it.first) + "(" + it.second->toString() + ")"); } module_inst_str += join(param_strs, ",\n "); diff --git a/tests/basic.cpp b/tests/basic.cpp index 935a9e3..fb4273b 100644 --- a/tests/basic.cpp +++ b/tests/basic.cpp @@ -330,11 +330,17 @@ TEST(BasicTests, TestModule) { std::string name = "test_module"; vAST::Parameters parameters; + parameters.push_back(std::make_pair( + std::make_unique(vAST::make_id("param1"), + vAST::make_num("3"), vAST::make_num("0")), + vAST::make_num("1"))); vAST::Module module(name, make_simple_ports(), make_simple_body(), std::move(parameters)); std::string expected_str = - "module test_module (\n" + "module test_module #(\n" + " parameter [3:0] param1 = 1\n" + ") (\n" " input i,\n" " output o\n" ");\n"