// Creates a new class object as well as its associated metaclass. public ObjClass(ObjClass superclass, int numFields, ObjString name) { Methods = new Method[InitialMethodSize]; Superclass = superclass; NumFields = numFields; Name = name; // Create the metaclass. ObjString metaclassName = new ObjString(name + " metaclass"); ObjClass metaclass = new ObjClass(0, metaclassName) { ClassObj = ClassClass }; // Metaclasses always inherit Class and do not parallel the non-metaclass // hierarchy. metaclass.BindSuperclass(ClassClass); ClassObj = metaclass; BindSuperclass(superclass); }
// Creates a new class object as well as its associated metaclass. public ObjClass(ObjClass superclass, int numFields, ObjString name) { Methods = new Method[InitialMethodSize]; Superclass = superclass; NumFields = numFields; Name = name; // Create the metaclass. ObjString metaclassName = new ObjString(name + " metaclass"); ObjClass metaclass = new ObjClass(0, metaclassName) { ClassObj = ClassClass }; // Metaclasses always inherit Class and do not parallel the non-metaclass // hierarchy. metaclass.BindSuperclass(ClassClass); ClassObj = metaclass; BindSuperclass(superclass); }