@@ -1639,6 +1639,10 @@ void verilog_typecheckt::convert_module_item(
16391639 else if (module_item.id () == ID_verilog_covergroup)
16401640 {
16411641 }
1642+ else if (module_item.id () == ID_verilog_property_declaration)
1643+ {
1644+ convert_property_declaration (to_verilog_property_declaration (module_item));
1645+ }
16421646 else
16431647 {
16441648 throw errort ().with_location (module_item.source_location ())
@@ -1648,6 +1652,41 @@ void verilog_typecheckt::convert_module_item(
16481652
16491653/* ******************************************************************\
16501654
1655+ Function: verilog_typecheckt::convert_property_declaration
1656+
1657+ Inputs:
1658+
1659+ Outputs:
1660+
1661+ Purpose:
1662+
1663+ \*******************************************************************/
1664+
1665+ void verilog_typecheckt::convert_property_declaration (
1666+ verilog_property_declarationt &declaration)
1667+ {
1668+ auto base_name = declaration.base_name ();
1669+ auto full_identifier = hierarchical_identifier (base_name);
1670+
1671+ convert_expr (declaration.cond ());
1672+ make_boolean (declaration.cond ());
1673+
1674+ auto type = bool_typet{};
1675+ type.set (ID_C_verilog_type, ID_verilog_property_declaration);
1676+ symbolt symbol{full_identifier, type, mode};
1677+
1678+ symbol.module = module_identifier;
1679+ symbol.base_name = base_name;
1680+ symbol.pretty_name = strip_verilog_prefix (symbol.name );
1681+ symbol.is_macro = true ;
1682+ symbol.value = declaration.cond ();
1683+ symbol.location = declaration.source_location ();
1684+
1685+ add_symbol (std::move (symbol));
1686+ }
1687+
1688+ /* ******************************************************************\
1689+
16511690Function: verilog_typecheckt::convert_statements
16521691
16531692 Inputs:
0 commit comments