Example #1
0
extent_list init_extent(const_extent_list ranges,
			const_index_entry_list quantifier_indices,
			const_user_type_entry_list user_type_table)
{
    register unsigned int ix;

    extent_list extent = new_extent_list();
    for (ix = 0; ix < ranges->sz; ix++) {
	int v = eval_int_expr(ranges->arr[ix]->from, quantifier_indices, user_type_table);
	append_extent_list(extent,
			   new_extent(to_expr(new_expr_int(to_type(new_int_type()), v)),
				      to_expr(new_expr_int(to_type(new_int_type()), v))));
    }
    return extent;
}
Example #2
0
expression_t *
expr_primitive_for_type (type_t const * self)
{
  assert (self != NULL);

  if (self->base.kind == tk_own)
    self = self->t_own.host;
  assert (self->base.kind != tk_own);

  switch (self->base.kind)
    {
    case tk_int:
      return new_expr_int (new_cursor ("", 0), 0);
    case tk_real:
      return new_expr_real (new_cursor ("", 0), new_estring_from ("0.0"));
    case tk_string:
      return new_expr_string (new_cursor ("", 0), new_estring_from (""));
    case tk_bool:
      return new_expr_bool (new_cursor ("", 0), 1);

    case tk_unknown:
    case tk_implicit:
    case tk_any:
    case tk_void:
    case tk_label:
    case tk_switch:
    case tk_array:
    case tk_own:
    case tk_proc:
      assert (!"Should never get there!");
    };

  assert (!"Should never get there!");
  return NULL;
}
Example #3
0
extent_list advance_extent(extent_list extent,
			   const_extent_list ranges,
			   const_index_entry_list quantifier_indices,
			   const_user_type_entry_list user_type_table)
{
    register unsigned int ix;

    assert(extent->sz == ranges->sz);

    for (ix = extent->sz - 1; ix < extent->sz; ix--) {
	int p = eval_int_expr(extent->arr[ix]->from, quantifier_indices, user_type_table);
	int s = eval_int_expr(extent->arr[ix]->to, quantifier_indices, user_type_table);
	int r = eval_int_expr(ranges->arr[ix]->from, quantifier_indices, user_type_table);
	int q = eval_int_expr(ranges->arr[ix]->to, quantifier_indices, user_type_table);

	rfre_expr(extent->arr[ix]->from);
	rfre_expr(extent->arr[ix]->to);
	if (r < q) {
	    if (p < q) {
		p += 1;
		s += 1;
		extent->arr[ix]->from = to_expr(new_expr_int(to_type(new_int_type()), p));
		extent->arr[ix]->to = to_expr(new_expr_int(to_type(new_int_type()), s));
		break;
	    }
	} else {
	    if (p > q) {
		p -= 1;
		s -= 1;
		extent->arr[ix]->from = to_expr(new_expr_int(to_type(new_int_type()), p));
		extent->arr[ix]->to = to_expr(new_expr_int(to_type(new_int_type()), s));
		break;
	    }
	}
	extent->arr[ix]->from = to_expr(new_expr_int(to_type(new_int_type()), r));
	extent->arr[ix]->to = to_expr(new_expr_int(to_type(new_int_type()), r));
    }

    if (ix >= extent->sz) {
	rfre_extent_list(extent);
	return extent_listNIL;
    }

    return extent;
}