|
11 | 11 | #include <util/arith_tools.h>
|
12 | 12 | #include <util/bitvector_expr.h>
|
13 | 13 | #include <util/bitvector_types.h>
|
| 14 | +#include <util/expr_iterator.h> |
14 | 15 | #include <util/mathematical_types.h>
|
15 | 16 | #include <util/prefix.h>
|
16 | 17 |
|
@@ -81,6 +82,33 @@ void verilog_module_sourcet::show(std::ostream &out) const
|
81 | 82 | out << '\n';
|
82 | 83 | }
|
83 | 84 |
|
| 85 | +static void |
| 86 | +dependencies_rec(const verilog_module_itemt &, std::vector<irep_idt> &); |
| 87 | + |
| 88 | +static void dependencies_rec(const exprt &expr, std::vector<irep_idt> &dest) |
| 89 | +{ |
| 90 | + for(const_depth_iteratort it = expr.depth_cbegin(); it != expr.depth_cend(); |
| 91 | + ++it) |
| 92 | + { |
| 93 | + if(it->id() == ID_verilog_package_scope) |
| 94 | + { |
| 95 | + auto &package_scope_expr = to_verilog_package_scope_expr(*it); |
| 96 | + dest.push_back( |
| 97 | + verilog_package_identifier(package_scope_expr.package_base_name())); |
| 98 | + } |
| 99 | + } |
| 100 | +} |
| 101 | + |
| 102 | +static void dependencies_rec(const typet &type, std::vector<irep_idt> &dest) |
| 103 | +{ |
| 104 | + if(type.id() == ID_verilog_package_scope) |
| 105 | + { |
| 106 | + auto &package_scope_type = to_verilog_package_scope_type(type); |
| 107 | + dest.push_back( |
| 108 | + verilog_package_identifier(package_scope_type.package_base_name())); |
| 109 | + } |
| 110 | +} |
| 111 | + |
84 | 112 | static void dependencies_rec(
|
85 | 113 | const verilog_module_itemt &module_item,
|
86 | 114 | std::vector<irep_idt> &dest)
|
@@ -114,6 +142,86 @@ static void dependencies_rec(
|
114 | 142 | verilog_package_identifier(import_item.get(ID_verilog_package)));
|
115 | 143 | }
|
116 | 144 | }
|
| 145 | + else if(module_item.id() == ID_parameter_decl) |
| 146 | + { |
| 147 | + auto ¶meter_decl = to_verilog_parameter_decl(module_item); |
| 148 | + for(auto &decl : parameter_decl.declarations()) |
| 149 | + { |
| 150 | + dependencies_rec(decl.type(), dest); |
| 151 | + dependencies_rec(decl.value(), dest); |
| 152 | + } |
| 153 | + } |
| 154 | + else if(module_item.id() == ID_local_parameter_decl) |
| 155 | + { |
| 156 | + auto &localparam_decl = to_verilog_local_parameter_decl(module_item); |
| 157 | + for(auto &decl : localparam_decl.declarations()) |
| 158 | + { |
| 159 | + dependencies_rec(decl.type(), dest); |
| 160 | + dependencies_rec(decl.value(), dest); |
| 161 | + } |
| 162 | + } |
| 163 | + else if(module_item.id() == ID_decl) |
| 164 | + { |
| 165 | + auto &decl = to_verilog_decl(module_item); |
| 166 | + dependencies_rec(decl.type(), dest); |
| 167 | + for(auto &declarator : decl.declarators()) |
| 168 | + { |
| 169 | + dependencies_rec(declarator.type(), dest); |
| 170 | + dependencies_rec(declarator.value(), dest); |
| 171 | + } |
| 172 | + } |
| 173 | + else if( |
| 174 | + module_item.id() == ID_verilog_always || |
| 175 | + module_item.id() == ID_verilog_always_comb || |
| 176 | + module_item.id() == ID_verilog_always_ff || |
| 177 | + module_item.id() == ID_verilog_always_latch) |
| 178 | + { |
| 179 | + dependencies_rec(to_verilog_always_base(module_item).statement(), dest); |
| 180 | + } |
| 181 | + else if(module_item.id() == ID_initial) |
| 182 | + { |
| 183 | + dependencies_rec(to_verilog_initial(module_item).statement(), dest); |
| 184 | + } |
| 185 | + else if(module_item.id() == ID_inst) |
| 186 | + { |
| 187 | + } |
| 188 | + else if(module_item.id() == ID_inst_builtin) |
| 189 | + { |
| 190 | + } |
| 191 | + else if(module_item.id() == ID_continuous_assign) |
| 192 | + { |
| 193 | + } |
| 194 | + else if( |
| 195 | + module_item.id() == ID_verilog_assert_property || |
| 196 | + module_item.id() == ID_verilog_assume_property || |
| 197 | + module_item.id() == ID_verilog_restrict_property || |
| 198 | + module_item.id() == ID_verilog_cover_property) |
| 199 | + { |
| 200 | + } |
| 201 | + else if(module_item.id() == ID_verilog_assertion_item) |
| 202 | + { |
| 203 | + } |
| 204 | + else if(module_item.id() == ID_parameter_override) |
| 205 | + { |
| 206 | + } |
| 207 | + else if(module_item.id() == ID_verilog_final) |
| 208 | + { |
| 209 | + } |
| 210 | + else if(module_item.id() == ID_verilog_let) |
| 211 | + { |
| 212 | + // to_verilog_let(module_item)); |
| 213 | + } |
| 214 | + else if(module_item.id() == ID_verilog_smv_assume) |
| 215 | + { |
| 216 | + } |
| 217 | + else if(module_item.id() == ID_verilog_property_declaration) |
| 218 | + { |
| 219 | + // to_verilog_property_declaration(module_item) |
| 220 | + } |
| 221 | + else if(module_item.id() == ID_verilog_sequence_declaration) |
| 222 | + { |
| 223 | + // to_verilog_sequence_declaration(module_item) |
| 224 | + } |
117 | 225 | }
|
118 | 226 |
|
119 | 227 | std::vector<irep_idt> verilog_item_containert::dependencies() const
|
|
0 commit comments