Exemple #1
0
void
pic_set(pic_state *pic, const char *name, pic_value val)
{
  size_t ai = pic_enter(pic);
  pic_global_set(pic, pic_intern_cstr(pic, name), val);
  pic_leave(pic, ai);
}
Exemple #2
0
void
pic_print_backtrace(pic_state *pic, xFILE *file)
{
  assert(! pic_invalid_p(pic->err));

  if (! pic_error_p(pic->err)) {
    xfprintf(file, "raise: ");
    pic_fwrite(pic, pic->err, file);
  } else {
    struct pic_error *e;

    e = pic_error_ptr(pic->err);
    if (e->type != pic_intern_cstr(pic, "")) {
      pic_fwrite(pic, pic_obj_value(e->type), file);
      xfprintf(file, " ");
    }
    xfprintf(file, "error: ");
    pic_fwrite(pic, pic_obj_value(e->msg), file);
    xfprintf(file, "\n");

    /* TODO: print error irritants */

    xfputs(pic_str_cstr(pic, e->stack), file);
  }
}
Exemple #3
0
pic_value
pic_ref(pic_state *pic, const char *name)
{
  size_t ai = pic_enter(pic);
  pic_value r = pic_global_ref(pic, pic_intern_cstr(pic, name));
  pic_leave(pic, ai);
  return pic_protect(pic, r);
}
Exemple #4
0
void
pic_define(pic_state *pic, const char *name, pic_value val)
{
  pic_value sym = pic_intern_cstr(pic, name);

  if (pic_dict_has(pic, pic->globals, sym)) {
    pic_warnf(pic, "redefining variable: %s", pic_str(pic, pic_sym_name(pic, sym), NULL));
  }
  pic_dict_set(pic, pic->globals, sym, val);
}
Exemple #5
0
static pic_value
pic_symbol_string_to_symbol(pic_state *pic)
{
  pic_value v;

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

  if (! pic_str_p(v)) {
    pic_error(pic, "string->symbol: expected string");
  }

  return pic_symbol_value(pic_intern_cstr(pic, pic_str_cstr(pic_str_ptr(v))));
}
Exemple #6
0
struct pic_proc *
pic_make_proc(pic_state *pic, pic_func_t func, const char *name)
{
  struct pic_proc *proc;

  assert(name != NULL);

  proc = (struct pic_proc *)pic_obj_alloc(pic, sizeof(struct pic_proc), PIC_TT_PROC);
  proc->kind = PIC_PROC_KIND_FUNC;
  proc->u.func.f = func;
  proc->u.func.name = pic_intern_cstr(pic, name);
  proc->env = NULL;
  return proc;
}
Exemple #7
0
struct pic_record *
pic_make_record(pic_state *pic, pic_value rectype)
{
  struct pic_record *rec;
  struct pic_dict *data;

  data = pic_make_dict(pic);

  rec = (struct pic_record *)pic_obj_alloc(pic, sizeof(struct pic_record), PIC_TT_RECORD);
  rec->data = data;

  pic_record_set(pic, rec, pic_intern_cstr(pic, "@@type"), rectype);

  return rec;
}
Exemple #8
0
pic_value
pic_make_error(pic_state *pic, const char *type, const char *msg, pic_value irrs)
{
  struct error *e;
  pic_value stack, ty = pic_intern_cstr(pic, type);

  stack = pic_get_backtrace(pic);

  e = (struct error *)pic_obj_alloc(pic, sizeof(struct error), PIC_TYPE_ERROR);
  e->type = pic_sym_ptr(pic, ty);
  e->msg = pic_str_ptr(pic, pic_cstr_value(pic, msg));
  e->irrs = irrs;
  e->stack = pic_str_ptr(pic, stack);

  return pic_obj_value(e);
}
Exemple #9
0
struct pic_proc *
pic_make_proc(pic_state *pic, pic_func_t func, const char *name)
{
  struct pic_proc *proc;
  pic_sym *sym;

  assert(name != NULL);

  sym = pic_intern_cstr(pic, name);

  proc = (struct pic_proc *)pic_obj_alloc(pic, sizeof(struct pic_proc), PIC_TT_PROC);
  proc->tag = PIC_PROC_TAG_FUNC;
  proc->u.f.func = func;
  proc->u.f.name = sym;
  proc->u.f.env = NULL;
  return proc;
}
Exemple #10
0
bool
pic_interned_p(pic_state *pic, pic_sym sym)
{
  return sym == pic_intern_cstr(pic, pic_symbol_name(pic, sym));
}
Exemple #11
0
void
pic_attr_set(pic_state *pic, pic_value obj, const char *key, pic_value v)
{
  pic_dict_set(pic, pic_attr(pic, obj), pic_intern_cstr(pic, key), v);
}
Exemple #12
0
pic_value
pic_attr_ref(pic_state *pic, pic_value obj, const char *key)
{
  return pic_dict_ref(pic, pic_attr(pic, obj), pic_intern_cstr(pic, key));
}
Exemple #13
0
void
pic_error(pic_state *pic, const char *msg, pic_value irrs)
{
  pic_throw(pic, pic_intern_cstr(pic, ""), msg, irrs);
}
Exemple #14
0
pic_value
pic_proc_env_ref(pic_state *pic, struct pic_proc *proc, const char *key)
{
  return pic_dict_ref(pic, pic_proc_env(pic, proc), pic_intern_cstr(pic, key));
}
Exemple #15
0
bool
pic_proc_env_has(pic_state *pic, struct pic_proc *proc, const char *key)
{
  return pic_dict_has(pic, pic_proc_env(pic, proc), pic_intern_cstr(pic, key));
}
Exemple #16
0
void
pic_add_feature(pic_state *pic, const char *feature)
{
  pic_push(pic, pic_intern_cstr(pic, feature), pic->features);
}
Exemple #17
0
void
pic_proc_env_set(pic_state *pic, struct pic_proc *proc, const char *key, pic_value val)
{
  pic_dict_set(pic, pic_proc_env(pic, proc), pic_intern_cstr(pic, key), val);
}
Exemple #18
0
pic_value
pic_record_type(pic_state *pic, struct pic_record *rec)
{
  return pic_record_ref(pic, rec, pic_intern_cstr(pic, "@@type"));
}