From: Jerome St-Louis Date: Tue, 16 Jun 2015 08:21:11 +0000 (-0400) Subject: ecere/sys/JSON: Improved look up of classes across modules X-Git-Url: https://ecere.com/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c29de2ecbeef638f455471b8e2730c74408c685c;hp=cf8bf755d3ca755d6fc209158dceec30c47a746e;p=sdk ecere/sys/JSON: Improved look up of classes across modules --- diff --git a/ecere/src/sys/JSON.ec b/ecere/src/sys/JSON.ec index c11c706..9a841f9 100644 --- a/ecere/src/sys/JSON.ec +++ b/ecere/src/sys/JSON.ec @@ -465,6 +465,8 @@ public: { type = eSystem_FindClass(__thisModule, member.dataTypeString); if(!type) + type = eSystem_FindClass(objectType.module, member.dataTypeString); + if(!type) type = eSystem_FindClass(__thisModule.application, member.dataTypeString); offset = member._class.offset + member.offset; @@ -476,6 +478,8 @@ public: { type = eSystem_FindClass(__thisModule, prop.dataTypeString); if(!type) + type = eSystem_FindClass(objectType.module, prop.dataTypeString); + if(!type) type = eSystem_FindClass(__thisModule.application, prop.dataTypeString); } else @@ -630,7 +634,7 @@ public: else result = syntaxError; - if(prop && type.type == structClass) + if(prop && type && type.type == structClass) { delete value.p; } @@ -711,18 +715,23 @@ public: for(prop = type.conversions.first; prop; prop = prop.next) { bool refProp = false; - Class c; if(!strcmp(prop.name, type.base.fullName)) refProp = true; - else if( (c = eSystem_FindClass(type.module, prop.name) ) ) + else { - Property p; - for(p = c.conversions.first; p; p = p.next) + Class c = eSystem_FindClass(type.module, prop.name); + if(!c) + c = eSystem_FindClass(type.module.application, prop.name); + if(c) { - if(!strcmp(p.name, type.base.fullName) && !p.Set && !p.Get) + Property p; + for(p = c.conversions.first; p; p = p.next) { - refProp = true; - break; + if(!strcmp(p.name, type.base.fullName) && !p.Set && !p.Get) + { + refProp = true; + break; + } } } } @@ -1042,6 +1051,10 @@ bool WriteValue(File f, Class type, DataValue value, int indent) { Class dataType; dataType = eSystem_FindClass(__thisModule, type.dataTypeString); + if(!dataType) + dataType = eSystem_FindClass(type.module, type.dataTypeString); + if(!dataType) + dataType = eSystem_FindClass(__thisModule.application, type.dataTypeString); WriteNumber(f, dataType, value, indent); } else if(type.type == systemClass || type.type == unitClass) @@ -1138,6 +1151,8 @@ static bool _WriteJSONObject(File f, Class objectType, void * object, int indent type = eSystem_FindClass(__thisModule, prop.dataTypeString); if(!type) + type = eSystem_FindClass(objectType.module, prop.dataTypeString); + if(!type) type = eSystem_FindClass(__thisModule.application, prop.dataTypeString); if(!type) PrintLn("warning: Unresolved data type ", (String)prop.dataTypeString); @@ -1210,6 +1225,8 @@ static bool _WriteJSONObject(File f, Class objectType, void * object, int indent uint offset; Class type = eSystem_FindClass(__thisModule, member.dataTypeString); if(!type) + type = eSystem_FindClass(objectType.module, member.dataTypeString); + if(!type) type = eSystem_FindClass(__thisModule.application, member.dataTypeString); offset = member._class.offset + member.offset;