static def_t * get_value_def (ex_value_t *value, etype_t type) { def_t *def; if (type == ev_short) { def = new_def (0, &type_short, 0, sc_extern); def->offset = value->v.short_val; return def; } def = emit_value (value, 0); if (type != def->type->type) return alias_def (def, ev_types[type], 0); return def; }
br_status reduce_app(func_decl * f, unsigned num, expr * const * args, expr_ref & result, proof_ref & result_pr) { if (!m.is_term_ite(f)) return BR_FAILED; expr_ref new_ite(m); new_ite = m.mk_app(f, num, args); expr_ref new_def(m); proof_ref new_def_pr(m); app_ref _result(m); if (m_defined_names.mk_name(new_ite, new_def, new_def_pr, _result, result_pr)) { m_set->assert_expr(new_def, new_def_pr); m_num_fresh++; if (m_produce_models) { if (!m_mc) m_mc = alloc(filter_model_converter, m); m_mc->insert(_result->get_decl()); } } result = _result.get(); return BR_DONE; }
symbol_t * make_symbol (const char *name, type_t *type, defspace_t *space, storage_class_t storage) { symbol_t *sym; struct reloc_s *relocs = 0; if (storage != sc_extern && storage != sc_global && storage != sc_static) internal_error (0, "invalid storage class for %s", __FUNCTION__); if (storage != sc_extern && !space) internal_error (0, "null space for non-external storage"); sym = symtab_lookup (pr.symtab, name); if (!sym) { sym = new_symbol_type (name, type); } if (sym->type != type) { if (is_array (sym->type) && is_array (type) && !sym->type->t.array.size) { sym->type = type; } else { error (0, "%s redefined", name); sym = new_symbol_type (name, type); } } if (sym->s.def && sym->s.def->external && storage != sc_extern) { //FIXME this really is not the right way relocs = sym->s.def->relocs; free_def (sym->s.def); sym->s.def = 0; } if (!sym->s.def) { sym->s.def = new_def (name, type, space, storage); reloc_attach_relocs (relocs, &sym->s.def->relocs); } return sym; }