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); }
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); }
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)); }
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)); }
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); }
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))); }
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)); }
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)); }