ecere/com; gfx: Improvements to cross-compiling to 32 bit
authorJerome St-Louis <jerome@ecere.com>
Thu, 21 Mar 2013 04:13:36 +0000 (00:13 -0400)
committerJerome St-Louis <jerome@ecere.com>
Thu, 21 Mar 2013 06:44:30 +0000 (02:44 -0400)
compiler/bootstrap/ecere/bootstrap/instance.c
compiler/bootstrap/libec/bootstrap/pass15.c
compiler/libec/locale/ec.pot
compiler/libec/src/pass15.ec
ecere/src/com/instance.ec
ecere/src/gfx/Display.ec
ecere/src/gfx/Surface.ec

index a579f56..fbbc412 100644 (file)
@@ -1449,7 +1449,17 @@ unsigned int force64Bits = ((unsigned int)((struct __ecereNameSpace__ecere__com_
 unsigned int force32Bits = ((unsigned int)((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application + structSize_Module)))->isGUIApp & 4) ? 0x1 : 0x0;
 unsigned int inCompiler = ((unsigned int)((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application + structSize_Module)))->isGUIApp & 8) ? 0x1 : 0x0;
 unsigned int crossBits = force32Bits || force64Bits;
 unsigned int force32Bits = ((unsigned int)((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application + structSize_Module)))->isGUIApp & 4) ? 0x1 : 0x0;
 unsigned int inCompiler = ((unsigned int)((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application + structSize_Module)))->isGUIApp & 8) ? 0x1 : 0x0;
 unsigned int crossBits = force32Bits || force64Bits;
