compiler/bootstrap: Updated
authorJerome St-Louis <jerome@ecere.com>
Wed, 20 Apr 2016 21:54:01 +0000 (17:54 -0400)
committerJerome St-Louis <jerome@ecere.com>
Fri, 29 Apr 2016 16:27:15 +0000 (12:27 -0400)
compiler/bootstrap/ecere/bootstrap/List.c
compiler/bootstrap/ecere/bootstrap/dataTypes.c
compiler/bootstrap/ecere/bootstrap/instance.c
compiler/bootstrap/libec/bootstrap/ecdefs.c
compiler/bootstrap/libec/bootstrap/pass1.c
compiler/bootstrap/libec/bootstrap/pass2.c

index ba152f7..d82b61f 100644 (file)
@@ -465,15 +465,18 @@ struct __ecereNameSpace__ecere__com__Link * link;
 
 if(((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[6].__anon1.__anon1.dataTypeClass && ((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[6].__anon1.__anon1.dataTypeClass->type == 1)
 {
-link = (struct __ecereNameSpace__ecere__com__Link *)__ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (sizeof(struct __ecereNameSpace__ecere__com__ListItem) + ((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[6].__anon1.__anon1.dataTypeClass->structSize));
-memcpy((void *)&link->data, (void *)(uintptr_t)value, ((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[6].__anon1.__anon1.dataTypeClass->structSize);
+unsigned int a = sizeof(struct __ecereNameSpace__ecere__com__ListItem);
+unsigned int b = ((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[6].__anon1.__anon1.dataTypeClass->structSize;
+unsigned int c = a + b;
+
+link = (struct __ecereNameSpace__ecere__com__Link *)__ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (c));
+memcpy((void *)&link->data, (void *)(uintptr_t)value, b);
 }
 else
-link = __extension__ ({
-struct __ecereNameSpace__ecere__com__Link * __ecereInstance1 = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(struct __ecereNameSpace__ecere__com__Link) + sizeof(struct __ecereNameSpace__ecere__com__ListItem));
-
-__ecereInstance1->data = ((uint64)(value)), __ecereInstance1;
-});
+{
+link = (struct __ecereNameSpace__ecere__com__Link *)__ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (sizeof(struct __ecereNameSpace__ecere__com__ListItem) + sizeof(uint64)));
+link->data = ((uint64)(value));
+}
 (__extension__ ({
 struct __ecereNameSpace__ecere__com__IteratorPointer * (*  __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * after, uint64 value);
 
index d9785b8..99d5238 100644 (file)
@@ -2617,7 +2617,7 @@ if(_class->type == 2)
 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)member;
 
 value.__anon1.ui64 = ((*(unsigned int *)data & bitMember->mask) >> bitMember->pos);
-if(value.__anon1.ui64)
+if(value.__anon1.ui64 && (memberType != _class))
 {
 unsigned int needClass = 1;
 char internalMemberString[1024];
index bba5923..986e5f3 100644 (file)
@@ -1257,6 +1257,8 @@ return 0;
 
 void __ecereMethod___ecereNameSpace__ecere__com__BlockPool_Remove(struct __ecereNameSpace__ecere__com__BlockPool * this, struct __ecereNameSpace__ecere__com__MemBlock * block)
 {
+struct __ecereNameSpace__ecere__com__MemPart * part = block->part;
+
 if(block->prev)
 block->prev->next = block->next;
 if(block->next)
@@ -1267,13 +1269,12 @@ if(this->last == block)
 this->last = block->prev;
 block->next = this->free;
 this->free = block;
-block->part->blocksUsed--;
+part->blocksUsed--;
 this->numBlocks--;
-(*block->part->pool).usedSpace -= block->size;
-if(!block->part->blocksUsed && this->numBlocks && this->totalSize > this->numBlocks + this->numBlocks / 2)
+(*part->pool).usedSpace -= block->size;
+if(!part->blocksUsed && this->numBlocks && this->totalSize > this->numBlocks + this->numBlocks / 2)
 {
 struct __ecereNameSpace__ecere__com__MemBlock * next = this->free, * prev = (((void *)0));
-struct __ecereNameSpace__ecere__com__MemPart * part = block->part;
 
 this->free = (((void *)0));
 this->totalSize -= part->size;
@@ -1354,7 +1355,9 @@ struct __ecereNameSpace__ecere__com__MemPart * part = block->part;
 struct __ecereNameSpace__ecere__com__BlockPool * pool = part ? part->pool : (((void *)0));
 
 if(pool)
+{
 __ecereMethod___ecereNameSpace__ecere__com__BlockPool_Remove((&*pool), block);
+}
 else
 {
 __ecereNameSpace__ecere__com__TOTAL_MEM -= sizeof(struct __ecereNameSpace__ecere__com__MemBlock) + block->size;
@@ -5357,7 +5360,7 @@ __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Delete(&(*_class->nameSpa
 {
 struct __ecereNameSpace__ecere__com__NameSpace * ns = _class->nameSpace;
 
-while((*ns).parent && !__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&(*ns).classes) && !__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&(*ns).functions) && !__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&(*ns).defines) && !__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&(*ns).nameSpaces))
+while(ns != nameSpace && (*ns).parent && !__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&(*ns).classes) && !__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&(*ns).functions) && !__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&(*ns).defines) && !__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&(*ns).nameSpaces))
 {
 struct __ecereNameSpace__ecere__com__NameSpace * parent = (*ns).parent;
 
@@ -5550,7 +5553,7 @@ else
 _class->offset = 0;
 if(crossBits)
 {
-if(!strcmp(name, "GNOSISSystem") || !strcmp(name, "LineStyle") || !strcmp(name, "FillStyle") || !strcmp(name, "FontObject") || !strcmp(name, "SymbolStyle"))
+if(!strcmp(name, "GNOSISSystem") || !strcmp(name, "LineStyle") || !strcmp(name, "FillStyle") || !strcmp(name, "FontObject") || !strcmp(name, "FontObject") || !strcmp(name, "ecere::sys::Thread"))
 {
 _class->offset = force32Bits ? 24 : 12;
 }
index 1137461..7a2da92 100644 (file)
@@ -2469,7 +2469,7 @@ __ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "_case", 308);
 __ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "_default", 309);
 __ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "_if", 310);
 __ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "_switch", 311);
-__ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "_whilte", 312);
+__ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "_while", 312);
 __ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "_do", 313);
 __ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "_for", 314);
 __ecereNameSpace__ecere__com__eEnum_AddFixedValue(class, "_goto", 315);
index 384db42..bef8928 100644 (file)
@@ -1630,7 +1630,7 @@ struct __ecereNameSpace__ecere__com__ClassTemplateArgument * arg = FindTemplateA
 
 type->byReference = method->dataType->byReference;
 methodDataType = ProcessTypeString(method->dataTypeString, 0);
-type->__anon1.__anon2.thisClass = methodDataType->__anon1.__anon2.thisClass = arg ? FindClass((*arg).__anon1.__anon1.dataTypeString) : (((void *)0));
+type->__anon1.__anon2.thisClass = methodDataType->__anon1.__anon2.thisClass = (arg && (*arg).__anon1.__anon1.dataTypeString) ? FindClass((*arg).__anon1.__anon1.dataTypeString) : (((void *)0));
 }
 }
 else if(method->dataType->__anon1.__anon2.staticMethod)
