{
type = base->type;
}
-if(!base || base->type == 1000)
+if(!base || base->type == 1000 || (base->type == 0 && base->base && !base->base->base))
{
if(type == 4)
{
{
for(; _class && from; _class = _class->base)
{
-if(_class == from || _class->templateClass == from || (_class->type == 1000 && from->name && !strcmp(_class->name, from->name)))
+if(_class == from || _class->templateClass == from || ((_class->type == 1000 || (_class->type == 0 && _class->base && !_class->base->base)) && from->name && !strcmp(_class->name, from->name)))
return 0x1;
}
}
}
}
base = _class->base;
-if(base && base->type == 1000)
+if(base && (base->type == 1000 || (base->type == 0 && base->base && !base->base->base)))
base = (((void *)0));
if(_class->Destructor)
_class->Destructor(instance);
}
}
base = _class->base;
-if(base && base->type == 1000)
+if(base && (base->type == 1000 || (base->type == 0 && base->base && !base->base->base)))
base = (((void *)0));
}
}
{
struct __ecereNameSpace__ecere__com__Class * instanceClass = __ecereNameSpace__ecere__com__eSystem_RegisterClass(0, "ecere::com::Instance", (((void *)0)), 0, 0, (((void *)0)), (((void *)0)), module, 4, 1);
-instanceClass->type = 1000;
+instanceClass->type = 0;
instanceClass->fixed = 0x1;
instanceClass->memberOffset = 0;
instanceClass->offset = 0;
thisExp->prev = (((void *)0));
thisExp->next = (((void *)0));
__ecereMethod_Expression_Clear(e);
-if((type->kind == 8 && type->_class && type->_class->registered && strcmp(type->_class->registered->fullName, "ecere::com::Instance") && (type->_class->registered->type == 1000 || type->_class->registered->type == 2 || type->_class->registered->type == 4 || type->_class->registered->type == 3)) || (type->kind != 13 && type->kind != 12 && type->kind != 8) || (!destType->byReference && byReference && (destType->kind != 13 || type->kind != 13)))
+if((type->kind == 8 && type->_class && type->_class->registered && (type->_class->registered->type == 1000 || type->_class->registered->type == 2 || type->_class->registered->type == 4 || type->_class->registered->type == 3)) || (type->kind != 13 && type->kind != 22 && type->kind != 12 && type->kind != 8) || (!destType->byReference && byReference && (destType->kind != 13 || type->kind != 13)))
{
e->type = 4;
e->op.op = '*';
{
struct __ecereNameSpace__ecere__com__Class * _class = type->_class ? type->_class->registered : (((void *)0));
-if(_class && (_class->type == 1 || _class->type == 5 || (_class->type == 1000 && _class->base && strcmp(_class->fullName, "uintptr") && strcmp(_class->fullName, "intptr") && strcmp(_class->fullName, "uintsize") && strcmp(_class->fullName, "intsize") && strcmp(_class->fullName, "ecere::com::Instance") && strcmp(_class->fullName, "ecere::com::Class") && strcmp(_class->dataTypeString, "char *"))))
+if(_class && (_class->type == 1 || _class->type == 5 || (_class->type == 1000 && _class->base && strcmp(_class->fullName, "uintptr") && strcmp(_class->fullName, "intptr") && strcmp(_class->fullName, "uintsize") && strcmp(_class->fullName, "intsize"))))
{
if(wantReference != (e->byReference || isPointer))
{
object->usage = (object->usage & ~0x80) | (((unsigned int)0x1) << 7);
ProcessExpression(object);
ListAdd(args, object);
-if(exp->expType && exp->expType->kind == 8 && exp->expType->_class && exp->expType->_class->registered && ((exp->expType->_class->registered->type == 0 && !__ecereNameSpace__ecere__com__eClass_IsDerived(exp->expType->_class->registered, __ecereNameSpace__ecere__com__eSystem_FindClass(exp->expType->_class->registered->module, "char *"))) || (exp->expType->_class->registered->type == 1000 && !strcmp(exp->expType->_class->string, "ecere::com::Instance"))))
+if(exp->expType && exp->expType->kind == 8 && exp->expType->_class && exp->expType->_class->registered && exp->expType->_class->registered->type == 0 && strcmp(exp->expType->_class->registered->dataTypeString, "char *"))
{
struct Expression * decRefExp = MkExpCall(QMkExpId("ecere::com::eInstance_DecRef"), args);
}
else if(_class)
{
-if((_class->type != 1000 || !strcmp(_class->fullName, "enum") || !strcmp(_class->fullName, "ecere::com::Instance") || (_class->dataTypeString && !strcmp(_class->dataTypeString, "char *")) || !strcmp(_class->fullName, "uint64") || !strcmp(_class->fullName, "uint32") || !strcmp(_class->fullName, "uint16") || !strcmp(_class->fullName, "uintptr") || !strcmp(_class->fullName, "intptr") || !strcmp(_class->fullName, "uintsize") || !strcmp(_class->fullName, "intsize") || !strcmp(_class->fullName, "uint") || !strcmp(_class->fullName, "byte")))
+if((_class->type != 1000 || !strcmp(_class->fullName, "enum") || (_class->dataTypeString && !strcmp(_class->dataTypeString, "char *")) || !strcmp(_class->fullName, "uint64") || !strcmp(_class->fullName, "uint32") || !strcmp(_class->fullName, "uint16") || !strcmp(_class->fullName, "uintptr") || !strcmp(_class->fullName, "intptr") || !strcmp(_class->fullName, "uintsize") || !strcmp(_class->fullName, "intsize") || !strcmp(_class->fullName, "uint") || !strcmp(_class->fullName, "byte")))
{
(__ecereNameSpace__ecere__com__eSystem_Delete(spec->name), spec->name = 0);
if(_class->dataTypeString)
}
if(_class && _class->dataTypeString && !strcmp(_class->dataTypeString, "char *"))
return 0x1;
-if(!_class || _class->type == 0 || _class->type == 5 || !strcmp(_class->fullName, "ecere::com::Instance"))
+if(!_class || _class->type == 0 || _class->type == 5)
return 0x1;
else if(param && _class->type == 1)
return (unsigned int)2;
{
struct Symbol * classSym = (spec->type == 1) ? spec->symbol : (((void *)0));
-if(type->classObjectType && (!classSym || (classSym && classSym->registered && (classSym->registered->type == 4 || classSym->registered->type == 2 || classSym->registered->type == 3 || (classSym->registered->type == 1000 && strcmp(classSym->string, "ecere::com::Instance") && strcmp(classSym->string, "ecere::com::Class"))))))
+if(type->classObjectType && (!classSym || (classSym && classSym->registered && (classSym->registered->type == 4 || classSym->registered->type == 2 || classSym->registered->type == 3))))
ReplaceByInstancePtr(spec, &type->declarator, 2);
}
InstDeclPassSpecifier(spec);
thisExp.next = null;
e.Clear();
- if( ( type.kind == classType && type._class && type._class.registered && strcmp(type._class.registered.fullName, "ecere::com::Instance") &&
+ if( ( type.kind == classType && type._class && type._class.registered &&
(type._class.registered.type == systemClass || type._class.registered.type == bitClass ||
type._class.registered.type == enumClass || type._class.registered.type == unitClass) ) ||
(type.kind != pointerType && type.kind != arrayType && type.kind != classType) ||
strcmp(_class.fullName, "uintptr") &&
strcmp(_class.fullName, "intptr") &&
strcmp(_class.fullName, "uintsize") &&
- strcmp(_class.fullName, "intsize") &&
- strcmp(_class.fullName, "ecere::com::Instance") &&
- strcmp(_class.fullName, "ecere::com::Class") &&
- strcmp(_class.dataTypeString, "char *"))))
+ strcmp(_class.fullName, "intsize"))))
{
// if(wantReference != ((_class.type == systemClass) ? false : e.byReference))
if(wantReference != (e.byReference || isPointer))
// TOFIX: Same time as when we fix for = 0
if(exp.expType && exp.expType.kind == classType && exp.expType._class && exp.expType._class.registered &&
- ((exp.expType._class.registered.type == normalClass &&
- // TODO: Improve on this, only fixed this issue here... Different String class defined in each module
- !eClass_IsDerived(exp.expType._class.registered, eSystem_FindClass(exp.expType._class.registered.module, "char *")) /*strcmp(exp.expType._class.string, "String")*/) ||
- (exp.expType._class.registered.type == systemClass && !strcmp(exp.expType._class.string, "ecere::com::Instance"))))
+ exp.expType._class.registered.type == normalClass &&
+ strcmp(exp.expType._class.registered.dataTypeString, "char *"))
{
Expression decRefExp = MkExpCall(QMkExpId("ecere::com::eInstance_DecRef"), args);
ProcessExpressionType(decRefExp);
{
if((_class.type != systemClass ||
!strcmp(_class.fullName, "enum") ||
- !strcmp(_class.fullName, "ecere::com::Instance") ||
(_class.dataTypeString && !strcmp(_class.dataTypeString, "char *")) ||
//strcmp(_class.fullName, "bool") &&
!strcmp(_class.fullName, "uint64") ||
if(_class && _class.dataTypeString && !strcmp(_class.dataTypeString, "char *"))
return true; //false;
- if(!_class || _class.type == normalClass || _class.type == noHeadClass || !strcmp(_class.fullName, "ecere::com::Instance"))
+ if(!_class || _class.type == normalClass || _class.type == noHeadClass)
return true;
else if(param && _class.type == structClass)
return 2;
{
Symbol classSym = (spec.type == nameSpecifier) ? spec.symbol /*FindClass(spec.name)*/ : null;
if(type.classObjectType && (!classSym || (classSym && classSym.registered &&
- (classSym.registered.type == enumClass || classSym.registered.type == bitClass || classSym.registered.type == unitClass ||
- (classSym.registered.type == systemClass && strcmp(classSym.string, "ecere::com::Instance") && strcmp(classSym.string, "ecere::com::Class"))))))
+ (classSym.registered.type == enumClass || classSym.registered.type == bitClass || classSym.registered.type == unitClass))))
ReplaceByInstancePtr(spec, &type.declarator, 2);
}
InstDeclPassSpecifier(spec);
{
type = base.type;
}
- if(!base || base.type == systemClass)
+ if(!base || base.type == systemClass || (base.type == normalClass && base.base && !base.base.base))
{
if(type == enumClass)
{
{
for(; _class && from; _class = _class.base)
{
- if(_class == from || _class.templateClass == from || (_class.type == systemClass && from.name && !strcmp(_class.name, from.name)))
+ if(_class == from || _class.templateClass == from || ((_class.type == systemClass || (_class.type == normalClass && _class.base && !_class.base.base)) && from.name && !strcmp(_class.name, from.name)))
return true;
}
}
base = _class.base;
- if(base && base.type == systemClass) base = null;
+ if(base && (base.type == systemClass || (base.type == normalClass && base.base && !base.base.base))) base = null;
if(_class.Destructor)
_class.Destructor(instance);
#ifdef MEMINFO
}
}
base = _class.base;
- if(base && base.type == systemClass) base = null;
+ if(base && (base.type == systemClass || (base.type == normalClass && base.base && !base.base.base))) base = null;
}
}
}
{
Class instanceClass = eSystem_RegisterClass(normalClass, "ecere::com::Instance", null, 0, 0, null, null, module, baseSystemAccess, publicAccess);
// Instance should really be a Normal class, but inheritance checks for systemClass to see if something has a non system ancestor
- instanceClass.type = systemClass;
+ instanceClass.type = normalClass;
instanceClass.fixed = true;
instanceClass.memberOffset = 0;
instanceClass.offset = 0;