static chimp_bool_t chimp_symtable_add (ChimpRef *self, ChimpRef *name, int64_t flags) { ChimpRef *ste = CHIMP_SYMTABLE_GET_CURRENT_ENTRY(self); ChimpRef *symbols = CHIMP_SYMTABLE_ENTRY(ste)->symbols; ChimpRef *fl = chimp_int_new (flags); if (fl == NULL) { return CHIMP_FALSE; } if (!chimp_hash_put (symbols, name, fl)) { return CHIMP_FALSE; } return CHIMP_TRUE; }
chimp_bool_t chimp_task_add_module (ChimpTaskInternal *task, ChimpRef *module) { if (task == NULL) { task = chimp_task_current (); } if (task->modules == NULL) { task->modules = chimp_hash_new (); if (task->modules == NULL) { return CHIMP_FALSE; } chimp_gc_make_root (NULL, task->modules); } return chimp_hash_put (task->modules, CHIMP_MODULE(module)->name, module); }
static chimp_bool_t chimp_symtable_enter_scope (ChimpRef *self, ChimpRef *scope, int flags) { ChimpRef *ste = CHIMP_SYMTABLE_GET_CURRENT_ENTRY(self); ChimpRef *new_ste = chimp_symtable_entry_new (self, ste, scope, flags); if (new_ste == NULL) { return CHIMP_FALSE; } if (!chimp_hash_put (CHIMP_SYMTABLE(self)->lookup, scope, new_ste)) { return CHIMP_FALSE; } if (ste != chimp_nil) { if (!chimp_array_push (CHIMP_SYMTABLE(self)->stack, ste)) { return CHIMP_FALSE; } if (!chimp_array_push (CHIMP_SYMTABLE_ENTRY_CHILDREN(ste), new_ste)) { return CHIMP_FALSE; } } CHIMP_SYMTABLE(self)->ste = new_ste; return CHIMP_TRUE; }
chimp_bool_t chimp_hash_put_str (ChimpRef *self, const char *key, ChimpRef *value) { return chimp_hash_put (self, chimp_str_new (key, strlen(key)), value); }