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(pic_state *pic) { struct pic_dict *dict; pic_value *argv; int argc, i; pic_get_args(pic, "*", &argc, &argv); dict = pic_make_dict(pic); for (i = 0; i < argc; i += 2) { pic_assert_type(pic, argv[i], sym); pic_dict_set(pic, dict, pic_sym_ptr(argv[i]), argv[i+1]); } return pic_obj_value(dict); }
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(); }
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))); }
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); }
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); }
void pic_global_set(pic_state *pic, pic_value sym, pic_value value) { pic_dict_set(pic, pic->globals, sym, value); }
void pic_record_set(pic_state *pic, struct pic_record *rec, pic_sym *slot, pic_value val) { pic_dict_set(pic, rec->data, slot, val); }