/* dictop.c: Function operators for dictionary manipulation. */ #define _POSIX_SOURCE #include "x.tab.h" #include "operator.h" #include "execute.h" #include "data.h" #include "ident.h" #include "memory.h" void op_dict_keys(void) { Data *args; List *keys; if (!func_init_1(&args, DICT)) return; keys = dict_keys(args[0].u.dict); pop(1); push_list(keys); list_discard(keys); } void op_dict_add(void) { Data *args; if (!func_init_3(&args, DICT, 0, 0)) return; anticipate_assignment(); args[0].u.dict = dict_add(args[0].u.dict, &args[1], &args[2]); pop(2); } void op_dict_del(void) { Data *args; if (!func_init_2(&args, DICT, 0)) return; if (!dict_contains(args[0].u.dict, &args[1])) { throw(keynf_id, "Key (%D) is not in the dictionary.", &args[1]); } else { anticipate_assignment(); args[0].u.dict = dict_del(args[0].u.dict, &args[1]); pop(1); } } void op_dict_contains(void) { Data *args; int val; if (!func_init_2(&args, DICT, 0)) return; val = dict_contains(args[0].u.dict, &args[1]); pop(2); push_int(val); }