Implement C3 class linearization and validate inheritance graphs
Build / AerScript (push) Successful in 2m13s
Build / AerScript (push) Successful in 2m13s
This commit is contained in:
@@ -1043,6 +1043,10 @@ struct ph7_class {
|
||||
SyHash hAttr; /* Class attributes [i.e: variables and constants] */
|
||||
SyHash hMethod; /* Class methods */
|
||||
SySet aInterface; /* Implemented interface container */
|
||||
ph7_class_info *pInfo; /* Declaration used to resolve forward bases */
|
||||
SySet aBase; /* Direct class bases in extends order */
|
||||
SySet aMro; /* C3 linearization, including this class first */
|
||||
sxi32 iMroState; /* 0: unbuilt, 1: building, 2: ready */
|
||||
};
|
||||
/* Class configuration flags */
|
||||
#define PH7_CLASS_FINAL 0x001 /* Class is final [cannot be extended] */
|
||||
@@ -1766,6 +1770,7 @@ PH7_PRIVATE ph7_class_attr *PH7_ClassExtractAttribute(ph7_class *pClass, cons
|
||||
PH7_PRIVATE sxi32 PH7_ClassInstallAttr(ph7_class *pClass, ph7_class_attr *pAttr);
|
||||
PH7_PRIVATE sxi32 PH7_ClassInstallMethod(ph7_class *pClass, ph7_class_method *pMeth);
|
||||
PH7_PRIVATE sxi32 PH7_ClassInherit(ph7_vm *pVm, ph7_class *pSub, ph7_class *pBase);
|
||||
PH7_PRIVATE sxi32 PH7_ClassBuildMro(ph7_vm *pVm, ph7_class *pClass);
|
||||
PH7_PRIVATE sxi32 PH7_ClassInterfaceInherit(ph7_class *pSub, ph7_class *pBase);
|
||||
PH7_PRIVATE sxi32 PH7_ClassImplement(ph7_vm *pVm, ph7_class *pMain, ph7_class *pInterface);
|
||||
PH7_PRIVATE ph7_class_instance *PH7_NewClassInstance(ph7_vm *pVm, ph7_class *pClass);
|
||||
|
||||
Reference in New Issue
Block a user