From 405d69ab212ed0005e524fe5e24280cce2a76d09 Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Fri, 24 Apr 2015 02:26:04 -0400 Subject: [PATCH] compiler/bootstrap: updated --- compiler/bootstrap/ecere/bootstrap/Array.c | 33 +++++ compiler/bootstrap/ecere/bootstrap/Container.c | 139 +++++++++++++++++- compiler/bootstrap/ecere/bootstrap/Map.c | 191 +++++++++++++------------ compiler/bootstrap/ecere/bootstrap/dataTypes.c | 17 +++ 4 files changed, 283 insertions(+), 97 deletions(-) diff --git a/compiler/bootstrap/ecere/bootstrap/Array.c b/compiler/bootstrap/ecere/bootstrap/Array.c index 53bfcde..71fcbc9 100644 --- a/compiler/bootstrap/ecere/bootstrap/Array.c +++ b/compiler/bootstrap/ecere/bootstrap/Array.c @@ -49,6 +49,8 @@ typedef unsigned __int64 uint64; #endif #include #include +extern int __ecereVMethodID_class_OnUnserialize; + struct __ecereNameSpace__ecere__com__Array { uint64 * array; @@ -56,6 +58,8 @@ unsigned int count; unsigned int minAllocSize; } ecere_gcc_struct; +extern struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__com__Class_char__PTR_; + struct __ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__OldList @@ -103,6 +107,8 @@ extern void * __ecereNameSpace__ecere__com__eSystem_Renew0(void * memory, unsi extern void __ecereNameSpace__ecere__com__eSystem_Delete(void * memory); +extern int printf(const char * , ...); + struct __ecereNameSpace__ecere__com__IteratorPointer; extern void * memmove(void * , const void * , size_t size); @@ -134,6 +140,8 @@ extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecere extern void __ecereNameSpace__ecere__com__eClass_SetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name, long long value); +extern void * __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class); + struct __ecereNameSpace__ecere__com__BuiltInContainer { void * _vTbl; @@ -192,6 +200,8 @@ unsigned int __ecereProp___ecereNameSpace__ecere__com__Array_Get_minAllocSize(st void __ecereProp___ecereNameSpace__ecere__com__Array_Set_minAllocSize(struct __ecereNameSpace__ecere__com__Instance * this, unsigned int value); +void __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Get(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Class * class, void * * data); + int __ecereVMethodID___ecereNameSpace__ecere__com__Container_GetCount; int __ecereVMethodID___ecereNameSpace__ecere__com__Container_GetFirst; @@ -376,6 +386,12 @@ struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace; static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Array; +const char * __ecereProp___ecereNameSpace__ecere__com__Class_Get_char__PTR_(struct __ecereNameSpace__ecere__com__Class * this); + +struct __ecereNameSpace__ecere__com__Class * __ecereProp___ecereNameSpace__ecere__com__Class_Set_char__PTR_(const char * value); + +extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_uint; + extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance; extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Container; @@ -444,6 +460,22 @@ __attribute__((unused)) struct __ecereNameSpace__ecere__com__Array * __ecerePoin return __ecerePointer___ecereNameSpace__ecere__com__Array->minAllocSize; } +void __ecereMethod___ecereNameSpace__ecere__com__Array_OnUnserialize(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__Instance ** this, struct __ecereNameSpace__ecere__com__Instance * channel) +{ +__attribute__((unused)) struct __ecereNameSpace__ecere__com__Array * __ecerePointer___ecereNameSpace__ecere__com__Array = (struct __ecereNameSpace__ecere__com__Array *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0); +struct __ecereNameSpace__ecere__com__Instance * array = __ecereNameSpace__ecere__com__eInstance_New(__ecereProp___ecereNameSpace__ecere__com__Class_Set_char__PTR_(class->fullName)); +unsigned int count, c; +struct __ecereNameSpace__ecere__com__Class * Dclass = class->templateArgs[2].__anon1.__anon1.dataTypeClass; + +__ecereMethod___ecereNameSpace__ecere__com__IOChannel_Get(channel, __ecereClass_uint, (void *)&count); +if(count > 10000) +printf("Bug"); +__ecereProp___ecereNameSpace__ecere__com__Array_Set_size(array, count); +for(c = 0; c < count; c++) +((void (*)(void *, void *, void *))(void *)Dclass->_vTbl[__ecereVMethodID_class_OnUnserialize])(Dclass, ((unsigned char *)((struct __ecereNameSpace__ecere__com__Array *)(((char *)array + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->array) + Dclass->typeSize * c, channel); +(*this) = array; +} + struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__Array_GetLast(struct __ecereNameSpace__ecere__com__Instance * this) { __attribute__((unused)) struct __ecereNameSpace__ecere__com__Array * __ecerePointer___ecereNameSpace__ecere__com__Array = (struct __ecereNameSpace__ecere__com__Array *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0); @@ -688,6 +720,7 @@ struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class; class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(0, "ecere::com::Array", "ecere::com::Container", sizeof(struct __ecereNameSpace__ecere__com__Array), 0, (void *)0, (void *)__ecereDestructor___ecereNameSpace__ecere__com__Array, module, 4, 1); if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application && class) __ecereClass___ecereNameSpace__ecere__com__Array = class; +__ecereNameSpace__ecere__com__eClass_AddMethod(class, "OnUnserialize", 0, __ecereMethod___ecereNameSpace__ecere__com__Array_OnUnserialize, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(class, "GetFirst", 0, __ecereMethod___ecereNameSpace__ecere__com__Array_GetFirst, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(class, "GetLast", 0, __ecereMethod___ecereNameSpace__ecere__com__Array_GetLast, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(class, "GetPrev", 0, __ecereMethod___ecereNameSpace__ecere__com__Array_GetPrev, 1); diff --git a/compiler/bootstrap/ecere/bootstrap/Container.c b/compiler/bootstrap/ecere/bootstrap/Container.c index 535619c..8501ad1 100644 --- a/compiler/bootstrap/ecere/bootstrap/Container.c +++ b/compiler/bootstrap/ecere/bootstrap/Container.c @@ -807,6 +807,131 @@ __internal_VirtualMethod ? __internal_VirtualMethod(this, data) : (struct __ecer } } +int __ecereMethod___ecereNameSpace__ecere__com__Container_OnCompare(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Instance * b) +{ +struct __ecereNameSpace__ecere__com__IteratorPointer * ia, * ib; +struct __ecereNameSpace__ecere__com__Class * Dclass = class->templateArgs[2].__anon1.__anon1.dataTypeClass; +unsigned int byRef = (Dclass->type == 1000 && !Dclass->byValueSystemClass) || Dclass->type == 2 || Dclass->type == 4 || Dclass->type == 3; +int (* onCompare)(void *, const void *, const void *) = (void *)Dclass->_vTbl[__ecereVMethodID_class_OnCompare]; + +if(this && !b) +return 1; +if(b && !this) +return -1; +if((__extension__ ({ +int (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *); + +__internal_VirtualMethod = ((int (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({ +struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this; + +__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl; +})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetCount]); +__internal_VirtualMethod ? __internal_VirtualMethod(this) : (int)1; +})) > (__extension__ ({ +int (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *); + +__internal_VirtualMethod = ((int (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({ +struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = b; + +__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl; +})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetCount]); +__internal_VirtualMethod ? __internal_VirtualMethod(b) : (int)1; +}))) +return 1; +if((__extension__ ({ +int (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *); + +__internal_VirtualMethod = ((int (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({ +struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this; + +__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl; +})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetCount]); +__internal_VirtualMethod ? __internal_VirtualMethod(this) : (int)1; +})) < (__extension__ ({ +int (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *); + +__internal_VirtualMethod = ((int (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({ +struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = b; + +__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl; +})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetCount]); +__internal_VirtualMethod ? __internal_VirtualMethod(b) : (int)1; +}))) +return -1; +ia = (__extension__ ({ +struct __ecereNameSpace__ecere__com__IteratorPointer * (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *); + +__internal_VirtualMethod = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({ +struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this; + +__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl; +})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetFirst]); +__internal_VirtualMethod ? __internal_VirtualMethod(this) : (struct __ecereNameSpace__ecere__com__IteratorPointer *)1; +})); +ib = (__extension__ ({ +struct __ecereNameSpace__ecere__com__IteratorPointer * (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *); + +__internal_VirtualMethod = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({ +struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = b; + +__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl; +})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetFirst]); +__internal_VirtualMethod ? __internal_VirtualMethod(b) : (struct __ecereNameSpace__ecere__com__IteratorPointer *)1; +})); +while(ia && ib) +{ +uint64 dataA = (__extension__ ({ +uint64 (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer); + +__internal_VirtualMethod = ((uint64 (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({ +struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this; + +__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl; +})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetData]); +__internal_VirtualMethod ? __internal_VirtualMethod(this, ia) : (uint64)1; +})); +uint64 dataB = (__extension__ ({ +uint64 (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer); + +__internal_VirtualMethod = ((uint64 (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({ +struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = b; + +__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl; +})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetData]); +__internal_VirtualMethod ? __internal_VirtualMethod(b, ib) : (uint64)1; +})); +int r = onCompare(Dclass, byRef ? ((char *)&dataA + __ENDIAN_PAD(class->templateArgs[2].__anon1.__anon1.dataTypeClass->typeSize)) : (const void *)(uintptr_t)dataA, byRef ? ((char *)&dataB + __ENDIAN_PAD(class->templateArgs[2].__anon1.__anon1.dataTypeClass->typeSize)) : (const void *)(uintptr_t)dataB); + +if(r) +return r; +ia = (__extension__ ({ +struct __ecereNameSpace__ecere__com__IteratorPointer * (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer); + +__internal_VirtualMethod = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({ +struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this; + +__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl; +})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetNext]); +__internal_VirtualMethod ? __internal_VirtualMethod(this, ia) : (struct __ecereNameSpace__ecere__com__IteratorPointer *)1; +})); +ib = (__extension__ ({ +struct __ecereNameSpace__ecere__com__IteratorPointer * (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer); + +__internal_VirtualMethod = ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({ +struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = b; + +__internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl; +})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetNext]); +__internal_VirtualMethod ? __internal_VirtualMethod(b, ib) : (struct __ecereNameSpace__ecere__com__IteratorPointer *)1; +})); +} +if(ia) +return 1; +if(ib) +return -1; +return 0; +} + int __ecereMethod___ecereNameSpace__ecere__com__Container_GetCount(struct __ecereNameSpace__ecere__com__Instance * this) { int count = 0; @@ -1006,8 +1131,10 @@ struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereName { struct __ecereNameSpace__ecere__com__IteratorPointer * i; struct __ecereNameSpace__ecere__com__Class * Dclass = ((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[2].__anon1.__anon1.dataTypeClass; +unsigned int byRef = (Dclass->type == 1000 && !Dclass->byValueSystemClass) || Dclass->type == 2 || Dclass->type == 4 || Dclass->type == 3; +int (* onCompare)(void *, const void *, const void *) = (void *)Dclass->_vTbl[__ecereVMethodID_class_OnCompare]; -if(((Dclass->type == 1000 && !Dclass->byValueSystemClass) || Dclass->type == 2 || Dclass->type == 4 || Dclass->type == 3)) +if(byRef) { for(i = (__extension__ ({ struct __ecereNameSpace__ecere__com__IteratorPointer * (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *); @@ -1039,7 +1166,7 @@ __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpa })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetData]); __internal_VirtualMethod ? __internal_VirtualMethod(this, i) : (uint64)1; })); -int result = ((int (*)(void *, const void *, const void *))(void *)Dclass->_vTbl[__ecereVMethodID_class_OnCompare])(Dclass, ((char *)&value + __ENDIAN_PAD(((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[2].__anon1.__anon1.dataTypeClass->typeSize)), ((char *)&data + __ENDIAN_PAD(((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[2].__anon1.__anon1.dataTypeClass->typeSize))); +int result = onCompare(Dclass, ((char *)&value + __ENDIAN_PAD(((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[2].__anon1.__anon1.dataTypeClass->typeSize)), ((char *)&data + __ENDIAN_PAD(((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[2].__anon1.__anon1.dataTypeClass->typeSize))); if(!result) return i; @@ -1077,7 +1204,7 @@ __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpa })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetData]); __internal_VirtualMethod ? __internal_VirtualMethod(this, i) : (uint64)1; })); -int result = ((int (*)(void *, const void *, const void *))(void *)Dclass->_vTbl[__ecereVMethodID_class_OnCompare])(Dclass, (const void *)(uintptr_t)value, (const void *)(uintptr_t)data); +int result = onCompare(Dclass, (const void *)(uintptr_t)value, (const void *)(uintptr_t)data); if(!result) return i; @@ -1114,7 +1241,7 @@ __internal_VirtualMethod ? __internal_VirtualMethod(this, i) : (void)1; void __ecereMethod___ecereNameSpace__ecere__com__Container_OnSerialize(struct __ecereNameSpace__ecere__com__Class * class, struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Instance * channel) { -unsigned int count = (__extension__ ({ +unsigned int count = (struct __ecereNameSpace__ecere__com__Instance *)this ? (__extension__ ({ int (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *); __internal_VirtualMethod = ((int (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({ @@ -1123,12 +1250,13 @@ struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this; __internal_ClassInst ? __internal_ClassInst->_vTbl : class->_vTbl; })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetCount]); __internal_VirtualMethod ? __internal_VirtualMethod(this) : (int)1; -})); +})) : 0; struct __ecereNameSpace__ecere__com__IteratorPointer * i; struct __ecereNameSpace__ecere__com__Class * Dclass = class->templateArgs[2].__anon1.__anon1.dataTypeClass; unsigned int isNormalClass = (Dclass->type == 0) && Dclass->structSize; __ecereMethod___ecereNameSpace__ecere__com__IOChannel_Put(channel, __ecereClass_uint, (void *)&count); +if((struct __ecereNameSpace__ecere__com__Instance *)this) for(i = (__extension__ ({ struct __ecereNameSpace__ecere__com__IteratorPointer * (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *); @@ -1305,6 +1433,7 @@ __ecereNameSpace__ecere__com__eClass_DoneAddingTemplateParameters(class); class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(0, "ecere::com::Container", 0, 0, 0, (void *)0, (void *)__ecereDestructor___ecereNameSpace__ecere__com__Container, module, 4, 1); if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application && class) __ecereClass___ecereNameSpace__ecere__com__Container = class; +__ecereNameSpace__ecere__com__eClass_AddMethod(class, "OnCompare", 0, __ecereMethod___ecereNameSpace__ecere__com__Container_OnCompare, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(class, "OnCopy", 0, __ecereMethod___ecereNameSpace__ecere__com__Container_OnCopy, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(class, "OnFree", 0, __ecereMethod___ecereNameSpace__ecere__com__Container_OnFree, 1); __ecereNameSpace__ecere__com__eClass_AddMethod(class, "OnGetString", 0, __ecereMethod___ecereNameSpace__ecere__com__Container_OnGetString, 1); diff --git a/compiler/bootstrap/ecere/bootstrap/Map.c b/compiler/bootstrap/ecere/bootstrap/Map.c index b0301e3..e06f686 100644 --- a/compiler/bootstrap/ecere/bootstrap/Map.c +++ b/compiler/bootstrap/ecere/bootstrap/Map.c @@ -638,30 +638,16 @@ __ecereProp___ecereNameSpace__ecere__com__MapNode_Set_value(node, value); return 1; } -void __ecereMethod___ecereNameSpace__ecere__com__Map_Delete(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__MapNode * node) +void __ecereMethod___ecereNameSpace__ecere__com__Map_FreeKey(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__MapNode * node) { -uint64 value = (__extension__ ({ -uint64 (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer); - -__internal_VirtualMethod = ((uint64 (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({ -struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this; - -__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Map->_vTbl; -})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetData]); -__internal_VirtualMethod ? __internal_VirtualMethod(this, (void *)(node)) : (uint64)1; -})); - -(((void (* )(void * _class, void * data))((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[6].__anon1.__anon1.dataTypeClass->_vTbl[__ecereVMethodID_class_OnFree])(((struct __ecereNameSpace__ecere__com__Instance * )(char * )this)->_class->templateArgs[6].__anon1.__anon1.dataTypeClass, ((void * )((uintptr_t)(value)))), value = 0); -(__extension__ ({ -void (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it); - -__internal_VirtualMethod = ((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__extension__ ({ -struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this; +if(((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[5].__anon1.__anon1.dataTypeClass->type == 1) +{ +struct __ecereNameSpace__ecere__com__Class * Tclass = ((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[5].__anon1.__anon1.dataTypeClass; -__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Map->_vTbl; -})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove]); -__internal_VirtualMethod ? __internal_VirtualMethod(this, (void *)(node)) : (void)1; -})); +((void (*)(void *, void *))(void *)Tclass->_vTbl[__ecereVMethodID_class_OnFree])(Tclass, (((unsigned char *)&node->key) + __ENDIAN_PAD(sizeof(void *)))); +} +else +(((void (* )(void * _class, void * data))((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[5].__anon1.__anon1.dataTypeClass->_vTbl[__ecereVMethodID_class_OnFree])(((struct __ecereNameSpace__ecere__com__Instance * )(char * )this)->_class->templateArgs[5].__anon1.__anon1.dataTypeClass, ((void * )((uintptr_t)(__ecereProp___ecereNameSpace__ecere__com__MapNode_Get_key(node))))), __ecereProp___ecereNameSpace__ecere__com__MapNode_Set_key(node, 0)); } void __ecereProp___ecereNameSpace__ecere__com__Map_Set_mapSrc(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Instance * value) @@ -838,76 +824,6 @@ return (((void *)0)); } } -void __ecereMethod___ecereNameSpace__ecere__com__Map_Remove(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__MapNode * node) -{ -(__extension__ ({ -void (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it); - -__internal_VirtualMethod = ((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__ecereClass___ecereNameSpace__ecere__com__CustomAVLTree->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove]); -__internal_VirtualMethod ? __internal_VirtualMethod(this, (void *)(node)) : (void)1; -})); -if(((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[5].__anon1.__anon1.dataTypeClass->type == 1) -{ -struct __ecereNameSpace__ecere__com__Class * Tclass = ((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[5].__anon1.__anon1.dataTypeClass; - -((void (*)(void *, void *))(void *)Tclass->_vTbl[__ecereVMethodID_class_OnFree])(Tclass, (((unsigned char *)&node->key) + __ENDIAN_PAD(sizeof(void *)))); -} -else -(((void (* )(void * _class, void * data))((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[5].__anon1.__anon1.dataTypeClass->_vTbl[__ecereVMethodID_class_OnFree])(((struct __ecereNameSpace__ecere__com__Instance * )(char * )this)->_class->templateArgs[5].__anon1.__anon1.dataTypeClass, ((void * )((uintptr_t)(__ecereProp___ecereNameSpace__ecere__com__MapNode_Get_key(node))))), __ecereProp___ecereNameSpace__ecere__com__MapNode_Set_key(node, 0)); -((node ? __extension__ ({ -void * __ecerePtrToDelete = (node); - -__ecereClass___ecereNameSpace__ecere__com__MapNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__MapNode->Destructor((void *)__ecerePtrToDelete) : 0, __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor((void *)__ecerePtrToDelete) : 0, __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor ? __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete); -}) : 0), node = 0); -} - -void __ecereMethod___ecereNameSpace__ecere__com__Map_Free(struct __ecereNameSpace__ecere__com__Instance * this) -{ -struct __ecereNameSpace__ecere__com__MapNode * node = (void *)(((struct __ecereNameSpace__ecere__com__CustomAVLTree *)(((char *)this + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->root); - -while(node) -{ -if(node->left) -{ -struct __ecereNameSpace__ecere__com__MapNode * left = node->left; - -node->left = (((void *)0)); -node = left; -} -else if(node->right) -{ -struct __ecereNameSpace__ecere__com__MapNode * right = node->right; - -node->right = (((void *)0)); -node = right; -} -else -{ -struct __ecereNameSpace__ecere__com__MapNode * parent = node->parent; -uint64 value = (__extension__ ({ -uint64 (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer); - -__internal_VirtualMethod = ((uint64 (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({ -struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this; - -__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Map->_vTbl; -})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetData]); -__internal_VirtualMethod ? __internal_VirtualMethod(this, (void *)(node)) : (uint64)1; -})); - -(((void (* )(void * _class, void * data))((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[6].__anon1.__anon1.dataTypeClass->_vTbl[__ecereVMethodID_class_OnFree])(((struct __ecereNameSpace__ecere__com__Instance * )(char * )this)->_class->templateArgs[6].__anon1.__anon1.dataTypeClass, ((void * )((uintptr_t)(value)))), value = 0); -((node ? __extension__ ({ -void * __ecerePtrToDelete = (node); - -__ecereClass___ecereNameSpace__ecere__com__MapNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__MapNode->Destructor((void *)__ecerePtrToDelete) : 0, __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor((void *)__ecerePtrToDelete) : 0, __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor ? __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete); -}) : 0), node = 0); -node = parent; -} -} -((struct __ecereNameSpace__ecere__com__CustomAVLTree *)(((char *)this + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->root = (((void *)0)); -((struct __ecereNameSpace__ecere__com__CustomAVLTree *)(((char *)this + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->count = 0; -} - void __ecereMethod___ecereNameSpace__ecere__com__Map_Copy(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Instance * source) { struct __ecereNameSpace__ecere__com__IteratorPointer * i; @@ -1104,6 +1020,97 @@ __ecerePropM___ecereNameSpace__ecere__com__MapIterator_value = (void *)0; __ecerePropM___ecereNameSpace__ecere__com__Map_mapSrc = (void *)0; } +void __ecereMethod___ecereNameSpace__ecere__com__Map_Remove(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__MapNode * node) +{ +(__extension__ ({ +void (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it); + +__internal_VirtualMethod = ((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__ecereClass___ecereNameSpace__ecere__com__CustomAVLTree->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove]); +__internal_VirtualMethod ? __internal_VirtualMethod(this, (void *)(node)) : (void)1; +})); +__ecereMethod___ecereNameSpace__ecere__com__Map_FreeKey(this, node); +((node ? __extension__ ({ +void * __ecerePtrToDelete = (node); + +__ecereClass___ecereNameSpace__ecere__com__MapNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__MapNode->Destructor((void *)__ecerePtrToDelete) : 0, __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor((void *)__ecerePtrToDelete) : 0, __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor ? __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete); +}) : 0), node = 0); +} + +void __ecereMethod___ecereNameSpace__ecere__com__Map_Free(struct __ecereNameSpace__ecere__com__Instance * this) +{ +struct __ecereNameSpace__ecere__com__MapNode * node = (void *)(((struct __ecereNameSpace__ecere__com__CustomAVLTree *)(((char *)this + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->root); + +while(node) +{ +if(node->left) +{ +struct __ecereNameSpace__ecere__com__MapNode * left = node->left; + +node->left = (((void *)0)); +node = left; +} +else if(node->right) +{ +struct __ecereNameSpace__ecere__com__MapNode * right = node->right; + +node->right = (((void *)0)); +node = right; +} +else +{ +struct __ecereNameSpace__ecere__com__MapNode * parent = node->parent; +uint64 value = (__extension__ ({ +uint64 (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer); + +__internal_VirtualMethod = ((uint64 (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({ +struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this; + +__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Map->_vTbl; +})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetData]); +__internal_VirtualMethod ? __internal_VirtualMethod(this, (void *)(node)) : (uint64)1; +})); + +(((void (* )(void * _class, void * data))((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[6].__anon1.__anon1.dataTypeClass->_vTbl[__ecereVMethodID_class_OnFree])(((struct __ecereNameSpace__ecere__com__Instance * )(char * )this)->_class->templateArgs[6].__anon1.__anon1.dataTypeClass, ((void * )((uintptr_t)(value)))), value = 0); +__ecereMethod___ecereNameSpace__ecere__com__Map_FreeKey(this, node); +((node ? __extension__ ({ +void * __ecerePtrToDelete = (node); + +__ecereClass___ecereNameSpace__ecere__com__MapNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__MapNode->Destructor((void *)__ecerePtrToDelete) : 0, __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor((void *)__ecerePtrToDelete) : 0, __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor ? __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete); +}) : 0), node = 0); +node = parent; +} +} +((struct __ecereNameSpace__ecere__com__CustomAVLTree *)(((char *)this + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->root = (((void *)0)); +((struct __ecereNameSpace__ecere__com__CustomAVLTree *)(((char *)this + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->count = 0; +} + +void __ecereMethod___ecereNameSpace__ecere__com__Map_Delete(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__MapNode * node) +{ +uint64 value = (__extension__ ({ +uint64 (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer); + +__internal_VirtualMethod = ((uint64 (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({ +struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this; + +__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Map->_vTbl; +})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetData]); +__internal_VirtualMethod ? __internal_VirtualMethod(this, (void *)(node)) : (uint64)1; +})); + +(((void (* )(void * _class, void * data))((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[6].__anon1.__anon1.dataTypeClass->_vTbl[__ecereVMethodID_class_OnFree])(((struct __ecereNameSpace__ecere__com__Instance * )(char * )this)->_class->templateArgs[6].__anon1.__anon1.dataTypeClass, ((void * )((uintptr_t)(value)))), value = 0); +__ecereMethod___ecereNameSpace__ecere__com__Map_FreeKey(this, node); +(__extension__ ({ +void (* __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it); + +__internal_VirtualMethod = ((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__extension__ ({ +struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = this; + +__internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__Map->_vTbl; +})[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove]); +__internal_VirtualMethod ? __internal_VirtualMethod(this, (void *)(node)) : (void)1; +})); +} + void __ecereRegisterModule_Map(struct __ecereNameSpace__ecere__com__Instance * module) { struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class; diff --git a/compiler/bootstrap/ecere/bootstrap/dataTypes.c b/compiler/bootstrap/ecere/bootstrap/dataTypes.c index fe68b61..0819d16 100644 --- a/compiler/bootstrap/ecere/bootstrap/dataTypes.c +++ b/compiler/bootstrap/ecere/bootstrap/dataTypes.c @@ -2972,10 +2972,27 @@ else if(thisMember->isProperty && ((struct __ecereNameSpace__ecere__com__Propert if(memberType->type == 5 || memberType->type == 0 || memberType->type == 1) ((void (*)(void *, void *))(void *)((struct __ecereNameSpace__ecere__com__Property *)thisMember)->Set)(data, value.__anon1.p); else +{ +if(!strcmp(memberType->dataTypeString, "float")) +{ +((void (*)(void *, float))(void *)((struct __ecereNameSpace__ecere__com__Property *)thisMember)->Set)(data, value.__anon1.f); +} +else if(!strcmp(memberType->dataTypeString, "double")) +{ +((void (*)(void *, double))(void *)((struct __ecereNameSpace__ecere__com__Property *)thisMember)->Set)(data, value.__anon1.d); +} +else if(!strcmp(memberType->dataTypeString, "int64")) +{ +((void (*)(void *, long long))(void *)((struct __ecereNameSpace__ecere__com__Property *)thisMember)->Set)(data, value.__anon1.i64); +} +else +{ ((void (*)(void *, int))(void *)((struct __ecereNameSpace__ecere__com__Property *)thisMember)->Set)(data, value.__anon1.i); } } } +} +} else result = 0; count = 0; -- 1.8.3.1