chimp_bool_t chimp_symtable_class_bootstrap (void) { chimp_symtable_class = chimp_class_new ( CHIMP_STR_NEW("symtable"), NULL, sizeof(ChimpSymtable)); if (chimp_symtable_class == NULL) { return CHIMP_FALSE; } CHIMP_CLASS(chimp_symtable_class)->init = _chimp_symtable_init; CHIMP_CLASS(chimp_symtable_class)->mark = _chimp_symtable_mark; chimp_gc_make_root (NULL, chimp_symtable_class); return CHIMP_TRUE; }
static ChimpRef * _chimp_symtable_init (ChimpRef *self, ChimpRef *args) { ChimpRef *filename; ChimpRef *ast; if (!chimp_method_parse_args (args, "oo", &filename, &ast)) { return NULL; } CHIMP_ANY(self)->klass = chimp_symtable_class; CHIMP_SYMTABLE(self)->filename = filename; CHIMP_SYMTABLE(self)->ste = chimp_nil; CHIMP_SYMTABLE(self)->lookup = chimp_hash_new (); if (CHIMP_SYMTABLE(self)->lookup == NULL) { return NULL; } CHIMP_SYMTABLE(self)->stack = chimp_array_new (); if (CHIMP_SYMTABLE(self)->stack == NULL) { return NULL; } if (CHIMP_ANY_CLASS(ast) == chimp_ast_mod_class) { if (!chimp_symtable_visit_mod (self, ast)) return NULL; } else { CHIMP_BUG ("unknown top-level AST node type: %s", CHIMP_STR_DATA(CHIMP_CLASS(CHIMP_ANY_CLASS(ast))->name)); return NULL; } return self; }
chimp_bool_t chimp_task_class_bootstrap (void) { chimp_task_class = chimp_class_new (CHIMP_STR_NEW("task"), NULL, sizeof(ChimpTask)); if (chimp_task_class == NULL) { return CHIMP_FALSE; } CHIMP_CLASS(chimp_task_class)->init = _chimp_task_init; CHIMP_CLASS(chimp_task_class)->dtor = _chimp_task_dtor; CHIMP_CLASS(chimp_task_class)->str = _chimp_task_str; CHIMP_CLASS(chimp_task_class)->cmp = _chimp_task_cmp; CHIMP_CLASS(chimp_task_class)->mark = _chimp_task_mark; chimp_gc_make_root (NULL, chimp_task_class); chimp_class_add_native_method (chimp_task_class, "send", _chimp_task_send); chimp_class_add_native_method (chimp_task_class, "join", _chimp_task_join); return CHIMP_TRUE; }
chimp_bool_t chimp_hash_class_bootstrap (void) { chimp_hash_class = chimp_class_new (CHIMP_STR_NEW("hash"), chimp_object_class, sizeof(ChimpHash)); if (chimp_hash_class == NULL) { return CHIMP_FALSE; } CHIMP_CLASS(chimp_hash_class)->str = chimp_hash_str; CHIMP_CLASS(chimp_hash_class)->dtor = _chimp_hash_dtor; CHIMP_CLASS(chimp_hash_class)->getitem = _chimp_hash_getitem; CHIMP_CLASS(chimp_hash_class)->mark = _chimp_hash_mark; chimp_gc_make_root (NULL, chimp_hash_class); chimp_class_add_native_method (chimp_hash_class, "put", _chimp_hash_put); chimp_class_add_native_method (chimp_hash_class, "get", _chimp_hash_get); chimp_class_add_native_method (chimp_hash_class, "size", _chimp_hash_size); chimp_class_add_native_method (chimp_hash_class, "items", _chimp_hash_items); return CHIMP_TRUE; }