int enum_as_bool (type_t *enm, expr_t **zero, expr_t **one) { symtab_t *symtab = enm->t.symtab; symbol_t *zero_sym = 0; symbol_t *one_sym = 0; symbol_t *sym; int val, v; if (!symtab) return 0; for (sym = symtab->symbols; sym; sym = sym->next) { if (sym->sy_type != sy_const) continue; val = sym->s.value->v.integer_val; if (!val) { zero_sym = sym; } else { if (one_sym) { v = one_sym->s.value->v.integer_val; if (val * val > v * v) continue; } one_sym = sym; } } if (!zero_sym || !one_sym) return 0; *zero = new_symbol_expr (zero_sym); *one = new_symbol_expr (one_sym); return 1; }
symbol_exprt local_SSAt::name_input(const ssa_objectt &object) const { symbol_exprt new_symbol_expr(object.get_expr().type()); // copy const irep_idt old_id=object.get_identifier(); irep_idt new_id=id2string(old_id)+"#in"+suffix; new_symbol_expr.set_identifier(new_id); if(object.get_expr().source_location().is_not_nil()) new_symbol_expr.add_source_location()=object.get_expr().source_location(); return new_symbol_expr; }
symbol_exprt local_SSAt::name( const ssa_objectt &object, kindt kind, locationt loc) const { symbol_exprt new_symbol_expr(object.get_expr().type()); const irep_idt &id=object.get_identifier(); unsigned cnt=loc->location_number; irep_idt new_id=id2string(id)+"#"+ (kind==PHI?"phi": kind==LOOP_BACK?"lb": kind==LOOP_SELECT?"ls": "")+ i2string(cnt)+ (kind==LOOP_SELECT?std::string(""):suffix); new_symbol_expr.set_identifier(new_id); if(object.get_expr().source_location().is_not_nil()) new_symbol_expr.add_source_location()=object.get_expr().source_location(); return new_symbol_expr; }
void new_label(const char *label) { struct expr *e = pc_get(); new_symbol_expr(label, e); }