Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
void new_label(const char *label)
{
    struct expr *e = pc_get();
    new_symbol_expr(label, e);
}