int sizeClass = _class.sizeClass - _class.offsetClass;
Class enumBase = null;
char * dataTypeString = null;
+ // NOTE: baseClass is class(class)
Class baseClass;
uint offsetBefore = _class.offset;
int offsetClass, totalSizeClass;
for(baseClass = base; baseClass.base; baseClass = baseClass.base);
-
- if(base && !base.internalDecl && (base.type == noHeadClass || base.type == structClass || base.type == normalClass)) type = base.type;
+
+ if(base && !base.internalDecl && (base.type == noHeadClass || base.type == structClass || base.type == normalClass))
+ {
+ // Normal classes inheriting off simple classes should become no head classes
+ if(base.type == structClass && type == normalClass)
+ type = noHeadClass;
+ else
+ type = base.type;
+ }
+ if(base && (_class.type == normalClass || _class.type == noHeadClass || _class.type == structClass) &&
+ (base.type == unitClass || base.type == bitClass || base.type == enumClass))
+ {
+ type = base.type;
+ }
if(type == enumClass)
{
if(method.type == virtualMethod)
method.vid += mod.base.vTblSize - baseClass.vTblSize;
}
+ }
for(b = mod.base; b && b != null; b = b.base)
{
}
}
}
- }
+ //}
+ // Trying to simply move out the above block of code outside the if to handle this
+ /*
// Also doing this now, otherwise overridden methods of base classes from intermediate classes will not be set in higher level class
// (e.g. OnGetString overridden in Id , Location inheriting from Id, LocationAbbreviation created later inheriting from Location would not get Id's OnGetString)
for(b = mod.base; b && b != null; b = b.base)
{
if(vMethod.type == virtualMethod)
{
- if(_class._vTbl[vMethod.vid] == baseClass._vTbl[vMethod.vid] && _class._vTbl[vMethod.vid] != _class.base._vTbl[vMethod.vid])
+ if(_class._vTbl[vMethod.vid] == b._vTbl[vMethod.vid] && _class._vTbl[vMethod.vid] != _class.base._vTbl[vMethod.vid])
_class._vTbl[vMethod.vid] = _class.base._vTbl[vMethod.vid];
}
}
}
+ */
}
// _class.defaultAlignment = base ? base.defaultAlignment : 0;