- Destination type was not being set properly on second and later members, C compiler errors resulted
- e.g. Degrees were not being converted to string/printed as degrees
- Updated bootstrap
#define __ENDIAN_PAD(x) 0
#endif
#include <stdint.h>
+#include <sys/types.h>
#if defined(_W64) || (defined(__WORDSIZE) && __WORDSIZE == 8) || defined(__x86_64__)
#define _64BIT 1
} __attribute__ ((gcc_struct));
} __attribute__ ((gcc_struct));
-typedef uintptr_t size_t;
-
void exit(int status);
void * calloc(size_t nmemb, size_t size);
extern double strtod(char * , char * * );
-extern char * strstr(char * , const char * );
+extern char * strstr(const char * , const char * );
unsigned int __ecereMethod___ecereNameSpace__ecere__sys__FileSize_OnGetDataFromString(struct __ecereNameSpace__ecere__com__Class * class, unsigned int * this, char * string)
{
return ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int type, uint64 start, uint64 length, unsigned int wait))this->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Lock])(this, 0, start, length, wait);
}
-extern int strlen(const char * );
+extern size_t strlen(const char * );
int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts;
__ecereNameSpace__ecere__com__eClass_AddMethod(class, "WriteData", 0, __ecereMethod___ecereNameSpace__ecere__sys__File_WriteData, 1);
__ecereNameSpace__ecere__com__eClass_AddMethod(class, "ReadData", 0, __ecereMethod___ecereNameSpace__ecere__sys__File_ReadData, 1);
__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "Seek", "bool Seek(int pos, ecere::sys::FileSeekMode mode)", __ecereMethod___ecereNameSpace__ecere__sys__File_Seek, 1);
-__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "Tell", "unsigned int Tell(void)", __ecereMethod___ecereNameSpace__ecere__sys__File_Tell, 1);
+__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "Tell", "uint Tell(void)", __ecereMethod___ecereNameSpace__ecere__sys__File_Tell, 1);
__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "Read", "int Read(void * buffer, unsigned int size, unsigned int count)", __ecereMethod___ecereNameSpace__ecere__sys__File_Read, 1);
__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "Write", "int Write(void * buffer, unsigned int size, unsigned int count)", __ecereMethod___ecereNameSpace__ecere__sys__File_Write, 1);
__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "Getc", "bool Getc(char * ch)", __ecereMethod___ecereNameSpace__ecere__sys__File_Getc, 1);
__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "Puts", "bool Puts(const char * string)", __ecereMethod___ecereNameSpace__ecere__sys__File_Puts, 1);
__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "Eof", "bool Eof(void)", __ecereMethod___ecereNameSpace__ecere__sys__File_Eof, 1);
__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "Truncate", "bool Truncate(ecere::sys::FileSize size)", __ecereMethod___ecereNameSpace__ecere__sys__File_Truncate, 1);
-__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "GetSize", "unsigned int GetSize(void)", __ecereMethod___ecereNameSpace__ecere__sys__File_GetSize, 1);
+__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "GetSize", "uint GetSize(void)", __ecereMethod___ecereNameSpace__ecere__sys__File_GetSize, 1);
__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "CloseInput", "void CloseInput(void)", __ecereMethod___ecereNameSpace__ecere__sys__File_CloseInput, 1);
__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "CloseOutput", "void CloseOutput(void)", __ecereMethod___ecereNameSpace__ecere__sys__File_CloseOutput, 1);
__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "Lock", "bool Lock(ecere::sys::FileLock type, uint64 start, uint64 length, bool wait)", __ecereMethod___ecereNameSpace__ecere__sys__File_Lock, 1);
#define __ENDIAN_PAD(x) 0
#endif
#include <stdint.h>
+#include <sys/types.h>
extern void * __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
extern void * __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
} __attribute__ ((gcc_struct));
} __attribute__ ((gcc_struct));
-typedef uintptr_t size_t;
-
void exit(int status);
void * calloc(size_t nmemb, size_t size);
-extern int strlen(const char * );
+extern size_t strlen(const char * );
extern char * strcpy(char * , const char * );
extern int strcmp(const char * , const char * );
-extern void * memmove(void * , const void * , unsigned int size);
+extern void * memmove(void * , const void * , size_t size);
extern int __ecereNameSpace__ecere__com__GetRuntimePlatform(void);
return output;
}
-extern char * strncpy(char * , const char * , int n);
+extern char * strncpy(char * , const char * , size_t n);
unsigned int __ecereNameSpace__ecere__sys__SplitArchivePath(char * fileName, char * archiveName, char ** archiveFile)
{
return 0x0;
}
-extern char * strstr(char * , const char * );
+extern char * strstr(const char * , const char * );
extern int toupper(int);
sprintf(string, "%.0f B", size);
}
-extern int strncmp(const char * , const char * , int n);
+extern int strncmp(const char * , const char * , size_t n);
-extern int strncasecmp(const char * , const char * , int n);
+extern int strncasecmp(const char * , const char * , size_t n);
extern int tolower(int);
return count;
}
-extern char * strchr(char * , int);
+extern char * strchr(const char * , int);
int __ecereNameSpace__ecere__sys__TokenizeWith(char * string, int maxTokens, char * tokens[], char * tokenizers, unsigned int escapeBackSlashes)
{
string[c] = (char)0;
}
-extern void * memcpy(void * , const void * , unsigned int size);
+extern void * memcpy(void * , const void * , size_t size);
char * __ecereNameSpace__ecere__sys__CopyString(char * string)
{
extern size_t strlen(const char * );
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_double;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_float;
+
+extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_int64;
+
static char * __ecereNameSpace__ecere__com__OnGetString(struct __ecereNameSpace__ecere__com__Class * _class, void * data, char * tempString, void * fieldData, unsigned int * needClass)
{
struct __ecereNameSpace__ecere__com__Instance * module = _class->templateClass ? _class->templateClass->module : _class->module;
}
else if(_class->type == 3)
{
-struct __ecereNameSpace__ecere__com__Class * dataType = __ecereNameSpace__ecere__com__eSystem_FindClass(module, _class->dataTypeString);
+struct __ecereNameSpace__ecere__com__Class * dataType;
+struct __ecereNameSpace__ecere__com__Property * prop;
+for(prop = _class->conversions.first; prop; prop = prop->next)
+{
+unsigned int refProp = 0x0;
+struct __ecereNameSpace__ecere__com__Class * c;
+
+if(!strcmp(prop->name, _class->base->fullName))
+refProp = 0x1;
+else if((c = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, prop->name)))
+{
+struct __ecereNameSpace__ecere__com__Property * p;
+
+for(p = c->conversions.first; p; p = p->next)
+{
+if(!strcmp(p->name, _class->base->fullName) && !p->Set && !p->Get)
+{
+refProp = 0x1;
+break;
+}
+}
+}
+if(refProp)
+{
+if(prop->Set && prop->Get)
+{
+char * dts = _class->base->dataTypeString;
+
+if(!strcmp(dts, "double"))
+{
+double d = ((double (*)(double))(void *)prop->Set)(*(double *)data);
+
+return ((char * (*)(void *, void *, char *, void *, unsigned int *))(void *)__ecereClass_double->_vTbl[__ecereVMethodID_class_OnGetString])(__ecereClass_double, &d, tempString, fieldData, needClass);
+}
+else if(!strcmp(dts, "float"))
+{
+float d = ((float (*)(float))(void *)prop->Set)(*(float *)data);
+
+return ((char * (*)(void *, void *, char *, void *, unsigned int *))(void *)__ecereClass_float->_vTbl[__ecereVMethodID_class_OnGetString])(__ecereClass_float, &d, tempString, fieldData, needClass);
+}
+else if(!strcmp(dts, "int"))
+{
+int d = ((int (*)(int))(void *)prop->Set)(*(int *)data);
+
+return ((char * (*)(void *, void *, char *, void *, unsigned int *))(void *)__ecereClass_int->_vTbl[__ecereVMethodID_class_OnGetString])(__ecereClass_int, &d, tempString, fieldData, needClass);
+}
+else if(!strcmp(dts, "int64"))
+{
+long long d = ((long long (*)(long long))(void *)prop->Set)(*(long long *)data);
+
+return ((char * (*)(void *, void *, char *, void *, unsigned int *))(void *)__ecereClass_int64->_vTbl[__ecereVMethodID_class_OnGetString])(__ecereClass_int64, &d, tempString, fieldData, needClass);
+}
+}
+else
+break;
+}
+}
+dataType = __ecereNameSpace__ecere__com__eSystem_FindClass(module, _class->dataTypeString);
return ((char * (*)(void *, void *, char *, void *, unsigned int *))(void *)dataType->_vTbl[__ecereVMethodID_class_OnGetString])(dataType, data, tempString, fieldData, needClass);
}
else
result = __ecereNameSpace__ecere__com__Enum_OnGetDataFromString(_class, (int *)data, string);
else if(_class->type == 3)
{
-struct __ecereNameSpace__ecere__com__Class * dataType = __ecereNameSpace__ecere__com__eSystem_FindClass(module, _class->dataTypeString);
+struct __ecereNameSpace__ecere__com__Class * dataType;
+struct __ecereNameSpace__ecere__com__Property * prop;
+for(prop = _class->conversions.first; prop; prop = prop->next)
+{
+unsigned int refProp = 0x0;
+struct __ecereNameSpace__ecere__com__Class * c;
+
+if(!strcmp(prop->name, _class->base->fullName))
+refProp = 0x1;
+else if((c = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, prop->name)))
+{
+struct __ecereNameSpace__ecere__com__Property * p;
+
+for(p = c->conversions.first; p; p = p->next)
+{
+if(!strcmp(p->name, _class->base->fullName) && !p->Set && !p->Get)
+{
+refProp = 0x1;
+break;
+}
+}
+}
+if(refProp)
+{
+if(prop->Set && prop->Get)
+{
+char * dts = _class->base->dataTypeString;
+
+if(!strcmp(dts, "double"))
+{
+double d;
+unsigned int result = ((unsigned int (*)(void *, void *, const char *))(void *)__ecereClass_double->_vTbl[__ecereVMethodID_class_OnGetDataFromString])(__ecereClass_double, &d, string);
+
+*(double *)data = ((double (*)(double))(void *)prop->Get)(d);
+return result;
+}
+else if(!strcmp(dts, "float"))
+{
+float d;
+unsigned int result = ((unsigned int (*)(void *, void *, const char *))(void *)__ecereClass_float->_vTbl[__ecereVMethodID_class_OnGetDataFromString])(__ecereClass_float, &d, string);
+
+*(float *)data = ((float (*)(float))(void *)prop->Get)(d);
+return result;
+}
+else if(!strcmp(dts, "int"))
+{
+int d;
+unsigned int result = ((unsigned int (*)(void *, void *, const char *))(void *)__ecereClass_int->_vTbl[__ecereVMethodID_class_OnGetDataFromString])(__ecereClass_int, &d, string);
+
+*(int *)data = ((int (*)(int))(void *)prop->Get)(d);
+return result;
+}
+else if(!strcmp(dts, "int64"))
+{
+long long d;
+unsigned int result = ((unsigned int (*)(void *, void *, const char *))(void *)__ecereClass_int64->_vTbl[__ecereVMethodID_class_OnGetDataFromString])(__ecereClass_int64, &d, string);
+
+*(long long *)data = ((long long (*)(long long))(void *)prop->Get)(d);
+return result;
+}
+}
+else
+break;
+}
+}
+dataType = __ecereNameSpace__ecere__com__eSystem_FindClass(module, _class->dataTypeString);
return ((unsigned int (*)(void *, void *, const char *))(void *)dataType->_vTbl[__ecereVMethodID_class_OnGetDataFromString])(dataType, data, string);
}
else if(!string[0] && _class->type == 0)
integerClass->dataTypeString = __ecereNameSpace__ecere__sys__CopyString("ssize_t");
integerClass->structSize = 0;
integerClass->typeSize = sizeof(ssize_t);
-if(sizeof(size_t) == 8)
+if(sizeof(ssize_t) == 8)
{
__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnGetString", (((void *)0)), __ecereNameSpace__ecere__com__Int64_OnGetString, 1);
__ecereNameSpace__ecere__com__eClass_AddMethod(integerClass, "OnGetDataFromString", (((void *)0)), __ecereNameSpace__ecere__com__Int64_OnGetDataFromString, 1);
class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(0, "ecere::com::IOChannel", 0, 0, 0, 0, 0, module, 4, 1);
if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application && class)
__ecereClass___ecereNameSpace__ecere__com__IOChannel = class;
-__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "WriteData", "unsigned int WriteData(byte * data, unsigned int numBytes)", 0, 1);
-__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "ReadData", "unsigned int ReadData(byte * data, unsigned int numBytes)", 0, 1);
+__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "WriteData", "uint WriteData(byte * data, unsigned int numBytes)", 0, 1);
+__ecereNameSpace__ecere__com__eClass_AddVirtualMethod(class, "ReadData", "uint ReadData(byte * data, unsigned int numBytes)", 0, 1);
__ecereNameSpace__ecere__com__eClass_AddMethod(class, "Get", "void Get(typed_object * data)", __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Get, 1);
__ecereNameSpace__ecere__com__eClass_AddMethod(class, "Put", "void Put(typed_object data)", __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Put, 1);
__ecereNameSpace__ecere__com__eClass_AddMethod(class, "Serialize", "void Serialize(typed_object data)", __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Serialize, 1);
__ecerePropM___ecereNameSpace__ecere__com__SerialBuffer_buffer = __ecereNameSpace__ecere__com__eClass_AddProperty(class, "buffer", "byte *", __ecereProp___ecereNameSpace__ecere__com__SerialBuffer_Set_buffer, __ecereProp___ecereNameSpace__ecere__com__SerialBuffer_Get_buffer, 1);
if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application)
__ecereProp___ecereNameSpace__ecere__com__SerialBuffer_buffer = __ecerePropM___ecereNameSpace__ecere__com__SerialBuffer_buffer, __ecerePropM___ecereNameSpace__ecere__com__SerialBuffer_buffer = (void *)0;
-__ecerePropM___ecereNameSpace__ecere__com__SerialBuffer_size = __ecereNameSpace__ecere__com__eClass_AddProperty(class, "size", "unsigned int", __ecereProp___ecereNameSpace__ecere__com__SerialBuffer_Set_size, __ecereProp___ecereNameSpace__ecere__com__SerialBuffer_Get_size, 1);
+__ecerePropM___ecereNameSpace__ecere__com__SerialBuffer_size = __ecereNameSpace__ecere__com__eClass_AddProperty(class, "size", "uint", __ecereProp___ecereNameSpace__ecere__com__SerialBuffer_Set_size, __ecereProp___ecereNameSpace__ecere__com__SerialBuffer_Get_size, 1);
if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application)
__ecereProp___ecereNameSpace__ecere__com__SerialBuffer_size = __ecerePropM___ecereNameSpace__ecere__com__SerialBuffer_size, __ecerePropM___ecereNameSpace__ecere__com__SerialBuffer_size = (void *)0;
__ecereNameSpace__ecere__com__eSystem_RegisterFunction("ecere::com::Enum_OnGetString", "char * ecere::com::Enum_OnGetString(ecere::com::Class _class, int * data, char * tempString, void * fieldData, bool * needClass)", __ecereNameSpace__ecere__com__Enum_OnGetString, module, 4);
}
else
{
+if(type && type->kind == 14 && type->prev && type->prev->kind == 8 && type->prev->classObjectType)
+{
+e->destType = type->prev;
+e->destType->refCount++;
+}
+else
+{
e->destType = type;
if(type)
type->refCount++;
}
+}
if(type && type->kind != 14)
{
struct Type * next = type->next;
msgid "%s expected to be derived from method class\n"
msgstr "%s expected to be derived from method class\n"
-#: ./src/pass15.ec:8973
+#: ./src/pass15.ec:8975
msgid "%s undefined; assuming extern returning int\n"
msgstr "%s undefined; assuming extern returning int\n"
msgid "Array size not constant int (%s)\n"
msgstr "Array size not constant int (%s)\n"
-#: ./src/pass15.ec:10480
+#: ./src/pass15.ec:10482
msgid "Assigning list initializer to non list\n"
msgstr "Assigning list initializer to non list\n"
-#: ./src/pass15.ec:10144
-#: ./src/pass15.ec:11191
+#: ./src/pass15.ec:10146
+#: ./src/pass15.ec:11193
msgid "Couldn't determine type of array elements\n"
msgstr "Couldn't determine type of array elements\n"
msgid "Expecting class specifier\n"
msgstr "Expecting class specifier\n"
-#: ./src/pass15.ec:11349
+#: ./src/pass15.ec:11351
msgid "Expression is not a container\n"
msgstr "Expression is not a container\n"
msgid "Incompatible virtual function %s\n"
msgstr "Incompatible virtual function %s\n"
-#: ./src/pass15.ec:11623
-#: ./src/pass15.ec:11698
+#: ./src/pass15.ec:11625
+#: ./src/pass15.ec:11700
msgid "Invalid object specified and not inside a class\n"
msgstr "Invalid object specified and not inside a class\n"
-#: ./src/pass15.ec:11531
+#: ./src/pass15.ec:11533
msgid "Invalid watched object\n"
msgstr "Invalid watched object\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:11544
+#: ./src/pass15.ec:11546
msgid "No observer specified and not inside a _class\n"
msgstr "No observer specified and not inside a _class\n"
-#: ./src/pass15.ec:11701
+#: ./src/pass15.ec:11703
msgid "No observer specified and not inside a class\n"
msgstr "No observer specified and not inside a class\n"
msgstr "Non-static %s making use of a static class\n"
#: ./src/pass1.ec:1037
-#: ./src/pass15.ec:11526
-#: ./src/pass15.ec:11598
-#: ./src/pass15.ec:11687
+#: ./src/pass15.ec:11528
+#: ./src/pass15.ec:11600
+#: ./src/pass15.ec:11689
msgid "Property %s not found in class %s\n"
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"
-#: ./src/pass15.ec:7424
+#: ./src/pass15.ec:7418
msgid "Recursion in defined expression %s\n"
msgstr "Recursion in defined expression %s\n"
msgid "Redefinition of method %s in class %s\n"
msgstr "Redefinition of method %s in class %s\n"
-#: ./src/pass15.ec:4394
-#: ./src/pass15.ec:4501
+#: ./src/pass15.ec:4388
+#: ./src/pass15.ec:4495
msgid "Unhandled type populating instance\n"
msgstr "Unhandled type populating instance\n"
-#: ./src/pass15.ec:7160
+#: ./src/pass15.ec:7154
msgid "Unspecified type\n"
msgstr "Unspecified type\n"
-#: ./src/pass15.ec:8988
+#: ./src/pass15.ec:8990
msgid "callable object undefined; extern assuming returning int\n"
msgstr "callable object undefined; extern assuming returning int\n"
-#: ./src/pass15.ec:8798
+#: ./src/pass15.ec:8792
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:7886
-#: ./src/pass15.ec:8050
+#: ./src/pass15.ec:8044
msgid "cannot add two pointers\n"
msgstr "cannot add two pointers\n"
msgid "class member instance"
msgstr "class member instance"
-#: ./src/pass15.ec:10219
+#: ./src/pass15.ec:10221
msgid "couldn't determine type of %s; expected %s\n"
msgstr "couldn't determine type of %s; expected %s\n"
-#: ./src/pass15.ec:8427
-#: ./src/pass15.ec:8439
-#: ./src/pass15.ec:10231
-#: ./src/pass15.ec:10307
+#: ./src/pass15.ec:8421
+#: ./src/pass15.ec:8433
+#: ./src/pass15.ec:10233
+#: ./src/pass15.ec:10309
msgid "couldn't determine type of %s\n"
msgstr "couldn't determine type of %s\n"
#: ./src/pass15.ec:1882
-#: ./src/pass15.ec:9453
+#: ./src/pass15.ec:9455
msgid "couldn't find member %s in class %s\n"
msgstr "couldn't find member %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:8042
+#: ./src/pass15.ec:8036
msgid "different levels of indirection\n"
msgstr "different levels of indirection\n"
-#: ./src/pass15.ec:7898
-#: ./src/pass15.ec:10262
+#: ./src/pass15.ec:7892
+#: ./src/pass15.ec:10264
msgid "incompatible expression %s (%s); expected %s\n"
msgstr "incompatible expression %s (%s); expected %s\n"
-#: ./src/pass15.ec:8159
-#: ./src/pass15.ec:8319
+#: ./src/pass15.ec:8153
+#: ./src/pass15.ec:8313
msgid "incompatible expressions %s (%s) and %s (%s)\n"
msgstr "incompatible expressions %s (%s) and %s (%s)\n"
msgid "incompatible return type for function\n"
msgstr "incompatible return type for function\n"
-#: ./src/pass15.ec:9267
+#: ./src/pass15.ec:9269
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:9737
+#: ./src/pass15.ec:9739
msgid "member operator on non-structure type expression %s\n"
msgstr "member operator on non-structure type expression %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:8947
+#: ./src/pass15.ec:8949
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:8943
+#: ./src/pass15.ec:8945
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 parameters\n"
msgstr "not enough parameters\n"
-#: ./src/pass15.ec:7985
+#: ./src/pass15.ec:7979
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:7810
+#: ./src/pass15.ec:7804
msgid "operator %s illegal on pointer\n"
msgstr "operator %s illegal on pointer\n"
msgid "syntax error\n"
msgstr "syntax error\n"
-#: ./src/pass15.ec:8866
+#: ./src/pass15.ec:8860
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:8862
+#: ./src/pass15.ec:8856
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 parameters\n"
msgstr "too many parameters\n"
-#: ./src/pass15.ec:9720
+#: ./src/pass15.ec:9722
msgid "undefined class %s\n"
msgstr "undefined class %s\n"
-#: ./src/pass15.ec:10298
+#: ./src/pass15.ec:10300
msgid "unresolved identifier %s::%s\n"
msgstr "unresolved identifier %s::%s\n"
-#: ./src/pass15.ec:10217
+#: ./src/pass15.ec:10219
msgid "unresolved identifier %s; expected %s\n"
msgstr "unresolved identifier %s; expected %s\n"
-#: ./src/pass15.ec:10229
-#: ./src/pass15.ec:10300
+#: ./src/pass15.ec:10231
+#: ./src/pass15.ec:10302
msgid "unresolved identifier %s\n"
msgstr "unresolved identifier %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:7871
-#: ./src/pass15.ec:8028
-#: ./src/pass15.ec:8035
+#: ./src/pass15.ec:7865
+#: ./src/pass15.ec:8022
+#: ./src/pass15.ec:8029
msgid "void *: unknown size\n"
msgstr "void *: unknown size\n"
}
else
{
- e.destType = type;
- if(type) type.refCount++;
+ if(type && type.kind == ellipsisType && type.prev && type.prev.kind == classType && type.prev.classObjectType)
+ {
+ e.destType = type.prev;
+ e.destType.refCount++;
+ }
+ else
+ {
+ e.destType = type;
+ if(type) type.refCount++;
+ }
}
// Don't reach the end for the ellipsis
if(type && type.kind != ellipsisType)
}
else if(_class.type == unitClass)
{
- Class dataType = eSystem_FindClass(module, _class.dataTypeString);
+ Class dataType;
+ Property prop;
+ for(prop = _class.conversions.first; prop; prop = prop.next)
+ {
+ bool refProp = false;
+ Class c;
+ if(!strcmp(prop.name, _class.base.fullName))
+ refProp = true;
+ else if( (c = eSystem_FindClass(_class.module, prop.name) ) )
+ {
+ Property p;
+ for(p = c.conversions.first; p; p = p.next)
+ {
+ if(!strcmp(p.name, _class.base.fullName) && !p.Set && !p.Get)
+ {
+ refProp = true;
+ break;
+ }
+ }
+ }
+ if(refProp)
+ {
+ if(prop.Set && prop.Get)
+ {
+ String dts = _class.base.dataTypeString;
+ if(!strcmp(dts, "double"))
+ {
+ double d = ((double(*)(double))(void *)prop.Set)(*(double *)data);
+ return ((char *(*)(void *, void *, char *, void *, bool *))(void *)class(double)._vTbl[__ecereVMethodID_class_OnGetString])(class(double), &d, tempString, fieldData, needClass);
+ }
+ else if(!strcmp(dts, "float"))
+ {
+ float d = ((float(*)(float))(void *)prop.Set)(*(float *)data);
+ return ((char *(*)(void *, void *, char *, void *, bool *))(void *)class(float)._vTbl[__ecereVMethodID_class_OnGetString])(class(float), &d, tempString, fieldData, needClass);
+ }
+ else if(!strcmp(dts, "int"))
+ {
+ int d = ((int(*)(int))(void *)prop.Set)(*(int *)data);
+ return ((char *(*)(void *, void *, char *, void *, bool *))(void *)class(int)._vTbl[__ecereVMethodID_class_OnGetString])(class(int), &d, tempString, fieldData, needClass);
+ }
+ else if(!strcmp(dts, "int64"))
+ {
+ int64 d = ((int64(*)(int64))(void *)prop.Set)(*(int64 *)data);
+ return ((char *(*)(void *, void *, char *, void *, bool *))(void *)class(int64)._vTbl[__ecereVMethodID_class_OnGetString])(class(int64), &d, tempString, fieldData, needClass);
+ }
+ }
+ else
+ break;
+ }
+ }
+ dataType = eSystem_FindClass(module, _class.dataTypeString);
return ((char *(*)(void *, void *, char *, void *, bool *))(void *)dataType._vTbl[__ecereVMethodID_class_OnGetString])(dataType, data, tempString, fieldData, needClass);
}
else
result = Enum_OnGetDataFromString(_class, (int *)data, string);
else if(_class.type == unitClass)
{
- Class dataType = eSystem_FindClass(module, _class.dataTypeString);
+ Class dataType;
+ Property prop;
+ for(prop = _class.conversions.first; prop; prop = prop.next)
+ {
+ bool refProp = false;
+ Class c;
+ if(!strcmp(prop.name, _class.base.fullName))
+ refProp = true;
+ else if( (c = eSystem_FindClass(_class.module, prop.name) ) )
+ {
+ Property p;
+ for(p = c.conversions.first; p; p = p.next)
+ {
+ if(!strcmp(p.name, _class.base.fullName) && !p.Set && !p.Get)
+ {
+ refProp = true;
+ break;
+ }
+ }
+ }
+ if(refProp)
+ {
+ if(prop.Set && prop.Get)
+ {
+ String dts = _class.base.dataTypeString;
+ if(!strcmp(dts, "double"))
+ {
+ double d;
+ bool result = ((bool (*)(void *, void *, const char *))(void *)class(double)._vTbl[__ecereVMethodID_class_OnGetDataFromString])(class(double), &d, string);
+ *(double *)data =((double(*)(double))(void *)prop.Get)(d);
+ return result;
+ }
+ else if(!strcmp(dts, "float"))
+ {
+ float d;
+ bool result = ((bool (*)(void *, void *, const char *))(void *)class(float)._vTbl[__ecereVMethodID_class_OnGetDataFromString])(class(float), &d, string);
+ *(float *)data = ((float(*)(float))(void *)prop.Get)(d);
+ return result;
+ }
+ else if(!strcmp(dts, "int"))
+ {
+ int d;
+ bool result = ((bool (*)(void *, void *, const char *))(void *)class(int)._vTbl[__ecereVMethodID_class_OnGetDataFromString])(class(int), &d, string);
+ *(int *)data = ((int(*)(int))(void *)prop.Get)(d);
+ return result;
+ }
+ else if(!strcmp(dts, "int64"))
+ {
+ int64 d;
+ bool result = ((bool (*)(void *, void *, const char *))(void *)class(int64)._vTbl[__ecereVMethodID_class_OnGetDataFromString])(class(int64), &d, string);
+ *(int64 *)data = ((int64(*)(int64))(void *)prop.Get)(d);
+ return result;
+ }
+ }
+ else
+ break;
+ }
+ }
+ dataType = eSystem_FindClass(module, _class.dataTypeString);
return ((bool (*)(void *, void *, const char *))(void *)dataType._vTbl[__ecereVMethodID_class_OnGetDataFromString])(dataType, data, string);
}
else if(!string[0] && _class.type == normalClass)