コード例 #1
0
ファイル: state.c プロジェクト: picrin-scheme/benz
pic_value
pic_global_ref(pic_state *pic, pic_value sym)
{
  if (! pic_dict_has(pic, pic->globals, sym)) {
    pic_error(pic, "undefined variable", 1, sym);
  }
  return pic_dict_ref(pic, pic->globals, sym);
}
コード例 #2
0
ファイル: record.c プロジェクト: hopkinsr/picrin
pic_value
pic_record_ref(pic_state *pic, struct pic_record *rec, pic_sym *slot)
{
  if (! pic_dict_has(pic, rec->data, slot)) {
    pic_errorf(pic, "slot named ~s is not found for record: ~s", pic_obj_value(slot), rec);
  }
  return pic_dict_ref(pic, rec->data, slot);
}
コード例 #3
0
ファイル: dict.c プロジェクト: ktakashi/picrin
static pic_value
pic_dict_dictionary_ref(pic_state *pic)
{
  struct pic_dict *dict;
  pic_sym *key;

  pic_get_args(pic, "dm", &dict, &key);

  if (! pic_dict_has(pic, dict, key)) {
    return pic_false_value();
  }
  return pic_cons(pic, pic_obj_value(key), pic_dict_ref(pic, dict, key));
}
コード例 #4
0
ファイル: write.c プロジェクト: leavesbnw/picrin
static void
write_dict(struct writer_control *p, struct pic_dict *dict)
{
  pic_state *pic = p->pic;
  xFILE *file = p->file;
  pic_sym *sym;
  khiter_t it;

  xfprintf(pic, file, "#.(dictionary");
  pic_dict_for_each (sym, dict, it) {
    xfprintf(pic, file, " '%s ", pic_symbol_name(pic, sym));
    write_core(p, pic_dict_ref(pic, dict, sym));
  }
コード例 #5
0
ファイル: dict.c プロジェクト: ktakashi/picrin
static pic_value
pic_dict_dictionary_to_alist(pic_state *pic)
{
  struct pic_dict *dict;
  pic_value item, alist = pic_nil_value();
  pic_sym *sym;
  khiter_t it;

  pic_get_args(pic, "d", &dict);

  pic_dict_for_each (sym, dict, it) {
    item = pic_cons(pic, pic_obj_value(sym), pic_dict_ref(pic, dict, sym));
    pic_push(pic, item, alist);
  }
コード例 #6
0
ファイル: lib.c プロジェクト: omasanori/benz
static void
import_table(pic_state *pic, pic_value spec, struct pic_dict *imports)
{
  struct pic_lib *lib;
  struct pic_dict *table;
  pic_value val, tmp, prefix;
  pic_sym *sym, *id, *tag;

  table = pic_make_dict(pic);

  if (pic_pair_p(spec) && pic_sym_p(pic_car(pic, spec))) {

    tag = pic_sym_ptr(pic_car(pic, spec));

    if (tag == pic->sONLY) {
      import_table(pic, pic_cadr(pic, spec), table);

      pic_for_each (val, pic_cddr(pic, spec)) {
        pic_dict_set(pic, imports, pic_sym_ptr(val), pic_dict_ref(pic, table, pic_sym_ptr(val)));
      }
コード例 #7
0
ファイル: attr.c プロジェクト: omasanori/benz
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));
}
コード例 #8
0
ファイル: proc.c プロジェクト: hopkinsr/picrin
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));
}