int numParams; // TOTAL number of params including all base classes; use templateParams.count for this level
bool isInstanceClass;
bool byValueSystemClass;
+ void * bindingsClass;
property const char *
{
{
OldLink derivative;
- ComputeClassParameters(base, strchr(base.name, '<'), null, true);
+ ComputeClassParameters(base, strchr(base.name, '<'), null, base.templateClass != mod);
for(derivative = base.derivatives.first; derivative; derivative = derivative.next)
{
{
case type:
argument.dataTypeString = CopyString(value);
- argument.dataTypeClass = System_FindClass(findModule, value, true);
+ argument.dataTypeClass = System_FindClass(findModule, value, registerInternalDecl);
if(!argument.dataTypeClass)
- argument.dataTypeClass = System_FindClass(_class.module, value, true);
+ argument.dataTypeClass = System_FindClass(_class.module, value, registerInternalDecl);
if(!argument.dataTypeClass)
- argument.dataTypeClass = System_FindClass(_class.module.application, value, true);
+ argument.dataTypeClass = System_FindClass(_class.module.application, value, registerInternalDecl);
if(registerInternalDecl && !argument.dataTypeClass)
{
ClassTemplateParameter param;
}
// Construct an instance
-static bool ConstructInstance(void * instance, Class _class, Class from)
+static bool ConstructInstance(void * instance, Class _class, Class from, bool bindingsAlloc)
{
if(_class.templateClass) _class = _class.templateClass;
if(_class.base && from != _class.base)
{
- if(!ConstructInstance(instance, _class.base, from))
+ if(!ConstructInstance(instance, _class.base, from, false))
return false;
}
if(_class.Initialize)
}
if(_class.Constructor)
{
- if(!_class.Constructor(instance))
+ bool result;
+ if(_class.bindingsClass)
+ result = ((bool (*)(void *, bool))(void *)_class.Constructor)(instance, bindingsAlloc);
+ else
+ result = _class.Constructor(instance);
+ if(!result)
{
for(; _class; _class = _class.base)
{
return true;
}
-public dllexport void * eInstance_New(Class _class)
+static void * Instance_New(Class _class, bool bindingsAlloc)
{
Instance instance = null;
if(_class)
// Copy the virtual table initially
instance._vTbl = _class._vTbl;
}
- if(instance && !ConstructInstance(instance, _class, null))
+ if(instance && !ConstructInstance(instance, _class, null, bindingsAlloc))
{
_free(instance);
instance = null;
return instance;
}
+public dllexport void * eInstance_New(Class _class)
+{
+ return Instance_New(_class, true);
+}
+
+public dllexport void * eInstance_NewEx(Class _class, bool bindingsAlloc)
+{
+ return Instance_New(_class, bindingsAlloc);
+}
+
public dllexport void eInstance_Evolve(Instance * instancePtr, Class _class)
{
if(_class && instancePtr && *instancePtr)
instance._vTbl = _class._vTbl;
// We don't want to reconstruct the portion already constructed...
- if(!ConstructInstance(instance, _class, fromClass))
+ if(!ConstructInstance(instance, _class, fromClass, false))
{
_free(instance);
*instancePtr = null;
}
if(ensureCOM && !strcmp(name, "ecere") && module)
{
- name = !strcmp(module.name, "ecereCOM") ? "ecere" : "ecereCOM";
+ name = !strcmp(module.name, "ecereCOM") ? "ecereCOM" : "ecere";
if((!Load && !strcmp(module.name, "ecereCOM")) ||
(Load && (!__thisModule || !__thisModule.name || !strcmp(__thisModule.name, "ecereCOM")) && Load != (void *)COM_LOAD_FUNCTION))
{
}
}
-public dllexport void eInstance_Watch(void * instance, Property _property, void * object, void (*callback)(void *, void *))
+public dllexport void eInstance_Watch(Instance instance, Property _property, void * object, void (*callback)(void *, void *))
{
if(_property.isWatchable)
{