From 2c950301992a48e9548580b48df7f23d64e95c3f Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Mon, 15 Dec 2014 02:34:51 -0500 Subject: [PATCH] ecere/com/instance: Fixes for templates with third library - Need to verify whether the order changes negatively affects any project --- compiler/bootstrap/ecere/bootstrap/instance.c | 18 +++++++++-------- ecere/src/com/instance.ec | 28 +++++++++++++++------------ 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/compiler/bootstrap/ecere/bootstrap/instance.c b/compiler/bootstrap/ecere/bootstrap/instance.c index abd54ba..ecce822 100644 --- a/compiler/bootstrap/ecere/bootstrap/instance.c +++ b/compiler/bootstrap/ecere/bootstrap/instance.c @@ -4241,11 +4241,11 @@ switch(curParam->type) { case 0: argument.__anon1.__anon1.dataTypeString = __ecereNameSpace__ecere__sys__CopyString(value); +argument.__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(findModule, value); +if(!argument.__anon1.__anon1.dataTypeClass) argument.__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, value); if(!argument.__anon1.__anon1.dataTypeClass) argument.__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(((struct __ecereNameSpace__ecere__com__Module *)(((char *)_class->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application, value); -if(!argument.__anon1.__anon1.dataTypeClass) -argument.__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(findModule, value); break; case 2: { @@ -4345,11 +4345,11 @@ templatedClass->templateArgs[curParamID] = param->defaultArg; __ecereNameSpace__ecere__com__CopyTemplateArg(param, &templatedClass->templateArgs[curParamID]); if(param->type == 0 && param->defaultArg.__anon1.__anon1.dataTypeString) { +templatedClass->templateArgs[curParamID].__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(findModule, param->defaultArg.__anon1.__anon1.dataTypeString); +if(!templatedClass->templateArgs[curParamID].__anon1.__anon1.dataTypeClass) templatedClass->templateArgs[curParamID].__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(templatedClass->module, param->defaultArg.__anon1.__anon1.dataTypeString); if(!templatedClass->templateArgs[curParamID].__anon1.__anon1.dataTypeClass) templatedClass->templateArgs[curParamID].__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(((struct __ecereNameSpace__ecere__com__Module *)(((char *)templatedClass->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application, param->defaultArg.__anon1.__anon1.dataTypeString); -if(!templatedClass->templateArgs[curParamID].__anon1.__anon1.dataTypeClass) -templatedClass->templateArgs[curParamID].__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(findModule, param->defaultArg.__anon1.__anon1.dataTypeString); } } curParamID++; @@ -4462,6 +4462,8 @@ templateString[len++] = '\0'; } __ecereNameSpace__ecere__com__FreeTemplateArg(templatedClass, param, c); (*arg).__anon1.__anon1.dataTypeString = __ecereNameSpace__ecere__sys__CopyString(templateString); +(*arg).__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(findModule, templateString); +if(!(*arg).__anon1.__anon1.dataTypeClass) (*arg).__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(templatedClass->module, templateString); if(!(*arg).__anon1.__anon1.dataTypeClass) (*arg).__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(((struct __ecereNameSpace__ecere__com__Module *)(((char *)templatedClass->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application, templateString); @@ -4514,11 +4516,11 @@ templatedClass->templateArgs[curParamID] = param->defaultArg; __ecereNameSpace__ecere__com__CopyTemplateArg(param, &templatedClass->templateArgs[curParamID]); if(param->type == 0 && param->defaultArg.__anon1.__anon1.dataTypeString) { +templatedClass->templateArgs[curParamID].__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(findModule, param->defaultArg.__anon1.__anon1.dataTypeString); +if(!templatedClass->templateArgs[curParamID].__anon1.__anon1.dataTypeClass) templatedClass->templateArgs[curParamID].__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(templatedClass->module, param->defaultArg.__anon1.__anon1.dataTypeString); if(!templatedClass->templateArgs[curParamID].__anon1.__anon1.dataTypeClass) templatedClass->templateArgs[curParamID].__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(((struct __ecereNameSpace__ecere__com__Module *)(((char *)templatedClass->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application, param->defaultArg.__anon1.__anon1.dataTypeString); -if(!templatedClass->templateArgs[curParamID].__anon1.__anon1.dataTypeClass) -templatedClass->templateArgs[curParamID].__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(findModule, param->defaultArg.__anon1.__anon1.dataTypeString); } } curParamID++; @@ -4624,10 +4626,10 @@ strcpy(className, templatedClass->templateArgs[id].__anon1.__anon1.dataTypeStrin id++; } } -memberClass = __ecereNameSpace__ecere__com__eSystem_FindClass(templatedClass->module, className); -if(!memberClass) memberClass = __ecereNameSpace__ecere__com__eSystem_FindClass(findModule, className); if(!memberClass) +memberClass = __ecereNameSpace__ecere__com__eSystem_FindClass(templatedClass->module, className); +if(!memberClass) memberClass = __ecereNameSpace__ecere__com__eSystem_FindClass(((struct __ecereNameSpace__ecere__com__Module *)(((char *)templatedClass->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application, className); } if(memberClass) diff --git a/ecere/src/com/instance.ec b/ecere/src/com/instance.ec index 456364f..9ee3934 100644 --- a/ecere/src/com/instance.ec +++ b/ecere/src/com/instance.ec @@ -3640,9 +3640,11 @@ static void ComputeClassParameters(Class templatedClass, const char * templatePa { case type: argument.dataTypeString = CopyString(value); - argument.dataTypeClass = eSystem_FindClass(_class.module, value); - if(!argument.dataTypeClass) argument.dataTypeClass = eSystem_FindClass(_class.module.application, value); - if(!argument.dataTypeClass) argument.dataTypeClass = eSystem_FindClass(findModule, value); + argument.dataTypeClass = eSystem_FindClass(findModule, value); + if(!argument.dataTypeClass) + argument.dataTypeClass = eSystem_FindClass(_class.module, value); + if(!argument.dataTypeClass) + argument.dataTypeClass = eSystem_FindClass(_class.module.application, value); break; case expression: { @@ -3740,11 +3742,11 @@ static void ComputeClassParameters(Class templatedClass, const char * templatePa CopyTemplateArg(param, templatedClass.templateArgs[curParamID]); if(param.type == type && param.defaultArg.dataTypeString) { - templatedClass.templateArgs[curParamID].dataTypeClass = eSystem_FindClass(templatedClass.module, param.defaultArg.dataTypeString); + templatedClass.templateArgs[curParamID].dataTypeClass = eSystem_FindClass(findModule, param.defaultArg.dataTypeString); if(!templatedClass.templateArgs[curParamID].dataTypeClass) - templatedClass.templateArgs[curParamID].dataTypeClass = eSystem_FindClass(templatedClass.module.application, param.defaultArg.dataTypeString); + templatedClass.templateArgs[curParamID].dataTypeClass = eSystem_FindClass(templatedClass.module, param.defaultArg.dataTypeString); if(!templatedClass.templateArgs[curParamID].dataTypeClass) - templatedClass.templateArgs[curParamID].dataTypeClass = eSystem_FindClass(findModule, param.defaultArg.dataTypeString); + templatedClass.templateArgs[curParamID].dataTypeClass = eSystem_FindClass(templatedClass.module.application, param.defaultArg.dataTypeString); } } curParamID++; @@ -3868,7 +3870,9 @@ static void ComputeClassParameters(Class templatedClass, const char * templatePa FreeTemplateArg(templatedClass, param, c); arg->dataTypeString = CopyString(templateString); - arg->dataTypeClass = eSystem_FindClass(templatedClass.module, templateString); + arg->dataTypeClass = eSystem_FindClass(findModule, templateString); + if(!arg->dataTypeClass) + arg->dataTypeClass = eSystem_FindClass(templatedClass.module, templateString); if(!arg->dataTypeClass) arg->dataTypeClass = eSystem_FindClass(templatedClass.module.application, templateString); } @@ -3920,11 +3924,11 @@ static void ComputeClassParameters(Class templatedClass, const char * templatePa CopyTemplateArg(param, templatedClass.templateArgs[curParamID]); if(param.type == type && param.defaultArg.dataTypeString) { - templatedClass.templateArgs[curParamID].dataTypeClass = eSystem_FindClass(templatedClass.module, param.defaultArg.dataTypeString); + templatedClass.templateArgs[curParamID].dataTypeClass = eSystem_FindClass(findModule, param.defaultArg.dataTypeString); if(!templatedClass.templateArgs[curParamID].dataTypeClass) - templatedClass.templateArgs[curParamID].dataTypeClass = eSystem_FindClass(templatedClass.module.application, param.defaultArg.dataTypeString); + templatedClass.templateArgs[curParamID].dataTypeClass = eSystem_FindClass(templatedClass.module, param.defaultArg.dataTypeString); if(!templatedClass.templateArgs[curParamID].dataTypeClass) - templatedClass.templateArgs[curParamID].dataTypeClass = eSystem_FindClass(findModule, param.defaultArg.dataTypeString); + templatedClass.templateArgs[curParamID].dataTypeClass = eSystem_FindClass(templatedClass.module.application, param.defaultArg.dataTypeString); } } curParamID++; @@ -4022,10 +4026,10 @@ static void ComputeClassParameters(Class templatedClass, const char * templatePa id++; } } - memberClass = eSystem_FindClass(templatedClass.module, className); // TESTING: Added this here... + memberClass = eSystem_FindClass(findModule, className); if(!memberClass) - memberClass = eSystem_FindClass(findModule, className); + memberClass = eSystem_FindClass(templatedClass.module, className); if(!memberClass) memberClass = eSystem_FindClass(templatedClass.module.application, className); } -- 1.8.3.1