diff --git a/src/verilog/parser.y b/src/verilog/parser.y index c6ebde3a..ee5319d5 100644 --- a/src/verilog/parser.y +++ b/src/verilog/parser.y @@ -16,6 +16,7 @@ Author: Daniel Kroening, kroening@cs.cmu.edu #include #include +#include "verilog_expr.h" #include "verilog_parser.h" #define PARSER verilog_parser @@ -1158,9 +1159,20 @@ package_import_item_brace: package_import_item: package_identifier "::" identifier - { init($$, ID_verilog_import_item); mto($$, $1); mto($$, $3); } + { init($$, ID_verilog_import_item); + mto($$, $1); + mto($$, $3); + // add item from package to our scope table + auto &item = to_verilog_import_item(stack_expr($$)); + PARSER.current_scope->import_item(item); + } | package_identifier "::" "*" - { init($$, ID_verilog_import_item); mto($$, $1); } + { init($$, ID_verilog_import_item); + mto($$, $1); + // add items from package to our scope table + auto &item = to_verilog_import_item(stack_expr($$)); + PARSER.current_scope->import_item(item); + } ; genvar_declaration: diff --git a/src/verilog/verilog_expr.h b/src/verilog/verilog_expr.h index 8c5193d8..28fd6e66 100644 --- a/src/verilog/verilog_expr.h +++ b/src/verilog/verilog_expr.h @@ -1945,4 +1945,21 @@ to_verilog_implicit_typecast_expr(exprt &expr) return static_cast(expr); } +class verilog_import_itemt : public binary_exprt +{ +public: +}; + +inline const verilog_import_itemt &to_verilog_import_item(const exprt &expr) +{ + verilog_import_itemt::check(expr); + return static_cast(expr); +} + +inline verilog_import_itemt &to_verilog_import_item(exprt &expr) +{ + verilog_import_itemt::check(expr); + return static_cast(expr); +} + #endif diff --git a/src/verilog/verilog_parser.cpp b/src/verilog/verilog_parser.cpp index 059b8555..428d7bb0 100644 --- a/src/verilog/verilog_parser.cpp +++ b/src/verilog/verilog_parser.cpp @@ -11,6 +11,8 @@ Author: Daniel Kroening, kroening@kroening.com #include #include +#include "verilog_expr.h" + #include #include #include @@ -81,3 +83,20 @@ const verilog_parsert::scopet *verilog_parsert::lookup(irep_idt name) const // not found, give up return nullptr; } + +/*******************************************************************\ + +Function: verilog_parsert::scopet::import_item + + Inputs: + + Outputs: + + Purpose: + +\*******************************************************************/ + +void verilog_parsert::scopet::import_item( + const verilog_import_itemt &import_item) +{ +} diff --git a/src/verilog/verilog_parser.h b/src/verilog/verilog_parser.h index 22925109..1f1a50c1 100644 --- a/src/verilog/verilog_parser.h +++ b/src/verilog/verilog_parser.h @@ -19,6 +19,8 @@ Author: Daniel Kroening, kroening@kroening.com int yyverilogparse(); +class verilog_import_itemt; + class verilog_parsert:public parsert { public: @@ -90,6 +92,8 @@ class verilog_parsert:public parsert // sub-scopes using scope_mapt = std::map; scope_mapt scope_map; + + void import_item(const verilog_import_itemt &); }; scopet top_scope, *current_scope = &top_scope;