const atom* __equal(const atom** list) { int index; const atom* current; current = list[0]; for (index = 1; list[index] != 0; ++index) if (final_value(current) != final_value(list[index])) return (atom_res(BOOLEAN, false)); return (atom_res(BOOLEAN, true)); }
const atom* __or(const atom** list) { int index; for (index = 0; list[index] != 0; ++index) if (final_value(list[index]) == true) return (atom_res(BOOLEAN, true)); return (atom_res(BOOLEAN, false)); }
void cpp_typecheckt::typecheck_enum_body(symbolt &enum_symbol) { typet &type=enum_symbol.type; exprt &body=static_cast<exprt &>(type.add(ID_body)); irept::subt &components=body.get_sub(); typet enum_type(ID_symbol); enum_type.set(ID_identifier, enum_symbol.name); mp_integer i=0; Forall_irep(it, components) { const irep_idt &name=it->get(ID_name); if(it->find(ID_value).is_not_nil()) { exprt &value=static_cast<exprt &>(it->add(ID_value)); typecheck_expr(value); make_constant_index(value); if(to_integer(value, i)) throw "failed to produce integer for enum"; } exprt final_value(ID_constant, enum_type); final_value.set(ID_value, integer2string(i)); symbolt symbol; symbol.name=id2string(enum_symbol.name)+"::"+id2string(name); symbol.base_name=name; symbol.value.swap(final_value); symbol.location=static_cast<const locationt &>(it->find(ID_C_location)); symbol.mode=ID_cpp; symbol.module=module; symbol.type=enum_type; symbol.is_type=false; symbol.is_macro=true; symbolt *new_symbol; if(symbol_table.move(symbol, new_symbol)) throw "cpp_typecheckt::typecheck_enum_body: symbol_table.move() failed"; cpp_idt &scope_identifier= cpp_scopes.put_into_scope(*new_symbol); scope_identifier.id_class=cpp_idt::SYMBOL; ++i; } }
const atom* __greater_or_equal(const atom** list) { return (atom_res(BOOLEAN, final_value(list[0]) >= final_value(list[1]))); }
const atom* __less_or_equal(const atom** list) { return (atom_res(BOOLEAN, final_value(list[0]) <= final_value(list[1]))); }
const atom* __less(const atom** list) { return (atom_res(BOOLEAN, final_value(list[0]) < final_value(list[1]))); }
const atom* __not(const atom** list) { return (atom_res(BOOLEAN, !final_value(list[0]))); }
const atom* __different(const atom** list) { return (atom_res(BOOLEAN, final_value(__equal(list)) == false)); }