Skip to content

Commit 79a2e1e

Browse files
authored
Merge pull request #1497 from diffblue/instance-array-grammar
Verilog: grammar for instance arrays
2 parents e1ed62f + 2d21017 commit 79a2e1e

File tree

5 files changed

+30
-6
lines changed

5 files changed

+30
-6
lines changed
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
KNOWNBUG
1+
CORE
22
instance_array1.sv
33

4-
^EXIT=0$
4+
^file .* line 9: no support for instance arrays$
5+
^EXIT=2$
56
^SIGNAL=0$
67
--
78
--
8-
This doesn't parse.

src/hw_cbmc_irep_ids.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ IREP_ID_ONE(verilog_declarations)
128128
IREP_ID_ONE(verilog_default_clocking)
129129
IREP_ID_ONE(verilog_default_disable)
130130
IREP_ID_ONE(verilog_identifier)
131+
IREP_ID_ONE(verilog_instance_array)
131132
IREP_ID_ONE(verilog_interconnect)
132133
IREP_ID_ONE(verilog_lifetime)
133134
IREP_ID_ONE(verilog_logical_equality)

src/verilog/parser.y

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3209,12 +3209,19 @@ hierarchical_instance_brace:
32093209

32103210
hierarchical_instance:
32113211
name_of_instance '(' list_of_module_connections_opt ')'
3212-
{ init($$, ID_inst); addswap($$, ID_base_name, $1); swapop($$, $3); }
3212+
{ $$ = $1; swapop($$, $3); }
32133213
;
32143214

32153215
name_of_instance:
3216-
{ init($$, "$_&#ANON" + PARSER.get_next_id());}
3217-
| TOK_NON_TYPE_IDENTIFIER
3216+
/* Optional */
3217+
{ init($$, ID_inst);
3218+
stack_expr($$).set(ID_base_name, "$_&#ANON" + PARSER.get_next_id());
3219+
}
3220+
| TOK_NON_TYPE_IDENTIFIER unpacked_dimension_brace
3221+
{ init($$, ID_inst);
3222+
addswap($$, ID_base_name, $1);
3223+
addswap($$, ID_verilog_instance_array, $2);
3224+
}
32183225
;
32193226

32203227
list_of_module_connections_opt:

src/verilog/verilog_expr.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -903,6 +903,16 @@ class verilog_inst_baset : public verilog_module_itemt
903903
connections.front().id() == ID_named_port_connection;
904904
}
905905

906+
const typet &instance_array() const
907+
{
908+
return static_cast<const typet &>(find(ID_verilog_instance_array));
909+
}
910+
911+
typet &instance_array()
912+
{
913+
return static_cast<typet &>(add(ID_verilog_instance_array));
914+
}
915+
906916
protected:
907917
using exprt::operands;
908918
};

src/verilog/verilog_interfaces.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,12 @@ void verilog_typecheckt::interface_inst(
177177
const verilog_inst_baset &statement,
178178
const verilog_instt::instancet &op)
179179
{
180+
if(op.instance_array().is_not_nil())
181+
{
182+
throw errort().with_location(op.source_location())
183+
<< "no support for instance arrays";
184+
}
185+
180186
bool primitive=statement.id()==ID_inst_builtin;
181187
const exprt &range_expr = static_cast<const exprt &>(op.find(ID_range));
182188

0 commit comments

Comments
 (0)