| 1249 | } |
| 1250 | |
| 1251 | int |
| 1252 | Variable::output_value_dump(ostream &out, string prefix, int indent) const |
| 1253 | { |
| 1254 | size_t i; |
| 1255 | if (is_virtual()) { |
| 1256 | assert(!is_field_var()); |
| 1257 | const ArrayVariable* av = (const ArrayVariable*)this; |
| 1258 | vector<intvec> all_indices; |
| 1259 | expand_within_ranges(av->get_sizes(), all_indices); |
| 1260 | for (i=0; i<all_indices.size(); i++) { |
| 1261 | ArrayVariable* member = av->itemize(all_indices[i]); |
| 1262 | member->output_value_dump(out, prefix, indent); |
| 1263 | } |
| 1264 | } |
| 1265 | else if (type->eType == eSimple) { |
| 1266 | output_print_str(out, prefix + to_string() + " = " + type->printf_directive() + "\\n", to_string(), indent); |
| 1267 | outputln(out); |
| 1268 | } |
| 1269 | else if (type->eType == eStruct) { |
| 1270 | for (i=0; i<field_vars.size(); i++) { |
| 1271 | // bit fields can not be taken address |
| 1272 | field_vars[i]->output_value_dump(out, prefix, indent); |
| 1273 | } |
| 1274 | } |
| 1275 | else if (type->eType == eUnion) { |
| 1276 | const vector<const Fact*>& facts = FactMgr::get_program_end_facts(); |
| 1277 | for (i=0; i<field_vars.size(); i++) { |
| 1278 | if (FactUnion::is_field_readable(this, i, facts)) { |
| 1279 | field_vars[i]->output_value_dump(out, prefix, indent); |
| 1280 | } |
| 1281 | } |
| 1282 | } |
| 1283 | return 0; |
| 1284 | } |
| 1285 | |
| 1286 | const Variable* |
| 1287 | Variable::match_var_name(const string& vname) const |
no test coverage detected