@@ -125,6 +125,87 @@ void verilog_typecheckt::collect_symbols(const verilog_declt &decl)
125
125
}
126
126
}
127
127
128
+ void verilog_typecheckt::collect_symbols (const verilog_statementt &statement)
129
+ {
130
+ if (statement.id () == ID_assert || statement.id () == ID_assume)
131
+ {
132
+ }
133
+ else if (statement.id () == ID_block)
134
+ {
135
+ // These may be named
136
+ auto &block_statement = to_verilog_block (statement);
137
+
138
+ if (block_statement.is_named ())
139
+ enter_named_block (block_statement.identifier ());
140
+
141
+ for (auto &block_statement : to_verilog_block (statement).operands ())
142
+ collect_symbols (to_verilog_statement (block_statement));
143
+
144
+ if (block_statement.is_named ())
145
+ named_blocks.pop_back ();
146
+ }
147
+ else if (statement.id () == ID_blocking_assign)
148
+ {
149
+ }
150
+ else if (
151
+ statement.id () == ID_case || statement.id () == ID_casex ||
152
+ statement.id () == ID_casez)
153
+ {
154
+ auto &case_statement = to_verilog_case_base (statement);
155
+
156
+ for (std::size_t i = 1 ; i < case_statement.operands ().size (); i++)
157
+ {
158
+ const verilog_case_itemt &c =
159
+ to_verilog_case_item (statement.operands ()[i]);
160
+
161
+ collect_symbols (c.case_statement ());
162
+ }
163
+ }
164
+ else if (statement.id () == ID_decl)
165
+ {
166
+ collect_symbols (to_verilog_decl (statement));
167
+ }
168
+ else if (statement.id () == ID_delay)
169
+ {
170
+ collect_symbols (to_verilog_delay (statement).body ());
171
+ }
172
+ else if (statement.id () == ID_event_guard)
173
+ {
174
+ collect_symbols (to_verilog_event_guard (statement).body ());
175
+ }
176
+ else if (statement.id () == ID_for)
177
+ {
178
+ collect_symbols (to_verilog_for (statement).body ());
179
+ }
180
+ else if (statement.id () == ID_forever)
181
+ {
182
+ collect_symbols (to_verilog_forever (statement).body ());
183
+ }
184
+ else if (statement.id () == ID_function_call)
185
+ {
186
+ }
187
+ else if (statement.id () == ID_if)
188
+ {
189
+ auto &if_statement = to_verilog_if (statement);
190
+ collect_symbols (if_statement.then_case ());
191
+ if (if_statement.has_else_case ())
192
+ collect_symbols (if_statement.else_case ());
193
+ }
194
+ else if (statement.id () == ID_non_blocking_assign)
195
+ {
196
+ }
197
+ else if (
198
+ statement.id () == ID_postincrement || statement.id () == ID_postdecrement ||
199
+ statement.id () == ID_preincrement || statement.id () == ID_predecrement)
200
+ {
201
+ }
202
+ else if (statement.id () == ID_skip)
203
+ {
204
+ }
205
+ else
206
+ DATA_INVARIANT (false , " unexpected statement: " + statement.id_string ());
207
+ }
208
+
128
209
void verilog_typecheckt::collect_symbols (
129
210
const verilog_module_itemt &module_item)
130
211
{
@@ -148,9 +229,11 @@ void verilog_typecheckt::collect_symbols(
148
229
}
149
230
else if (module_item.id () == ID_always)
150
231
{
232
+ collect_symbols (to_verilog_always (module_item).statement ());
151
233
}
152
234
else if (module_item.id () == ID_initial)
153
235
{
236
+ collect_symbols (to_verilog_initial (module_item).statement ());
154
237
}
155
238
else if (module_item.id () == ID_generate_block)
156
239
{
0 commit comments