Ejemplo n.º 1
0
void
pic_error(pic_state *pic, const char *msg, pic_value irrs)
{
  struct pic_error *e;

  e = pic_make_error(pic, pic_intern(pic, ""), msg, irrs);

  pic_raise(pic, pic_obj_value(e));
}
Ejemplo n.º 2
0
static pic_value
pic_error_raise(pic_state *pic)
{
  pic_value v;

  pic_get_args(pic, "o", &v);

  pic_raise(pic, v);
}
Ejemplo n.º 3
0
void
pic_throw(pic_state *pic, pic_sym *type, const char *msg, pic_value irrs)
{
  struct pic_error *e;

  e = pic_make_error(pic, type, msg, irrs);

  pic_raise(pic, pic_obj_value(e));
}
Ejemplo n.º 4
0
PIC_NORETURN static void
file_error(pic_state *pic, const char *msg)
{
  struct pic_error *e;

  e = pic_make_error(pic, pic_intern(pic, "file"), msg, pic_nil_value());

  pic_raise(pic, pic_obj_value(e));
}
Ejemplo n.º 5
0
static pic_value
pic_error_error(pic_state *pic)
{
  const char *str;
  int argc;
  pic_value *argv;

  pic_get_args(pic, "z*", &str, &argc, &argv);

  pic_raise(pic, pic_make_error(pic, "", str, pic_make_list(pic, argc, argv)));
}
Ejemplo n.º 6
0
void
pic_error(pic_state *pic, const char *msg, int n, ...)
{
  va_list ap;
  pic_value irrs;

  va_start(ap, n);
  irrs = pic_vlist(pic, n, ap);
  va_end(ap);

  pic_raise(pic, pic_make_error(pic, "", msg, irrs));
}
Ejemplo n.º 7
0
void
pic_load_cstr(pic_state *pic, const char *src)
{
    struct pic_port *port = pic_open_input_string(pic, src);

    pic_try {
        pic_load(pic, port);
    }
    pic_catch {
        pic_close_port(pic, port);
        pic_raise(pic, pic->err);
    }

    pic_close_port(pic, port);
}
Ejemplo n.º 8
0
static pic_value
pic_str_string_map(pic_state *pic)
{
  struct pic_proc *proc;
  pic_value *argv, vals, val;
  int argc, i, len, j;
  pic_str *str;
  char *buf;

  pic_get_args(pic, "l*", &proc, &argc, &argv);

  if (argc == 0) {
    pic_errorf(pic, "string-map: one or more strings expected, but got zero");
  } else {
    pic_assert_type(pic, argv[0], str);
    len = pic_str_len(pic_str_ptr(argv[0]));
  }
  for (i = 1; i < argc; ++i) {
    pic_assert_type(pic, argv[i], str);

    len = len < pic_str_len(pic_str_ptr(argv[i]))
      ? len
      : pic_str_len(pic_str_ptr(argv[i]));
  }
  buf = pic_malloc(pic, len);

  pic_try {
    for (i = 0; i < len; ++i) {
      vals = pic_nil_value();
      for (j = 0; j < argc; ++j) {
        pic_push(pic, pic_char_value(pic_str_ref(pic, pic_str_ptr(argv[j]), i)), vals);
      }
      val = pic_apply_list(pic, proc, vals);

      pic_assert_type(pic, val, char);
      buf[i] = pic_char(val);
    }
    str = pic_make_str(pic, buf, len);
  }
  pic_catch {
    pic_free(pic, buf);
    pic_raise(pic, pic->err);
  }

  pic_free(pic, buf);

  return pic_obj_value(str);
}
Ejemplo n.º 9
0
NORETURN static pic_value
pic_error_error(pic_state *pic)
{
  char *str;
  int len;
  size_t argc;
  pic_value *argv;
  struct pic_error *e;

  pic_get_args(pic, "s*", &str, &len, &argc, &argv);

  e = (struct pic_error *)pic_obj_alloc(pic, sizeof(struct pic_error), PIC_TT_ERROR);
  e->type = PIC_ERROR_OTHER;
  e->msg = pic_strdup(pic, str);
  e->irrs = pic_list_from_array(pic, argc, argv);

  pic_raise(pic, pic_obj_value(e));
}