index fa05df4..5a8ef3a 100644 (file)
@@ -984,10 +984,10 @@ extern struct __ecereNameSpace__ecere__com__Property * __ecereNameSpace__ecere__
 
 extern struct __ecereNameSpace__ecere__com__Instance * privateModule;
 
-extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_FindMethod(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, struct __ecereNameSpace__ecere__com__Instance * module);
-
 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_FindClass(struct __ecereNameSpace__ecere__com__Instance * module, const char *  name);
 
+extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_FindMethod(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, struct __ecereNameSpace__ecere__com__Instance * module);
+
 extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_RegisterFunction(const char *  name, const char *  type, void *  func, struct __ecereNameSpace__ecere__com__Instance * module, int declMode);
 
 struct TemplateParameter;
@@ -1996,8 +1996,9 @@ memberExp = (*memberExp->__anon1.list).last;
 if(memberExp && memberExp->type == 6 && memberExp->__anon1.index.exp && memberExp->__anon1.index.exp->expType && memberExp->__anon1.index.exp->expType->kind == 8 && memberExp->__anon1.index.exp->expType->__anon1._class && memberExp->__anon1.index.exp->expType->__anon1._class->__anon1.registered && memberExp->__anon1.index.exp->expType->__anon1._class->__anon1.registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(memberExp->__anon1.index.exp->expType->__anon1._class->__anon1.registered, containerClass))
 {
 struct __ecereNameSpace__ecere__com__Class * c = memberExp->__anon1.index.exp->expType->__anon1._class->__anon1.registered;
+struct __ecereNameSpace__ecere__com__Class * arrayClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Array");
 
-if(strcmp((c->templateClass ? c->templateClass : c)->name, "Array"))
+if(!__ecereNameSpace__ecere__com__eClass_IsDerived(c->templateClass ? c->templateClass : c, arrayClass))
 {
 if(exp->__anon1.op.exp2 && exp->__anon1.op.op == '=')
 {