msgid "Redefinition of %s ignored\n"
msgstr "Redefinition of %s ignored\n"
-#: ./src/firstPass.ec:444
+#: ./src/firstPass.ec:446
msgid "Redefinition of method %s in class %s\n"
msgstr "Redefinition of method %s in class %s\n"
for(d = decl.declarators->first; d; d = d.next)
{
+ if(d.type != structDeclarator)
+ continue; // This should always be a structDeclarator (There's a bug somewhere else if it's not)
if(d.structDecl.exp)
{
classType = bitClass;
{
Declarator funcDecl = GetFuncDecl(func.declarator);
Identifier id = GetDeclId(funcDecl);
- Method method;
+ Method method;
if(func.isVirtual)
{
{
Class _class = derivative.data;
ClassType type = _class.type;
+ ClassType oldType = type;
int size = _class.structSize - _class.offset;
int oldSizeClass = _class.sizeClass;
int sizeClass = _class.sizeClass - _class.offsetClass;
}
// if(mod.base.memberID)
{
- for(member = _class.membersAndProperties.first; member; member = member.next)
+ DataMember next;
+ for(member = _class.membersAndProperties.first; member; member = next)
{
int offsetDiff = _class.offset - offsetBefore;
- if(!member.isProperty && offsetDiff > 0)
+ next = member.next;
+ if(!member.isProperty)
{
- member.offset += offsetDiff;
- member.memberOffset += offsetDiff;
+ if(oldType == bitClass && type != bitClass)
+ {
+ DataMember prev = member.prev;
+ // Correcting a bitClass to be a non-bit class (This should really never be required)
+ _class.membersAndProperties.Remove(member);
+ member = (DataMember)renew0 member byte[sizeof (class DataMember)];
+ _class.membersAndProperties.Insert(prev, member);
+ }
+
+ if(offsetDiff > 0)
+ {
+ member.offset += offsetDiff;
+ member.memberOffset += offsetDiff;
+ }
}
member.id += mod.base.memberID;
}
****************************************************************************/
void FreeParser()
{
- this.defines.Free(FreeModuleDefine);
- this.imports.Free(FreeModuleImport);
-
if(ast != null)
{
FreeASTTree(ast);
ast = null;
}
+ this.defines.Free(FreeModuleDefine);
+ this.imports.Free(FreeModuleImport); // Moved this after FreeAST because Debug printing causes ModuleImports to be created
+
FreeExcludedSymbols(this.excludedSymbols);
FreeContext(this.globalContext);
FreeIncludeFiles();