Obj* VTable_make_obj(VTable *self) { Obj *obj = (Obj*)Memory_wrapped_calloc(self->obj_alloc_size, 1); obj->vtable = self; obj->refcount = 1; return obj; }
Obj* Class_Make_Obj_IMP(Class *self) { Obj *obj = (Obj*)Memory_wrapped_calloc(self->obj_alloc_size, 1); obj->klass = self; obj->refcount = 1; return obj; }
static Class* S_simple_subclass(Class *parent, String *name) { if (parent->flags & CFISH_fFINAL) { THROW(ERR, "Can't subclass final class %o", Class_Get_Name(parent)); } Class *subclass = (Class*)Memory_wrapped_calloc(parent->class_alloc_size, 1); Class_Init_Obj(parent->klass, subclass); subclass->parent = parent; subclass->flags = parent->flags; subclass->obj_alloc_size = parent->obj_alloc_size; subclass->class_alloc_size = parent->class_alloc_size; subclass->methods = (Method**)CALLOCATE(1, sizeof(Method*)); S_set_name(subclass, Str_Get_Ptr8(name), Str_Get_Size(name)); memcpy(subclass->vtable, parent->vtable, parent->class_alloc_size - offsetof(Class, vtable)); return subclass; }