+unsigned int fixed = 0x0;
 
 
+if(inCompiler && crossBits)
+{
+struct __ecereNameSpace__ecere__com__Class * c = __ecereNameSpace__ecere__com__eSystem_FindClass(((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application, name);
+
+if(c && c->fixed)
+fixed = 0x1;
+else if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + 24)))->name && !strcmp(((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->name, "ecereCOM"))
+fixed = 0x1;
+}
 {
 nameSpace = (declMode == 1) ? &((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->publicNameSpace : &((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->privateNameSpace;
 if(declMode == 4)
 {
 nameSpace = (declMode == 1) ? &((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->publicNameSpace : &((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->privateNameSpace;
 if(declMode == 4)
@@ -1782,10 +1792,10 @@ id++;
 }
 _class->memberID = _class->startMemberID = (base && (type == 0 || type == 5 || type == 1)) ? base->memberID : 0;
 if(type == 0 || type == 5)
 }
 _class->memberID = _class->startMemberID = (base && (type == 0 || type == 5 || type == 1)) ? base->memberID : 0;
 if(type == 0 || type == 5)
-_class->offset = (base && base->structSize && base->type != 1000) ? base->structSize : ((type == 5) ? 0 : (force64Bits ? 24 : (force32Bits && inCompiler) ? 12 : structSize_Instance));
+_class->offset = (base && base->structSize && base->type != 1000) ? base->structSize : ((type == 5) ? 0 : ((force64Bits && inCompiler && fixed) ? 24 : (force32Bits && inCompiler && fixed) ? 12 : structSize_Instance));
 if(crossBits)
 {
 if(crossBits)
 {
-if(strstr(name, "ecere::sys::EARHeader") || strstr(name, "AnchorValue") || !strcmp(name, "ecere::com::CustomAVLTree") || !strcmp(name, "ecere::gui::Window") || !strcmp(name, "ecere::sys::Mutex"))
+if(strstr(name, "ecere::sys::EARHeader") || strstr(name, "AnchorValue") || !strcmp(name, "ecere::com::CustomAVLTree") || !strcmp(name, "ecere::com::Array") || !strcmp(name, "ecere::gui::Window") || !strcmp(name, "ecere::sys::Mutex"))
 ;
 else
 {
 ;
 else
 {
@@ -1822,6 +1832,7 @@ else if(!strcmp(name, "ecere::sys::BinaryTree"))
 size = 0;
 else if(module != ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application && inCompiler)
 {
 size = 0;
 else if(module != ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application && inCompiler)
 {
+if(fixed || type == 1)
 size = 0;
 }
 }
 size = 0;
 }
 }
index 313b617..e778911 100644 (file)
@@ -2776,7 +2776,14 @@ maxSize = _class->structSize;
 if(_class->type == 1 || _class->type == 5)
 AddMembers(declarations, _class->base, 0x0, &totalSize, topClass, (((void *)0)));
 else
 if(_class->type == 1 || _class->type == 5)
 AddMembers(declarations, _class->base, 0x0, &totalSize, topClass, (((void *)0)));
 else
-maxSize -= _class->base->templateClass ? _class->base->templateClass->structSize : _class->base->structSize;
+{
+unsigned int baseSize = _class->base->templateClass ? _class->base->templateClass->structSize : _class->base->structSize;
+
+if(maxSize > baseSize)
+maxSize -= baseSize;
+else
+maxSize = 0;
+}
 }
 }
 for(member = isMember ? topMember->members.first : _class->membersAndProperties.first; member; member = member->next)
 }
 }
 for(member = isMember ? topMember->members.first : _class->membersAndProperties.first; member; member = member->next)
index 8c341b7..fa6e18a 100644 (file)
@@ -10,12 +10,12 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Poedit-Basepath: ../\n"
 
 "Content-Transfer-Encoding: 8bit\n"
 "X-Poedit-Basepath: ../\n"
 
-#: ./src/pass15.ec:3187
-#: ./src/pass15.ec:3213
+#: ./src/pass15.ec:3193
+#: ./src/pass15.ec:3219
 msgid "%s expected to be derived from method class\n"
 msgstr "%s expected to be derived from method class\n"
 
 msgid "%s expected to be derived from method class\n"
 msgstr "%s expected to be derived from method class\n"
 
-#: ./src/pass15.ec:8975
+#: ./src/pass15.ec:8981
 msgid "%s undefined; assuming extern returning int\n"
 msgstr "%s undefined; assuming extern returning int\n"
 
 msgid "%s undefined; assuming extern returning int\n"
 msgstr "%s undefined; assuming extern returning int\n"
 
@@ -31,12 +31,12 @@ msgstr ":%d:%d: warning: "
 msgid "Array size not constant int (%s)\n"
 msgstr "Array size not constant int (%s)\n"
 
 msgid "Array size not constant int (%s)\n"
 msgstr "Array size not constant int (%s)\n"
 
-#: ./src/pass15.ec:10482
+#: ./src/pass15.ec:10488
 msgid "Assigning list initializer to non list\n"
 msgstr "Assigning list initializer to non list\n"
 
 msgid "Assigning list initializer to non list\n"
 msgstr "Assigning list initializer to non list\n"
 
-#: ./src/pass15.ec:10146
-#: ./src/pass15.ec:11193
+#: ./src/pass15.ec:10152
+#: ./src/pass15.ec:11199
 msgid "Couldn't determine type of array elements\n"
 msgstr "Couldn't determine type of array elements\n"
 
 msgid "Couldn't determine type of array elements\n"
 msgstr "Couldn't determine type of array elements\n"
 
@@ -52,7 +52,7 @@ msgstr "Couldn't open %s\n"
 msgid "Expecting class specifier\n"
 msgstr "Expecting class specifier\n"
 
 msgid "Expecting class specifier\n"
 msgstr "Expecting class specifier\n"
 
-#: ./src/pass15.ec:11351
+#: ./src/pass15.ec:11357
 msgid "Expression is not a container\n"
 msgstr "Expression is not a container\n"
 
 msgid "Expression is not a container\n"
 msgstr "Expression is not a container\n"
 
@@ -64,12 +64,12 @@ msgstr "Includes nested too deeply"
 msgid "Incompatible virtual function %s\n"
 msgstr "Incompatible virtual function %s\n"
 
 msgid "Incompatible virtual function %s\n"
 msgstr "Incompatible virtual function %s\n"
 
-#: ./src/pass15.ec:11625
-#: ./src/pass15.ec:11700
+#: ./src/pass15.ec:11631
+#: ./src/pass15.ec:11706
 msgid "Invalid object specified and not inside a class\n"
 msgstr "Invalid object specified and not inside a class\n"
 
 msgid "Invalid object specified and not inside a class\n"
 msgstr "Invalid object specified and not inside a class\n"
 
-#: ./src/pass15.ec:11533
+#: ./src/pass15.ec:11539
 msgid "Invalid watched object\n"
 msgstr "Invalid watched object\n"
 
 msgid "Invalid watched object\n"
 msgstr "Invalid watched object\n"
 
@@ -94,11 +94,11 @@ msgstr "Multiple field index requires a name\n"
 msgid "No database table defined in this module or database_open already used.\n"
 msgstr "No database table defined in this module or database_open already used.\n"
 
 msgid "No database table defined in this module or database_open already used.\n"
 msgstr "No database table defined in this module or database_open already used.\n"
 
-#: ./src/pass15.ec:11546
+#: ./src/pass15.ec:11552
 msgid "No observer specified and not inside a _class\n"
 msgstr "No observer specified and not inside a _class\n"
 
 msgid "No observer specified and not inside a _class\n"
 msgstr "No observer specified and not inside a _class\n"
 
-#: ./src/pass15.ec:11703
+#: ./src/pass15.ec:11709
 msgid "No observer specified and not inside a class\n"
 msgstr "No observer specified and not inside a class\n"
 
 msgid "No observer specified and not inside a class\n"
 msgstr "No observer specified and not inside a class\n"
 
@@ -112,9 +112,9 @@ msgid "Non-static %s making use of a static class\n"
 msgstr "Non-static %s making use of a static class\n"
 
 #: ./src/pass1.ec:1037
 msgstr "Non-static %s making use of a static class\n"
 
 #: ./src/pass1.ec:1037
-#: ./src/pass15.ec:11528
-#: ./src/pass15.ec:11600
-#: ./src/pass15.ec:11689
+#: ./src/pass15.ec:11534
+#: ./src/pass15.ec:11606
+#: ./src/pass15.ec:11695
 msgid "Property %s not found in class %s\n"
 msgstr "Property %s not found in class %s\n"
 
 msgid "Property %s not found in class %s\n"
 msgstr "Property %s not found in class %s\n"
 
@@ -122,7 +122,7 @@ msgstr "Property %s not found in class %s\n"
 msgid "Public %s making use of a private class\n"
 msgstr "Public %s making use of a private class\n"
 
 msgid "Public %s making use of a private class\n"
 msgstr "Public %s making use of a private class\n"
 
-#: ./src/pass15.ec:7418
+#: ./src/pass15.ec:7424
 msgid "Recursion in defined expression %s\n"
 msgstr "Recursion in defined expression %s\n"
 
 msgid "Recursion in defined expression %s\n"
 msgstr "Recursion in defined expression %s\n"
 
@@ -138,30 +138,30 @@ msgstr "Redefinition of %s ignored\n"
 msgid "Redefinition of method %s in class %s\n"
 msgstr "Redefinition of method %s in class %s\n"
 
 msgid "Redefinition of method %s in class %s\n"
 msgstr "Redefinition of method %s in class %s\n"
 
-#: ./src/pass15.ec:4388
-#: ./src/pass15.ec:4495
+#: ./src/pass15.ec:4394
+#: ./src/pass15.ec:4501
 msgid "Unhandled type populating instance\n"
 msgstr "Unhandled type populating instance\n"
 
 msgid "Unhandled type populating instance\n"
 msgstr "Unhandled type populating instance\n"
 
-#: ./src/pass15.ec:7154
+#: ./src/pass15.ec:7160
 msgid "Unspecified type\n"
 msgstr "Unspecified type\n"
 
 msgid "Unspecified type\n"
 msgstr "Unspecified type\n"
 
-#: ./src/pass15.ec:8990
+#: ./src/pass15.ec:8996
 msgid "callable object undefined; extern assuming returning int\n"
 msgstr "callable object undefined; extern assuming returning int\n"
 
 msgid "callable object undefined; extern assuming returning int\n"
 msgstr "callable object undefined; extern assuming returning int\n"
 
-#: ./src/pass15.ec:8792
+#: ./src/pass15.ec:8798
 msgid "called object %s is not a function\n"
 msgstr "called object %s is not a function\n"
 
 msgid "called object %s is not a function\n"
 msgstr "called object %s is not a function\n"
 
-#: ./src/pass15.ec:7874
 #: ./src/pass15.ec:7880
 #: ./src/pass15.ec:7880
-#: ./src/pass15.ec:8044
+#: ./src/pass15.ec:7886
+#: ./src/pass15.ec:8050
 msgid "cannot add two pointers\n"
 msgstr "cannot add two pointers\n"
 
 msgid "cannot add two pointers\n"
 msgstr "cannot add two pointers\n"
 
-#: ./src/pass15.ec:1510
+#: ./src/pass15.ec:1516
 msgid "cannot dereference type\n"
 msgstr "cannot dereference type\n"
 
 msgid "cannot dereference type\n"
 msgstr "cannot dereference type\n"
 
@@ -183,68 +183,68 @@ msgstr "class data member"
 msgid "class member instance"
 msgstr "class member instance"
 
 msgid "class member instance"
 msgstr "class member instance"
 
-#: ./src/pass15.ec:10221
+#: ./src/pass15.ec:10227
 msgid "couldn't determine type of %s; expected %s\n"
 msgstr "couldn't determine type of %s; expected %s\n"
 
 msgid "couldn't determine type of %s; expected %s\n"
 msgstr "couldn't determine type of %s; expected %s\n"
 
-#: ./src/pass15.ec:8421
-#: ./src/pass15.ec:8433
-#: ./src/pass15.ec:10233
-#: ./src/pass15.ec:10309
+#: ./src/pass15.ec:8427
+#: ./src/pass15.ec:8439
+#: ./src/pass15.ec:10239
+#: ./src/pass15.ec:10315
 msgid "couldn't determine type of %s\n"
 msgstr "couldn't determine type of %s\n"
 
 msgid "couldn't determine type of %s\n"
 msgstr "couldn't determine type of %s\n"
 
-#: ./src/pass15.ec:1882
-#: ./src/pass15.ec:9455
+#: ./src/pass15.ec:1888
+#: ./src/pass15.ec:9461
 msgid "couldn't find member %s in class %s\n"
 msgstr "couldn't find member %s in class %s\n"
 
 msgid "couldn't find member %s in class %s\n"
 msgstr "couldn't find member %s in class %s\n"
 
-#: ./src/pass15.ec:1878
-#: ./src/pass15.ec:1987
+#: ./src/pass15.ec:1884
+#: ./src/pass15.ec:1993
 msgid "couldn't find virtual method %s in class %s\n"
 msgstr "couldn't find virtual method %s in class %s\n"
 
 msgid "couldn't find virtual method %s in class %s\n"
 msgstr "couldn't find virtual method %s in class %s\n"
 
-#: ./src/pass15.ec:8036
+#: ./src/pass15.ec:8042
 msgid "different levels of indirection\n"
 msgstr "different levels of indirection\n"
 
 msgid "different levels of indirection\n"
 msgstr "different levels of indirection\n"
 
-#: ./src/pass15.ec:7892
-#: ./src/pass15.ec:10264
+#: ./src/pass15.ec:7898
+#: ./src/pass15.ec:10270
 msgid "incompatible expression %s (%s); expected %s\n"
 msgstr "incompatible expression %s (%s); expected %s\n"
 
 msgid "incompatible expression %s (%s); expected %s\n"
 msgstr "incompatible expression %s (%s); expected %s\n"
 
-#: ./src/pass15.ec:8153
-#: ./src/pass15.ec:8313
+#: ./src/pass15.ec:8159
+#: ./src/pass15.ec:8319
 msgid "incompatible expressions %s (%s) and %s (%s)\n"
 msgstr "incompatible expressions %s (%s) and %s (%s)\n"
 
 msgid "incompatible expressions %s (%s) and %s (%s)\n"
 msgstr "incompatible expressions %s (%s) and %s (%s)\n"
 
-#: ./src/pass15.ec:1834
+#: ./src/pass15.ec:1840
 msgid "incompatible instance method %s\n"
 msgstr "incompatible instance method %s\n"
 
 msgid "incompatible instance method %s\n"
 msgstr "incompatible instance method %s\n"
 
-#: ./src/pass15.ec:3286
+#: ./src/pass15.ec:3292
 msgid "incompatible parameter %s (expected %s)\n"
 msgstr "incompatible parameter %s (expected %s)\n"
 
 msgid "incompatible parameter %s (expected %s)\n"
 msgstr "incompatible parameter %s (expected %s)\n"
 
-#: ./src/pass15.ec:3226
+#: ./src/pass15.ec:3232
 msgid "incompatible return type for function\n"
 msgstr "incompatible return type for function\n"
 
 msgid "incompatible return type for function\n"
 msgstr "incompatible return type for function\n"
 
-#: ./src/pass15.ec:9269
+#: ./src/pass15.ec:9275
 msgid "invalid class specifier %s for object of class %s\n"
 msgstr "invalid class specifier %s for object of class %s\n"
 
 msgid "invalid class specifier %s for object of class %s\n"
 msgstr "invalid class specifier %s for object of class %s\n"
 
-#: ./src/pass15.ec:9739
+#: ./src/pass15.ec:9745
 msgid "member operator on non-structure type expression %s\n"
 msgstr "member operator on non-structure type expression %s\n"
 
 msgid "member operator on non-structure type expression %s\n"
 msgstr "member operator on non-structure type expression %s\n"
 
-#: ./src/pass15.ec:3161
-#: ./src/pass15.ec:3176
-#: ./src/pass15.ec:3202
+#: ./src/pass15.ec:3167
+#: ./src/pass15.ec:3182
+#: ./src/pass15.ec:3208
 msgid "method class must be derived from %s\n"
 msgstr "method class must be derived from %s\n"
 
 msgid "method class must be derived from %s\n"
 msgstr "method class must be derived from %s\n"
 
-#: ./src/pass15.ec:3163
+#: ./src/pass15.ec:3169
 msgid "method class should not take an object\n"
 msgstr "method class should not take an object\n"
 
 msgid "method class should not take an object\n"
 msgstr "method class should not take an object\n"
 
@@ -257,27 +257,27 @@ msgstr "no get defined for property %s of class %s\n"
 msgid "no set defined for property %s of class %s\n"
 msgstr "no set defined for property %s of class %s\n"
 
 msgid "no set defined for property %s of class %s\n"
 msgstr "no set defined for property %s of class %s\n"
 
-#: ./src/pass15.ec:8949
+#: ./src/pass15.ec:8955
 msgid "not enough arguments for function %s (%d given, expected %d)\n"
 msgstr "not enough arguments for function %s (%d given, expected %d)\n"
 
 msgid "not enough arguments for function %s (%d given, expected %d)\n"
 msgstr "not enough arguments for function %s (%d given, expected %d)\n"
 
-#: ./src/pass15.ec:8945
+#: ./src/pass15.ec:8951
 msgid "not enough arguments for method %s::%s (%d given, expected %d)\n"
 msgstr "not enough arguments for method %s::%s (%d given, expected %d)\n"
 
 msgid "not enough arguments for method %s::%s (%d given, expected %d)\n"
 msgstr "not enough arguments for method %s::%s (%d given, expected %d)\n"
 
-#: ./src/pass15.ec:3237
+#: ./src/pass15.ec:3243
 msgid "not enough parameters\n"
 msgstr "not enough parameters\n"
 
 msgid "not enough parameters\n"
 msgstr "not enough parameters\n"
 
-#: ./src/pass15.ec:7979
+#: ./src/pass15.ec:7985
 msgid "operating on %s and %s with an untyped result, assuming %s\n"
 msgstr "operating on %s and %s with an untyped result, assuming %s\n"
 
 msgid "operating on %s and %s with an untyped result, assuming %s\n"
 msgstr "operating on %s and %s with an untyped result, assuming %s\n"
 
-#: ./src/pass15.ec:7804
+#: ./src/pass15.ec:7810
 msgid "operator %s illegal on pointer\n"
 msgstr "operator %s illegal on pointer\n"
 
 msgid "operator %s illegal on pointer\n"
 msgstr "operator %s illegal on pointer\n"
 
-#: ./src/pass15.ec:3189
+#: ./src/pass15.ec:3195
 msgid "overriding class expected to be derived from method class\n"
 msgstr "overriding class expected to be derived from method class\n"
 
 msgid "overriding class expected to be derived from method class\n"
 msgstr "overriding class expected to be derived from method class\n"
 
@@ -309,46 +309,46 @@ msgstr "redefinition of destructor for class %s\n"
 msgid "syntax error\n"
 msgstr "syntax error\n"
 
 msgid "syntax error\n"
 msgstr "syntax error\n"
 
-#: ./src/pass15.ec:8860
+#: ./src/pass15.ec:8866
 msgid "too many arguments for function %s (%d given, expected %d)\n"
 msgstr "too many arguments for function %s (%d given, expected %d)\n"
 
 msgid "too many arguments for function %s (%d given, expected %d)\n"
 msgstr "too many arguments for function %s (%d given, expected %d)\n"
 
-#: ./src/pass15.ec:8856
+#: ./src/pass15.ec:8862
 msgid "too many arguments for method %s::%s (%d given, expected %d)\n"
 msgstr "too many arguments for method %s::%s (%d given, expected %d)\n"
 
 msgid "too many arguments for method %s::%s (%d given, expected %d)\n"
 msgstr "too many arguments for method %s::%s (%d given, expected %d)\n"
 
-#: ./src/pass15.ec:1888
+#: ./src/pass15.ec:1894
 msgid "too many initializers for instantiation of class %s\n"
 msgstr "too many initializers for instantiation of class %s\n"
 
 msgid "too many initializers for instantiation of class %s\n"
 msgstr "too many initializers for instantiation of class %s\n"
 
-#: ./src/pass15.ec:3300
+#: ./src/pass15.ec:3306
 msgid "too many parameters\n"
 msgstr "too many parameters\n"
 
 msgid "too many parameters\n"
 msgstr "too many parameters\n"
 
-#: ./src/pass15.ec:9722
+#: ./src/pass15.ec:9728
 msgid "undefined class %s\n"
 msgstr "undefined class %s\n"
 
 msgid "undefined class %s\n"
 msgstr "undefined class %s\n"
 
-#: ./src/pass15.ec:10300
+#: ./src/pass15.ec:10306
 msgid "unresolved identifier %s::%s\n"
 msgstr "unresolved identifier %s::%s\n"
 
 msgid "unresolved identifier %s::%s\n"
 msgstr "unresolved identifier %s::%s\n"
 
-#: ./src/pass15.ec:10219
+#: ./src/pass15.ec:10225
 msgid "unresolved identifier %s; expected %s\n"
 msgstr "unresolved identifier %s; expected %s\n"
 
 msgid "unresolved identifier %s; expected %s\n"
 msgstr "unresolved identifier %s; expected %s\n"
 
-#: ./src/pass15.ec:10231
-#: ./src/pass15.ec:10302
+#: ./src/pass15.ec:10237
+#: ./src/pass15.ec:10308
 msgid "unresolved identifier %s\n"
 msgstr "unresolved identifier %s\n"
 
 msgid "unresolved identifier %s\n"
 msgstr "unresolved identifier %s\n"
 
-#: ./src/pass15.ec:1828
+#: ./src/pass15.ec:1834
 msgid "unresolved symbol used as an instance method %s\n"
 msgstr "unresolved symbol used as an instance method %s\n"
 
 msgid "unresolved symbol used as an instance method %s\n"
 msgstr "unresolved symbol used as an instance method %s\n"
 
-#: ./src/pass15.ec:7865
-#: ./src/pass15.ec:8022
-#: ./src/pass15.ec:8029
+#: ./src/pass15.ec:7871
+#: ./src/pass15.ec:8028
+#: ./src/pass15.ec:8035
 msgid "void *: unknown size\n"
 msgstr "void *: unknown size\n"
 
 msgid "void *: unknown size\n"
 msgstr "void *: unknown size\n"
 
index 1d32137..7ff1b2f 100644 (file)
@@ -850,7 +850,13 @@ public int ComputeTypeSize(Type type)
          if(_class.type == structClass || _class.type == noHeadClass)
             /*totalSize = */AddMembers(declarations, _class.base, false, &totalSize, topClass, null);
          else
          if(_class.type == structClass || _class.type == noHeadClass)
             /*totalSize = */AddMembers(declarations, _class.base, false, &totalSize, topClass, null);
          else
-            maxSize -= _class.base.templateClass ? _class.base.templateClass.structSize : _class.base.structSize;
+         {
+            uint baseSize = _class.base.templateClass ? _class.base.templateClass.structSize : _class.base.structSize;
+            if(maxSize > baseSize)
+               maxSize -= baseSize;
+            else
+               maxSize = 0;
+         }
       }
    }
 
       }
    }
 
index 21e0c55..c68414b 100644 (file)
@@ -2188,6 +2188,15 @@ public dllexport Class eSystem_RegisterClass(ClassType type, char * name, char *
    bool force32Bits = (module.application.isGUIApp & 4) ? true : false;
    bool inCompiler = (module.application.isGUIApp & 8) ? true : false;
    bool crossBits = force32Bits || force64Bits;
    bool force32Bits = (module.application.isGUIApp & 4) ? true : false;
    bool inCompiler = (module.application.isGUIApp & 8) ? true : false;
    bool crossBits = force32Bits || force64Bits;
+   bool fixed = false;
+   if(inCompiler && crossBits)
+   {
+      Class c = eSystem_FindClass(__thisModule.application, name);
+      if(c && c.fixed)
+         fixed = true;
+      else if(__thisModule.name && !strcmp(__thisModule.name, "ecereCOM"))
+         fixed = true;
+   }
 
    {
       nameSpace = (declMode == publicAccess) ? &module.publicNameSpace : &module.privateNameSpace;
 
    {
       nameSpace = (declMode == publicAccess) ? &module.publicNameSpace : &module.privateNameSpace;
@@ -2582,7 +2591,7 @@ public dllexport Class eSystem_RegisterClass(ClassType type, char * name, char *
          }
          _class.memberID = _class.startMemberID = (base && (type == normalClass || type == noHeadClass || type == structClass)) ? base.memberID : 0;
          if(type == normalClass || type == noHeadClass)
          }
          _class.memberID = _class.startMemberID = (base && (type == normalClass || type == noHeadClass || type == structClass)) ? base.memberID : 0;
          if(type == normalClass || type == noHeadClass)
-            _class.offset = (base && base.structSize && base.type != systemClass) ? base.structSize : ((type == noHeadClass) ? 0 : (force64Bits ? 24 : (force32Bits && inCompiler) ? 12 : sizeof(class Instance)));
+            _class.offset = (base && base.structSize && base.type != systemClass) ? base.structSize : ((type == noHeadClass) ? 0 : ((force64Bits && inCompiler && fixed) ? 24 : (force32Bits && inCompiler && fixed) ? 12 : sizeof(class Instance)));
 
          // For cross-bitness-compiling
          if(crossBits)
 
          // For cross-bitness-compiling
          if(crossBits)
@@ -2618,7 +2627,8 @@ public dllexport Class eSystem_RegisterClass(ClassType type, char * name, char *
                else if(module != module.application && inCompiler)
                {
                   // These we only want to recompute inside the compiler
                else if(module != module.application && inCompiler)
                {
                   // These we only want to recompute inside the compiler
-                  size = 0;
+                  if(fixed || type == structClass)
+                     size = 0;
                }
             }
          }
                }
             }
          }
index 30faaa4..4640dae 100644 (file)
@@ -1118,16 +1118,17 @@ public:
    property void * systemWindow { get { return window; } };
    property DisplaySystem displaySystem { get { return displaySystem; } };
 
    property void * systemWindow { get { return window; } };
    property DisplaySystem displaySystem { get { return displaySystem; } };
 
+   int width, height;
+   void * driverData;
+
 private:
 
    DisplaySystem displaySystem;
    void * window;
 private:
 
    DisplaySystem displaySystem;
    void * window;
-   public int width, height;
 
    Mutex mutex { };
    int current;
 
 
    Mutex mutex { };
    int current;
 
-   public void * driverData;
 #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D)
    Display3D display3D;
 #endif
 #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D)
    Display3D display3D;
 #endif
index 0555ff4..cc17b78 100644 (file)
@@ -111,20 +111,22 @@ public enum AlphaWriteMode
 
 public class Surface
 {
 
 public class Surface
 {
-   public int width, height;
+public:
+   int width, height;
+   Point offset;
+   Box box, unclippedBox;
+   void * driverData;
 
 
+private:
    subclass(DisplayDriver) driver;
    DisplaySystem displaySystem;
    Display display;
 
    subclass(DisplayDriver) driver;
    DisplaySystem displaySystem;
    Display display;
 
-   public Point offset;
-   public Box box, unclippedBox;
 
    // States
    Font font;
    ColorAlpha foreground, background;
    bool textOpacity;
 
    // States
    Font font;
    ColorAlpha foreground, background;
    bool textOpacity;
-   public void * driverData;
    AlphaWriteMode alphaWrite;
    bool blend;
    bool writeColor;
    AlphaWriteMode alphaWrite;
    bool blend;
    bool writeColor;