removed the nivars and ncvars fields from class
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
dfc6ec94f4
commit
fb25712133
@ -3933,9 +3933,13 @@ static int execute (hcl_t* hcl)
|
||||
/* 0(non-kernel object), 1(incomplete kernel object), 2(complete kernel object) */
|
||||
if (HCL_OBJ_GET_FLAGS_KERNEL(class_obj) == 1)
|
||||
{
|
||||
hcl_logbfmt (hcl, HCL_LOG_STDERR, ">>>%O c->sc=%O sc=%O b2=%d b3=%d nivars=%d ncvars=%d<<<\n", class_obj, class_obj->superclass, superclass, b2, b3, (int)HCL_OOP_TO_SMOOI(class_obj->nivars), (int)HCL_OOP_TO_SMOOI(class_obj->ncvars));
|
||||
/* check if the new definition is compatible with kernel definition */
|
||||
if (class_obj->superclass != superclass || HCL_OOP_TO_SMOOI(class_obj->nivars) != b2 || HCL_OOP_TO_SMOOI(class_obj->ncvars) != b3)
|
||||
hcl_ooi_t spec, selfspec;
|
||||
|
||||
spec = HCL_OOP_TO_SMOOI(class_obj->spec);
|
||||
selfspec = HCL_OOP_TO_SMOOI(class_obj->selfspec);
|
||||
hcl_logbfmt (hcl, HCL_LOG_STDERR, ">>>%O c->sc=%O sc=%O b2=%d b3=%d nivars=%d ncvars=%d<<<\n", class_obj, class_obj->superclass, superclass, b2, b3, (int)HCL_CLASS_SPEC_NAMED_INSTVARS(spec), (int)HCL_CLASS_SELFSPEC_CLASSVARS(spec));
|
||||
if (class_obj->superclass != superclass || HCL_CLASS_SPEC_NAMED_INSTVARS(spec) != b2 || HCL_CLASS_SELFSPEC_CLASSVARS(selfspec) != b3)
|
||||
{
|
||||
hcl_seterrbfmt (hcl, HCL_EPERM, "incompatible redefintion of %.*js", HCL_OBJ_GET_SIZE(class_name), HCL_OBJ_GET_CHAR_SLOT(class_name));
|
||||
if (do_throw_with_internal_errmsg(hcl, fetched_instruction_pointer) >= 0) break;
|
||||
|
5
lib/gc.c
5
lib/gc.c
@ -1185,9 +1185,8 @@ static hcl_oop_class_t alloc_kernel_class (hcl_t* hcl, int class_flags, hcl_oow_
|
||||
c->selfspec = HCL_SMOOI_TO_OOP(HCL_CLASS_SELFSPEC_MAKE(num_classvars, 0, class_flags));
|
||||
|
||||
/* TODO: remove the following two duplicate fields with the spec fields */
|
||||
c->nivars = HCL_SMOOI_TO_OOP(HCL_CLASS_SPEC_NAMED_INSTVARS(spec));
|
||||
//c->nivars = HCL_SMOOI_TO_OOP(0);
|
||||
c->ncvars = HCL_SMOOI_TO_OOP(num_classvars);
|
||||
//c->nivars = HCL_SMOOI_TO_OOP(HCL_CLASS_SPEC_NAMED_INSTVARS(spec));
|
||||
//c->ncvars = HCL_SMOOI_TO_OOP(num_classvars);
|
||||
c->nivars_super = HCL_SMOOI_TO_OOP(0); /* TODO: encode it into spec? */
|
||||
c->ibrand = HCL_SMOOI_TO_OOP(ibrand);
|
||||
|
||||
|
@ -858,7 +858,7 @@ struct hcl_process_scheduler_t
|
||||
};
|
||||
|
||||
|
||||
#define HCL_CLASS_NAMED_INSTVARS 11
|
||||
#define HCL_CLASS_NAMED_INSTVARS 9
|
||||
typedef struct hcl_class_t hcl_class_t;
|
||||
typedef struct hcl_class_t* hcl_oop_class_t;
|
||||
struct hcl_class_t
|
||||
@ -872,8 +872,6 @@ struct hcl_class_t
|
||||
hcl_oop_t selfspec; /* SmallInteger. specification of the class object itself */
|
||||
|
||||
hcl_oop_t superclass;
|
||||
hcl_oop_t nivars; /* SmallInteger. */
|
||||
hcl_oop_t ncvars; /* SmallInteger. */
|
||||
hcl_oop_t nivars_super; /* SmallInteger */
|
||||
hcl_oop_t ibrand; /* SmallInteger */
|
||||
|
||||
|
14
lib/obj.c
14
lib/obj.c
@ -488,14 +488,22 @@ hcl_oop_t hcl_makeclass (hcl_t* hcl, hcl_oop_t class_name, hcl_oop_t superclass,
|
||||
/* TODO: other flags... indexable? byte? word?*/
|
||||
spec = HCL_CLASS_SPEC_MAKE(nivars, 0, 0); /* TODO: how to include nivars_super ? */
|
||||
selfspec = HCL_CLASS_SELFSPEC_MAKE(ncvars, 0, 0);
|
||||
nivars_super = HCL_IS_NIL(hcl, superclass)? 0: HCL_OOP_TO_SMOOI(((hcl_oop_class_t)superclass)->nivars_super) + HCL_OOP_TO_SMOOI(((hcl_oop_class_t)superclass)->nivars);
|
||||
|
||||
if (!HCL_IS_NIL(hcl, superclass))
|
||||
{
|
||||
hcl_ooi_t superspec;
|
||||
superspec = HCL_OOP_TO_SMOOI(((hcl_oop_class_t)superclass)->spec);
|
||||
nivars_super = HCL_OOP_TO_SMOOI(((hcl_oop_class_t)superclass)->nivars_super) + HCL_CLASS_SPEC_NAMED_INSTVARS(superspec);
|
||||
}
|
||||
else
|
||||
{
|
||||
nivars_super = 0;
|
||||
}
|
||||
|
||||
c->spec = HCL_SMOOI_TO_OOP(spec);
|
||||
c->selfspec = HCL_SMOOI_TO_OOP(selfspec);
|
||||
c->name = class_name;
|
||||
c->superclass = superclass;
|
||||
c->nivars = HCL_SMOOI_TO_OOP(nivars);
|
||||
c->ncvars = HCL_SMOOI_TO_OOP(ncvars);
|
||||
c->nivars_super = HCL_SMOOI_TO_OOP(nivars_super);
|
||||
c->ibrand = HCL_SMOOI_TO_OOP(HCL_BRAND_INSTANCE); /* TODO: really need ibrand??? */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user