Exemplo n.º 1
0
static pic_value
pic_error_with_exception_handler(pic_state *pic)
{
  struct pic_proc *handler, *thunk;
  pic_value val;
  size_t xp_len;
  ptrdiff_t xp_offset;

  pic_get_args(pic, "ll", &handler, &thunk);

  if (pic->xp >= pic->xpend) {
    xp_len = (size_t)(pic->xpend - pic->xpbase) * 2;
    xp_offset = pic->xp - pic->xpbase;
    pic->xpbase = pic_realloc(pic, pic->xpbase, sizeof(struct pic_proc *) * xp_len);
    pic->xp = pic->xpbase + xp_offset;
    pic->xpend = pic->xpbase + xp_len;
  }

  *pic->xp++ = handler;

  val = pic_apply0(pic, thunk);

  --pic->xp;

  return val;
}
Exemplo n.º 2
0
static void
gc_protect(pic_state *pic, struct object *obj)
{
  if (pic->ai >= pic->arena_size) {
    pic->arena_size = pic->arena_size * 2 + 1;
    pic->arena = pic_realloc(pic, pic->arena, sizeof(struct object *) * pic->arena_size);
  }
  pic->arena[pic->ai++] = obj;
}
Exemplo n.º 3
0
void
pic_vec_extend_ip(pic_state *pic, struct pic_vector *vec, size_t size)
{
  size_t len, i;

  len = vec->len;
  vec->len = size;
  vec->data = (pic_value *)pic_realloc(pic, vec->data, sizeof(pic_value) * size);
  for (i = len; i < size; ++i) {
    vec->data[i] = pic_none_value();
  }
}
Exemplo n.º 4
0
pic_value
pic_protect(pic_state *pic, pic_value v)
{
  if (! pic_obj_p(pic, v))
    return v;

  if (pic->ai >= pic->arena_size) {
    pic->arena_size = pic->arena_size * 2 + 1;
    pic->arena = pic_realloc(pic, pic->arena, sizeof(struct object *) * pic->arena_size);
  }
  pic->arena[pic->ai++] = pic_ptr(pic, v);
  return v;
}
Exemplo n.º 5
0
void
pic_push_handler(pic_state *pic, struct pic_proc *handler)
{
  size_t xp_len;
  ptrdiff_t xp_offset;

  if (pic->xp >= pic->xpend) {
    xp_len = (size_t)(pic->xpend - pic->xpbase) * 2;
    xp_offset = pic->xp - pic->xpbase;
    pic->xpbase = pic_realloc(pic, pic->xpbase, sizeof(struct pic_proc *) * xp_len);
    pic->xp = pic->xpbase + xp_offset;
    pic->xpend = pic->xpbase + xp_len;
  }

  *pic->xp++ = handler;
}
Exemplo n.º 6
0
Arquivo: port.c Projeto: KeenS/benz
static pic_value
pic_port_read_blob(pic_state *pic)
{
  struct pic_port *port = pic_stdin(pic);
  pic_blob *blob;
  size_t k, i;

  pic_get_args(pic, "k|p", &k, &port);

  assert_port_profile(port, PIC_PORT_IN | PIC_PORT_BINARY, PIC_PORT_OPEN, "read-bytevector");

  blob = pic_make_blob(pic, k);

  i = xfread(blob->data, sizeof(char), k, port->file);
  if (i == 0) {
    return pic_eof_object();
  }
  else {
    pic_realloc(pic, blob->data, i);
    blob->len = i;
    return pic_obj_value(blob);
  }
}
Exemplo n.º 7
0
void
pic_push_try(pic_state *pic, struct pic_escape *escape)
{
  struct pic_proc *cont, *handler;
  size_t xp_len;
  ptrdiff_t xp_offset;

  cont = pic_make_econt(pic, escape);

  handler = pic_make_proc(pic, native_exception_handler, "(native-exception-handler)");

  pic_attr_set(pic, pic_obj_value(handler), "@@escape", pic_obj_value(cont));

  if (pic->xp >= pic->xpend) {
    xp_len = (size_t)(pic->xpend - pic->xpbase) * 2;
    xp_offset = pic->xp - pic->xpbase;
    pic->xpbase = pic_realloc(pic, pic->xpbase, sizeof(struct pic_proc *) * xp_len);
    pic->xp = pic->xpbase + xp_offset;
    pic->xpend = pic->xpbase + xp_len;
  }

  *pic->xp++ = handler;
}
Exemplo n.º 8
0
static pic_value
pic_error_with_exception_handler(pic_state *pic)
{
  struct pic_proc *handler, *thunk;
  pic_value v;

  pic_get_args(pic, "ll", &handler, &thunk);

  if (pic->ridx >= pic->rlen) {

#if DEBUG
    puts("rescue realloced");
#endif

    pic->rlen *= 2;
    pic->rescue = (struct pic_proc **)pic_realloc(pic, pic->rescue, sizeof(struct pic_proc *) * pic->rlen);
  }
  pic->rescue[pic->ridx++] = handler;

  v = pic_apply_argv(pic, thunk, 0);
  pic->ridx--;
  return v;
}
Exemplo n.º 9
0
void *
pic_malloc(pic_state *pic, size_t size)
{
  return pic_realloc(pic, NULL, size);
}