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); }
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); }
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 pic_value pic_dict_dictionary_set(pic_state *pic) { struct pic_dict *dict; pic_sym *key; pic_value val; pic_get_args(pic, "dmo", &dict, &key, &val); if (pic_undef_p(val)) { if (pic_dict_has(pic, dict, key)) { pic_dict_del(pic, dict, key); } } else { pic_dict_set(pic, dict, key, val); } return pic_undef_value(); }
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)); }