compiler/libec: Fixed deletion of class:struct where value being deleted is modified...
authorJerome St-Louis <jerome@ecere.com>
Wed, 6 Aug 2014 20:40:16 +0000 (16:40 -0400)
committerJerome St-Louis <jerome@ecere.com>
Wed, 6 Aug 2014 21:34:00 +0000 (17:34 -0400)
21 files changed:
compiler/bootstrap/ecc/bootstrap/ecc.c
compiler/bootstrap/ecere/bootstrap/AVLTree.c
compiler/bootstrap/ecere/bootstrap/BTNode.c
compiler/bootstrap/ecere/bootstrap/CustomAVLTree.c
compiler/bootstrap/ecere/bootstrap/List.c
compiler/bootstrap/ecere/bootstrap/Map.c
compiler/bootstrap/ecere/bootstrap/instance.c
compiler/bootstrap/ecp/bootstrap/ecp.c
compiler/bootstrap/ecs/bootstrap/ecs.c
compiler/bootstrap/libec/bootstrap/ast.c
compiler/bootstrap/libec/bootstrap/expression.c
compiler/bootstrap/libec/bootstrap/freeAst.c
compiler/bootstrap/libec/bootstrap/grammar.c
compiler/bootstrap/libec/bootstrap/loadSymbols.c
compiler/bootstrap/libec/bootstrap/output.c
compiler/bootstrap/libec/bootstrap/pass15.c
compiler/bootstrap/libec/bootstrap/pass16.c
compiler/bootstrap/libec/bootstrap/pass2.c
compiler/bootstrap/libec/bootstrap/pass3.c
compiler/bootstrap/libec/bootstrap/type.c
compiler/libec/src/pass2.ec

index 6cba15a..32c32a9 100644 (file)
@@ -791,7 +791,11 @@ globalContext = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context
 
 void __ecereDestroyModuleInstances_ecc()
 {
-((globalContext ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)globalContext) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(globalContext)) : 0), globalContext = 0);
+((globalContext ? __extension__ ({
+void * __ecerePtrToDelete = (globalContext);
+
+__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), globalContext = 0);
 }
 
 struct Symbol;
index 50239aa..e99593e 100644 (file)
@@ -449,14 +449,22 @@ struct __ecereNameSpace__ecere__com__AVLNode * __ecereInstance1 = __ecereNameSpa
 __ecereInstance1->key = value, __ecereInstance1;
 });
 if(!((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, uint64 value))__ecereClass___ecereNameSpace__ecere__com__CustomAVLTree->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Add])(this, (uint64)(uintptr_t)node))
-((node ? (__ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor((void *)node) : 0, __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor ? __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor((void *)node) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(node)) : 0), node = 0);
+((node ? __extension__ ({
+void * __ecerePtrToDelete = (node);
+
+__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);
 return node;
 }
 
 void __ecereMethod___ecereNameSpace__ecere__com__AVLTree_Remove(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__AVLNode * node)
 {
 ((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__ecereClass___ecereNameSpace__ecere__com__CustomAVLTree->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove])(this, (void *)(node));
-((node ? (__ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor((void *)node) : 0, __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor ? __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor((void *)node) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(node)) : 0), node = 0);
+((node ? __extension__ ({
+void * __ecerePtrToDelete = (node);
+
+__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 __ecereRegisterModule_AVLTree(struct __ecereNameSpace__ecere__com__Instance * module)
index c4eefa7..fc96375 100644 (file)
@@ -1228,6 +1228,10 @@ if(this->right)
 __ecereMethod___ecereNameSpace__ecere__sys__BTNode_Free(this->right, FreeKey);
 if(FreeKey)
 FreeKey((void *)this->key);
-((this ? (__ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor((void *)this) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(this)) : 0), this = 0);
+((this ? __extension__ ({
+void * __ecerePtrToDelete = (this);
+
+__ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), this = 0);
 }
 
index 409d948..423711f 100644 (file)
@@ -1049,6 +1049,10 @@ if(this->left)
 __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Free(this->left);
 if(this->right)
 __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Free(this->right);
-((this ? (__ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor((void *)this) : 0, __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor ? __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor((void *)this) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(this)) : 0), this = 0);
+((this ? __extension__ ({
+void * __ecerePtrToDelete = (this);
+
+__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), this = 0);
 }
 
index ac6f504..1c19efc 100644 (file)
@@ -501,7 +501,11 @@ __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpa
 void __ecereMethod___ecereNameSpace__ecere__com__List_Remove(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Link * link)
 {
 ((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__ecereClass___ecereNameSpace__ecere__com__LinkList->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove])(this, (void *)(link));
-((link ? (__ecereClass___ecereNameSpace__ecere__com__Link->Destructor ? __ecereClass___ecereNameSpace__ecere__com__Link->Destructor((void *)link) : 0, __ecereClass___ecereNameSpace__ecere__com__ListItem->Destructor ? __ecereClass___ecereNameSpace__ecere__com__ListItem->Destructor((void *)link) : 0, __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor ? __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor((void *)link) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(link)) : 0), link = 0);
+((link ? __extension__ ({
+void * __ecerePtrToDelete = (link);
+
+__ecereClass___ecereNameSpace__ecere__com__Link->Destructor ? __ecereClass___ecereNameSpace__ecere__com__Link->Destructor((void *)__ecerePtrToDelete) : 0, __ecereClass___ecereNameSpace__ecere__com__ListItem->Destructor ? __ecereClass___ecereNameSpace__ecere__com__ListItem->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), link = 0);
 }
 
 struct __ecereNameSpace__ecere__com__Link * __ecereMethod___ecereNameSpace__ecere__com__List_Find(struct __ecereNameSpace__ecere__com__Instance * this, const uint64 value)
index 707764d..85d5638 100644 (file)
@@ -767,7 +767,11 @@ return newNode;
 }
 else
 {
-((newNode ? (__ecereClass___ecereNameSpace__ecere__com__MapNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__MapNode->Destructor((void *)newNode) : 0, __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor((void *)newNode) : 0, __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor ? __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor((void *)newNode) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newNode)) : 0), newNode = 0);
+((newNode ? __extension__ ({
+void * __ecerePtrToDelete = (newNode);
+
+__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), newNode = 0);
 return (((void *)0));
 }
 }
@@ -784,7 +788,11 @@ struct __ecereNameSpace__ecere__com__Class * Tclass = ((struct __ecereNameSpace_
 }
 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 ? (__ecereClass___ecereNameSpace__ecere__com__MapNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__MapNode->Destructor((void *)node) : 0, __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor((void *)node) : 0, __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor ? __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor((void *)node) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(node)) : 0), 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_Copy(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__Instance * source)
index 92aa279..2572f65 100644 (file)
@@ -2829,7 +2829,11 @@ short __simpleStruct0, __simpleStruct1;
 if(dataMember->name && __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&addTo->membersAlpha, dataMember->name))
 {
 __ecereNameSpace__ecere__com__DataMember_Free(dataMember);
-((dataMember ? (__ecereClass___ecereNameSpace__ecere__com__DataMember->Destructor ? __ecereClass___ecereNameSpace__ecere__com__DataMember->Destructor((void *)dataMember) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(dataMember)) : 0), dataMember = 0);
+((dataMember ? __extension__ ({
+void * __ecerePtrToDelete = (dataMember);
+
+__ecereClass___ecereNameSpace__ecere__com__DataMember->Destructor ? __ecereClass___ecereNameSpace__ecere__com__DataMember->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), dataMember = 0);
 return 0;
 }
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&addTo->members, dataMember);
@@ -2873,7 +2877,11 @@ short __simpleStruct0, __simpleStruct1;
 if(!_class || _class->comRedefinition || (dataMember->name && __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&_class->members, dataMember->name)))
 {
 __ecereNameSpace__ecere__com__DataMember_Free(dataMember);
-((dataMember ? (__ecereClass___ecereNameSpace__ecere__com__DataMember->Destructor ? __ecereClass___ecereNameSpace__ecere__com__DataMember->Destructor((void *)dataMember) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(dataMember)) : 0), dataMember = 0);
+((dataMember ? __extension__ ({
+void * __ecerePtrToDelete = (dataMember);
+
+__ecereClass___ecereNameSpace__ecere__com__DataMember->Destructor ? __ecereClass___ecereNameSpace__ecere__com__DataMember->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), dataMember = 0);
 return 0;
 }
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&_class->membersAndProperties, dataMember);
index eb15ab2..b49ea26 100644 (file)
@@ -982,7 +982,11 @@ globalContext = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context
 
 void __ecereDestroyModuleInstances_ecp()
 {
-((globalContext ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)globalContext) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(globalContext)) : 0), globalContext = 0);
+((globalContext ? __extension__ ({
+void * __ecerePtrToDelete = (globalContext);
+
+__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), globalContext = 0);
 }
 
 struct Identifier;
index a6f74dd..c9a38dd 100644 (file)
@@ -1178,7 +1178,11 @@ theGlobalContext = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Cont
 
 void __ecereDestroyModuleInstances_ecs()
 {
-((theGlobalContext ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)theGlobalContext) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(theGlobalContext)) : 0), theGlobalContext = 0);
+((theGlobalContext ? __extension__ ({
+void * __ecerePtrToDelete = (theGlobalContext);
+
+__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), theGlobalContext = 0);
 }
 
 static void BindDCOMClient()
index fcdd613..71e8294 100644 (file)
@@ -2662,7 +2662,11 @@ struct TemplateParameter * param = (param = __ecereNameSpace__ecere__com__eInsta
 struct TemplatedType * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), type->key = (uintptr_t)identifier->string, type->param = param, type);
 
 if(!__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type))
-((type ? (__ecereClass_TemplatedType->Destructor ? __ecereClass_TemplatedType->Destructor((void *)type) : 0, __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
+((type ? __extension__ ({
+void * __ecerePtrToDelete = (type);
+
+__ecereClass_TemplatedType->Destructor ? __ecereClass_TemplatedType->Destructor((void *)__ecerePtrToDelete) : 0, __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), type = 0);
 return param;
 }
 return (((void *)0));
@@ -3269,7 +3273,11 @@ for(copy = (struct TemplatedType *)__ecereProp___ecereNameSpace__ecere__sys__Bin
 struct TemplatedType * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), type->key = copy->key, type->param = copy->param, type);
 
 if(!__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type))
-((type ? (__ecereClass_TemplatedType->Destructor ? __ecereClass_TemplatedType->Destructor((void *)type) : 0, __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
+((type ? __extension__ ({
+void * __ecerePtrToDelete = (type);
+
+__ecereClass_TemplatedType->Destructor ? __ecereClass_TemplatedType->Destructor((void *)__ecerePtrToDelete) : 0, __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), type = 0);
 }
 }
 else if(baseClass && baseClass->__anon1.registered)
@@ -3301,7 +3309,11 @@ struct TemplatedType * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstanc
 __ecereInstance1->key = (uintptr_t)p->name, __ecereInstance1->param = param, __ecereInstance1;
 });
 if(!__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type))
-((type ? (__ecereClass_TemplatedType->Destructor ? __ecereClass_TemplatedType->Destructor((void *)type) : 0, __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
+((type ? __extension__ ({
+void * __ecerePtrToDelete = (type);
+
+__ecereClass_TemplatedType->Destructor ? __ecereClass_TemplatedType->Destructor((void *)__ecerePtrToDelete) : 0, __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), type = 0);
 }
 }
 }
@@ -4266,7 +4278,11 @@ break;
 }
 }
 FreeContext(symbol->ctx);
-((symbol->ctx ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)symbol->ctx) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(symbol->ctx)) : 0), symbol->ctx = 0);
+((symbol->ctx ? __extension__ ({
+void * __ecerePtrToDelete = (symbol->ctx);
+
+__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), symbol->ctx = 0);
 }
 symbol->ctx = curContext;
 classDef = __extension__ ({
index c2429e0..8a564ea 100644 (file)
@@ -4866,7 +4866,11 @@ case 229:
 {
 PopContext((*yyvaluep).context);
 FreeContext((*yyvaluep).context);
-(((*yyvaluep).context ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)(*yyvaluep).context) : 0, __ecereNameSpace__ecere__com__eSystem_Delete((*yyvaluep).context)) : 0), (*yyvaluep).context = 0);
+(((*yyvaluep).context ? __extension__ ({
+void * __ecerePtrToDelete = ((*yyvaluep).context);
+
+__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), (*yyvaluep).context = 0);
 }
 ;
 break;
index 340696d..a1c375e 100644 (file)
@@ -1059,7 +1059,11 @@ struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
 
 void FreeTemplateType(struct TemplatedType * type)
 {
-((type ? (__ecereClass_TemplatedType->Destructor ? __ecereClass_TemplatedType->Destructor((void *)type) : 0, __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
+((type ? __extension__ ({
+void * __ecerePtrToDelete = (type);
+
+__ecereClass_TemplatedType->Destructor ? __ecereClass_TemplatedType->Destructor((void *)__ecerePtrToDelete) : 0, __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), type = 0);
 }
 
 void FreeAttribute(struct Attribute * attr)
@@ -1067,7 +1071,11 @@ void FreeAttribute(struct Attribute * attr)
 (__ecereNameSpace__ecere__com__eSystem_Delete(attr->attr), attr->attr = 0);
 if(attr->exp)
 FreeExpression(attr->exp);
-((attr ? (__ecereClass_Attribute->Destructor ? __ecereClass_Attribute->Destructor((void *)attr) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(attr)) : 0), attr = 0);
+((attr ? __extension__ ({
+void * __ecerePtrToDelete = (attr);
+
+__ecereClass_Attribute->Destructor ? __ecereClass_Attribute->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), attr = 0);
 }
 
 void __ecereUnregisterModule_freeAst(struct __ecereNameSpace__ecere__com__Instance * module)
@@ -1079,7 +1087,11 @@ void FreeAttrib(struct Attrib * attr)
 {
 if(attr->attribs)
 FreeList(attr->attribs, (void *)(FreeAttribute));
-((attr ? (__ecereClass_Attrib->Destructor ? __ecereClass_Attrib->Destructor((void *)attr) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(attr)) : 0), attr = 0);
+((attr ? __extension__ ({
+void * __ecerePtrToDelete = (attr);
+
+__ecereClass_Attrib->Destructor ? __ecereClass_Attrib->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), attr = 0);
 }
 
 void FreeExtDecl(struct ExtDecl * extDecl)
@@ -1088,7 +1100,11 @@ if(extDecl->type == 1 && extDecl->__anon1.attr)
 FreeAttrib(extDecl->__anon1.attr);
 else if(extDecl->type == 0)
 (__ecereNameSpace__ecere__com__eSystem_Delete(extDecl->__anon1.s), extDecl->__anon1.s = 0);
-((extDecl ? (__ecereClass_ExtDecl->Destructor ? __ecereClass_ExtDecl->Destructor((void *)extDecl) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(extDecl)) : 0), extDecl = 0);
+((extDecl ? __extension__ ({
+void * __ecerePtrToDelete = (extDecl);
+
+__ecereClass_ExtDecl->Destructor ? __ecereClass_ExtDecl->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), extDecl = 0);
 }
 
 struct ClassDefinition;
@@ -1282,7 +1298,11 @@ for(member = type->__anon1.__anon1.members.first; member; member = next)
 next = member->next;
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&type->__anon1.__anon1.members, member);
 (__ecereNameSpace__ecere__com__eSystem_Delete(member->name), member->name = 0);
-((member ? (__ecereClass___ecereNameSpace__ecere__sys__NamedLink64->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__NamedLink64->Destructor((void *)member) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(member)) : 0), member = 0);
+((member ? __extension__ ({
+void * __ecerePtrToDelete = (member);
+
+__ecereClass___ecereNameSpace__ecere__sys__NamedLink64->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__NamedLink64->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), member = 0);
 }
 break;
 }
@@ -1324,7 +1344,11 @@ break;
 }
 (__ecereNameSpace__ecere__com__eSystem_Delete(type->name), type->name = 0);
 (__ecereNameSpace__ecere__com__eSystem_Delete(type->typeName), type->typeName = 0);
-((type ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
+((type ? __extension__ ({
+void * __ecerePtrToDelete = (type);
+
+__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), type = 0);
 }
 }
 }
@@ -1736,7 +1760,11 @@ if(enumerator->id)
 FreeIdentifier(enumerator->id);
 if(enumerator->exp)
 FreeExpression(enumerator->exp);
-((enumerator ? (__ecereClass_Enumerator->Destructor ? __ecereClass_Enumerator->Destructor((void *)enumerator) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(enumerator)) : 0), enumerator = 0);
+((enumerator ? __extension__ ({
+void * __ecerePtrToDelete = (enumerator);
+
+__ecereClass_Enumerator->Destructor ? __ecereClass_Enumerator->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), enumerator = 0);
 }
 
 void FreeAsmField(struct AsmField * field)
@@ -1746,7 +1774,11 @@ FreeExpression(field->expression);
 if(field->symbolic)
 FreeIdentifier(field->symbolic);
 (__ecereNameSpace__ecere__com__eSystem_Delete(field->command), field->command = 0);
-((field ? (__ecereClass_AsmField->Destructor ? __ecereClass_AsmField->Destructor((void *)field) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(field)) : 0), field = 0);
+((field ? __extension__ ({
+void * __ecerePtrToDelete = (field);
+
+__ecereClass_AsmField->Destructor ? __ecereClass_AsmField->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), field = 0);
 }
 
 void FreeInitializer(struct Initializer * initializer)
@@ -1763,14 +1795,22 @@ break;
 }
 if(initializer->id)
 FreeIdentifier(initializer->id);
-((initializer ? (__ecereClass_Initializer->Destructor ? __ecereClass_Initializer->Destructor((void *)initializer) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(initializer)) : 0), initializer = 0);
+((initializer ? __extension__ ({
+void * __ecerePtrToDelete = (initializer);
+
+__ecereClass_Initializer->Destructor ? __ecereClass_Initializer->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), initializer = 0);
 }
 
 void FreeDBIndexItem(struct DBIndexItem * item)
 {
 if(item->id)
 FreeIdentifier(item->id);
-((item ? (__ecereClass_DBIndexItem->Destructor ? __ecereClass_DBIndexItem->Destructor((void *)item) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(item)) : 0), item = 0);
+((item ? __extension__ ({
+void * __ecerePtrToDelete = (item);
+
+__ecereClass_DBIndexItem->Destructor ? __ecereClass_DBIndexItem->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), item = 0);
 }
 
 void FreeInitDeclarator(struct InitDeclarator * decl)
@@ -1779,7 +1819,11 @@ if(decl->declarator)
 FreeDeclarator(decl->declarator);
 if(decl->initializer)
 FreeInitializer(decl->initializer);
-((decl ? (__ecereClass_InitDeclarator->Destructor ? __ecereClass_InitDeclarator->Destructor((void *)decl) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(decl)) : 0), decl = 0);
+((decl ? __extension__ ({
+void * __ecerePtrToDelete = (decl);
+
+__ecereClass_InitDeclarator->Destructor ? __ecereClass_InitDeclarator->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), decl = 0);
 }
 
 void FreeMemberInit(struct MemberInit * init)
@@ -1788,7 +1832,11 @@ if(init->initializer)
 FreeInitializer(init->initializer);
 if(init->identifiers)
 FreeList(init->identifiers, (void *)(FreeIdentifier));
-((init ? (__ecereClass_MemberInit->Destructor ? __ecereClass_MemberInit->Destructor((void *)init) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(init)) : 0), init = 0);
+((init ? __extension__ ({
+void * __ecerePtrToDelete = (init);
+
+__ecereClass_MemberInit->Destructor ? __ecereClass_MemberInit->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), init = 0);
 }
 
 void FreeSpecifierContents(struct Specifier *  spec);
@@ -1798,7 +1846,11 @@ void FreeSpecifier(struct Specifier * spec)
 if(spec)
 {
 FreeSpecifierContents(spec);
-((spec ? (__ecereClass_Specifier->Destructor ? __ecereClass_Specifier->Destructor((void *)spec) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(spec)) : 0), spec = 0);
+((spec ? __extension__ ({
+void * __ecerePtrToDelete = (spec);
+
+__ecereClass_Specifier->Destructor ? __ecereClass_Specifier->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), spec = 0);
 }
 }
 
@@ -1808,7 +1860,11 @@ if(type->decl)
 FreeDeclarator(type->decl);
 if(type->specifiers)
 FreeList(type->specifiers, (void *)(FreeSpecifier));
-((type ? (__ecereClass_TemplateDatatype->Destructor ? __ecereClass_TemplateDatatype->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
+((type ? __extension__ ({
+void * __ecerePtrToDelete = (type);
+
+__ecereClass_TemplateDatatype->Destructor ? __ecereClass_TemplateDatatype->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), type = 0);
 }
 
 void FreeIdentifier(struct Identifier * id)
@@ -1818,7 +1874,11 @@ FreeIdentifier(id->badID);
 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
 if(id->_class)
 FreeSpecifier(id->_class);
-((id ? (__ecereClass_Identifier->Destructor ? __ecereClass_Identifier->Destructor((void *)id) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(id)) : 0), id = 0);
+((id ? __extension__ ({
+void * __ecerePtrToDelete = (id);
+
+__ecereClass_Identifier->Destructor ? __ecereClass_Identifier->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), id = 0);
 }
 
 void FreeTypeName(struct TypeName * typeName)
@@ -1829,7 +1889,11 @@ if(typeName->declarator)
 FreeDeclarator(typeName->declarator);
 if(typeName->bitCount)
 FreeExpression(typeName->bitCount);
-((typeName ? (__ecereClass_TypeName->Destructor ? __ecereClass_TypeName->Destructor((void *)typeName) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(typeName)) : 0), typeName = 0);
+((typeName ? __extension__ ({
+void * __ecerePtrToDelete = (typeName);
+
+__ecereClass_TypeName->Destructor ? __ecereClass_TypeName->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), typeName = 0);
 }
 
 void FreePointer(struct Pointer * pointer)
@@ -1838,7 +1902,11 @@ if(pointer->pointer)
 FreePointer(pointer->pointer);
 if(pointer->qualifiers)
 FreeList(pointer->qualifiers, (void *)(FreeSpecifier));
-((pointer ? (__ecereClass_Pointer->Destructor ? __ecereClass_Pointer->Destructor((void *)pointer) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(pointer)) : 0), pointer = 0);
+((pointer ? __extension__ ({
+void * __ecerePtrToDelete = (pointer);
+
+__ecereClass_Pointer->Destructor ? __ecereClass_Pointer->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), pointer = 0);
 }
 
 void FreeTemplateArgument(struct TemplateArgument * arg)
@@ -1860,7 +1928,11 @@ break;
 }
 if(arg->name)
 FreeIdentifier(arg->name);
-((arg ? (__ecereClass_TemplateArgument->Destructor ? __ecereClass_TemplateArgument->Destructor((void *)arg) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(arg)) : 0), arg = 0);
+((arg ? __extension__ ({
+void * __ecerePtrToDelete = (arg);
+
+__ecereClass_TemplateArgument->Destructor ? __ecereClass_TemplateArgument->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), arg = 0);
 }
 
 void FreeDBTableEntry(struct DBTableEntry * entry)
@@ -1880,7 +1952,11 @@ if(entry->__anon1.items)
 FreeList(entry->__anon1.items, (void *)(FreeDBIndexItem));
 break;
 }
-((entry ? (__ecereClass_DBTableEntry->Destructor ? __ecereClass_DBTableEntry->Destructor((void *)entry) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(entry)) : 0), entry = 0);
+((entry ? __extension__ ({
+void * __ecerePtrToDelete = (entry);
+
+__ecereClass_DBTableEntry->Destructor ? __ecereClass_DBTableEntry->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), entry = 0);
 }
 
 void FreeDeclarator(struct Declarator * decl)
@@ -1921,7 +1997,11 @@ if(decl->__anon1.extended.extended)
 FreeExtDecl(decl->__anon1.extended.extended);
 break;
 }
-((decl ? (__ecereClass_Declarator->Destructor ? __ecereClass_Declarator->Destructor((void *)decl) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(decl)) : 0), decl = 0);
+((decl ? __extension__ ({
+void * __ecerePtrToDelete = (decl);
+
+__ecereClass_Declarator->Destructor ? __ecereClass_Declarator->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), decl = 0);
 }
 
 void FreeTemplateParameter(struct TemplateParameter * param)
@@ -1939,7 +2019,11 @@ if(param->defaultArgument)
 FreeTemplateArgument(param->defaultArgument);
 if(param->baseType)
 FreeType(param->baseType);
-((param ? (__ecereClass_TemplateParameter->Destructor ? __ecereClass_TemplateParameter->Destructor((void *)param) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(param)) : 0), param = 0);
+((param ? __extension__ ({
+void * __ecerePtrToDelete = (param);
+
+__ecereClass_TemplateParameter->Destructor ? __ecereClass_TemplateParameter->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), param = 0);
 }
 
 void FreeDBTable(struct DBTableDef * table)
@@ -1948,7 +2032,11 @@ if(table->definitions)
 FreeList(table->definitions, (void *)(FreeDBTableEntry));
 if(table->name)
 (__ecereNameSpace__ecere__com__eSystem_Delete(table->name), table->name = 0);
-((table ? (__ecereClass_DBTableDef->Destructor ? __ecereClass_DBTableDef->Destructor((void *)table) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(table)) : 0), table = 0);
+((table ? __extension__ ({
+void * __ecerePtrToDelete = (table);
+
+__ecereClass_DBTableDef->Destructor ? __ecereClass_DBTableDef->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), table = 0);
 }
 
 void FreeSymbol(struct Symbol * symbol)
@@ -1971,9 +2059,17 @@ FreeList(symbol->templateParams, (void *)(FreeTemplateParameter));
 if(symbol->ctx)
 {
 FreeContext(symbol->ctx);
-((symbol->ctx ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)symbol->ctx) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(symbol->ctx)) : 0), symbol->ctx = 0);
+((symbol->ctx ? __extension__ ({
+void * __ecerePtrToDelete = (symbol->ctx);
+
+__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), symbol->ctx = 0);
 }
-((symbol ? (__ecereClass_Symbol->Destructor ? __ecereClass_Symbol->Destructor((void *)symbol) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(symbol)) : 0), symbol = 0);
+((symbol ? __extension__ ({
+void * __ecerePtrToDelete = (symbol);
+
+__ecereClass_Symbol->Destructor ? __ecereClass_Symbol->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), symbol = 0);
 }
 
 void FreeModuleData(struct __ecereNameSpace__ecere__com__Instance * module)
@@ -2167,7 +2263,11 @@ if(watcher->properties)
 FreeList(watcher->properties, (void *)(FreeIdentifier));
 if(watcher->compound)
 FreeStatement(watcher->compound);
-((watcher ? (__ecereClass_PropertyWatch->Destructor ? __ecereClass_PropertyWatch->Destructor((void *)watcher) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(watcher)) : 0), watcher = 0);
+((watcher ? __extension__ ({
+void * __ecerePtrToDelete = (watcher);
+
+__ecereClass_PropertyWatch->Destructor ? __ecereClass_PropertyWatch->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), watcher = 0);
 }
 
 void FreeProperty(struct PropertyDef * def)
@@ -2189,7 +2289,11 @@ FreeExpression(def->category);
 if(def->symbol)
 {
 }
-((def ? (__ecereClass_PropertyDef->Destructor ? __ecereClass_PropertyDef->Destructor((void *)def) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(def)) : 0), def = 0);
+((def ? __extension__ ({
+void * __ecerePtrToDelete = (def);
+
+__ecereClass_PropertyDef->Destructor ? __ecereClass_PropertyDef->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), def = 0);
 }
 
 void FreeClassFunction(struct ClassFunction *  func);
@@ -2202,7 +2306,11 @@ if(init->type == 1 && init->__anon1.function)
 {
 FreeClassFunction(init->__anon1.function);
 }
-((init ? (__ecereClass_MembersInit->Destructor ? __ecereClass_MembersInit->Destructor((void *)init) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(init)) : 0), init = 0);
+((init ? __extension__ ({
+void * __ecerePtrToDelete = (init);
+
+__ecereClass_MembersInit->Destructor ? __ecereClass_MembersInit->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), init = 0);
 }
 
 void FreeInstance(struct Instantiation * inst)
@@ -2246,7 +2354,11 @@ struct __ecereNameSpace__ecere__com__Instance * instance = (struct __ecereNameSp
 }
 if(inst->_class)
 FreeSpecifier(inst->_class);
-((inst ? (__ecereClass_Instantiation->Destructor ? __ecereClass_Instantiation->Destructor((void *)inst) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(inst)) : 0), inst = 0);
+((inst ? __extension__ ({
+void * __ecerePtrToDelete = (inst);
+
+__ecereClass_Instantiation->Destructor ? __ecereClass_Instantiation->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), inst = 0);
 }
 
 static void _FreeExpression(struct Expression * exp, unsigned int freePointer)
@@ -2432,7 +2544,11 @@ if(exp->expType)
 FreeType(exp->expType);
 if(exp->destType)
 FreeType(exp->destType);
-((exp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)exp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(exp)) : 0), exp = 0);
+((exp ? __extension__ ({
+void * __ecerePtrToDelete = (exp);
+
+__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), exp = 0);
 }
 }
 
@@ -2474,7 +2590,11 @@ FreeIdentifier(decl->__anon1.__anon2.id);
 break;
 }
 }
-((decl ? (__ecereClass_Declaration->Destructor ? __ecereClass_Declaration->Destructor((void *)decl) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(decl)) : 0), decl = 0);
+((decl ? __extension__ ({
+void * __ecerePtrToDelete = (decl);
+
+__ecereClass_Declaration->Destructor ? __ecereClass_Declaration->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), decl = 0);
 }
 
 void FreeStatement(struct Statement * stmt)
@@ -2517,7 +2637,11 @@ FreeList(stmt->__anon1.compound.statements, (void *)(FreeStatement));
 if(stmt->__anon1.compound.context)
 {
 FreeContext(stmt->__anon1.compound.context);
-((stmt->__anon1.compound.context ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)stmt->__anon1.compound.context) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(stmt->__anon1.compound.context)) : 0), stmt->__anon1.compound.context = 0);
+((stmt->__anon1.compound.context ? __extension__ ({
+void * __ecerePtrToDelete = (stmt->__anon1.compound.context);
+
+__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), stmt->__anon1.compound.context = 0);
 }
 break;
 }
@@ -2608,7 +2732,11 @@ FreeList(stmt->__anon1._watch.watches, (stmt->type == 17) ? (void *)FreeProperty
 break;
 }
 }
-((stmt ? (__ecereClass_Statement->Destructor ? __ecereClass_Statement->Destructor((void *)stmt) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(stmt)) : 0), stmt = 0);
+((stmt ? __extension__ ({
+void * __ecerePtrToDelete = (stmt);
+
+__ecereClass_Statement->Destructor ? __ecereClass_Statement->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), stmt = 0);
 }
 
 void FreeFunction(struct FunctionDefinition * func)
@@ -2623,7 +2751,11 @@ if(func->declarations)
 FreeList(func->declarations, (void *)(FreeDeclaration));
 if(func->type)
 FreeType(func->type);
-((func ? (__ecereClass_FunctionDefinition->Destructor ? __ecereClass_FunctionDefinition->Destructor((void *)func) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(func)) : 0), func = 0);
+((func ? __extension__ ({
+void * __ecerePtrToDelete = (func);
+
+__ecereClass_FunctionDefinition->Destructor ? __ecereClass_FunctionDefinition->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), func = 0);
 }
 
 void FreeClassFunction(struct ClassFunction * func)
@@ -2642,7 +2774,11 @@ FreeList(func->specifiers, (void *)(FreeSpecifier));
 if(func->declarations)
 FreeList(func->declarations, (void *)(FreeDeclaration));
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&func->attached, (((void *)0)));
-((func ? (__ecereClass_ClassFunction->Destructor ? __ecereClass_ClassFunction->Destructor((void *)func) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(func)) : 0), func = 0);
+((func ? __extension__ ({
+void * __ecerePtrToDelete = (func);
+
+__ecereClass_ClassFunction->Destructor ? __ecereClass_ClassFunction->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), func = 0);
 }
 
 void FreeClassDef(struct ClassDef * def)
@@ -2708,7 +2844,11 @@ FreePropertyWatch(def->__anon1.propertyWatch);
 break;
 }
 }
-((def ? (__ecereClass_ClassDef->Destructor ? __ecereClass_ClassDef->Destructor((void *)def) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(def)) : 0), def = 0);
+((def ? __extension__ ({
+void * __ecerePtrToDelete = (def);
+
+__ecereClass_ClassDef->Destructor ? __ecereClass_ClassDef->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), def = 0);
 }
 
 void FreeSpecifierContents(struct Specifier * spec)
@@ -2782,7 +2922,11 @@ spec->__anon1.__anon2.extDeclStruct = (((void *)0));
 if(spec->__anon1.__anon2.ctx)
 {
 FreeContext(spec->__anon1.__anon2.ctx);
-((spec->__anon1.__anon2.ctx ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)spec->__anon1.__anon2.ctx) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(spec->__anon1.__anon2.ctx)) : 0), spec->__anon1.__anon2.ctx = 0);
+((spec->__anon1.__anon2.ctx ? __extension__ ({
+void * __ecerePtrToDelete = (spec->__anon1.__anon2.ctx);
+
+__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), spec->__anon1.__anon2.ctx = 0);
 }
 break;
 case 7:
@@ -2803,7 +2947,11 @@ if(_class->_class)
 FreeSpecifier(_class->_class);
 if(_class->baseSpecs)
 FreeList(_class->baseSpecs, (void *)(FreeSpecifier));
-((_class ? (__ecereClass_ClassDefinition->Destructor ? __ecereClass_ClassDefinition->Destructor((void *)_class) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(_class)) : 0), _class = 0);
+((_class ? __extension__ ({
+void * __ecerePtrToDelete = (_class);
+
+__ecereClass_ClassDefinition->Destructor ? __ecereClass_ClassDefinition->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), _class = 0);
 }
 
 void FreeExternal(struct External * external)
@@ -2822,7 +2970,11 @@ struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = external-
 
 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__LinkList->_vTbl;
 })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove])(external->incoming, (struct __ecereNameSpace__ecere__com__IteratorPointer *)e);
-((e ? (__ecereClass_TopoEdge->Destructor ? __ecereClass_TopoEdge->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
+((e ? __extension__ ({
+void * __ecerePtrToDelete = (e);
+
+__ecereClass_TopoEdge->Destructor ? __ecereClass_TopoEdge->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), e = 0);
 }
 while((e = ((struct __ecereNameSpace__ecere__com__LinkList *)(((char *)external->outgoing + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->first))
 {
@@ -2838,7 +2990,11 @@ __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpa
 })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove])(external->outgoing, (struct __ecereNameSpace__ecere__com__IteratorPointer *)e);
 if(!e->breakable)
 e->to->nonBreakableIncoming--;
-((e ? (__ecereClass_TopoEdge->Destructor ? __ecereClass_TopoEdge->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
+((e ? __extension__ ({
+void * __ecerePtrToDelete = (e);
+
+__ecereClass_TopoEdge->Destructor ? __ecereClass_TopoEdge->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), e = 0);
 }
 switch(external->type)
 {
@@ -2865,7 +3021,11 @@ if(external->__anon1.table)
 FreeDBTable(external->__anon1.table);
 break;
 }
-((external ? (__ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)external) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(external)) : 0), external = 0);
+((external ? __extension__ ({
+void * __ecerePtrToDelete = (external);
+
+__ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), external = 0);
 }
 
 void __ecereRegisterModule_freeAst(struct __ecereNameSpace__ecere__com__Instance * module)
index 632c57b..7274800 100644 (file)
@@ -2027,7 +2027,11 @@ struct Context * ctx = curContext;
 
 PopContext(ctx);
 FreeContext(ctx);
-((ctx ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)ctx) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(ctx)) : 0), ctx = 0);
+((ctx ? __extension__ ({
+void * __ecerePtrToDelete = (ctx);
+
+__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), ctx = 0);
 }
 ;
 break;
@@ -2037,7 +2041,11 @@ struct Context * ctx = curContext;
 
 PopContext(ctx);
 FreeContext(ctx);
-((ctx ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)ctx) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(ctx)) : 0), ctx = 0);
+((ctx ? __extension__ ({
+void * __ecerePtrToDelete = (ctx);
+
+__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), ctx = 0);
 }
 ;
 break;
@@ -2854,7 +2862,11 @@ case 374:
 {
 PopContext((*yyvaluep).context);
 FreeContext((*yyvaluep).context);
-(((*yyvaluep).context ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)(*yyvaluep).context) : 0, __ecereNameSpace__ecere__com__eSystem_Delete((*yyvaluep).context)) : 0), (*yyvaluep).context = 0);
+(((*yyvaluep).context ? __extension__ ({
+void * __ecerePtrToDelete = ((*yyvaluep).context);
+
+__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), (*yyvaluep).context = 0);
 }
 ;
 break;
index 8dd0c09..7094cdb 100644 (file)
@@ -1271,7 +1271,11 @@ FreeSymbol(data->symbol);
 FreeType(data->dataType);
 (__ecereNameSpace__ecere__com__eSystem_Delete(data->fullName), data->fullName = 0);
 (__ecereNameSpace__ecere__com__eSystem_Delete(data->dataTypeString), data->dataTypeString = 0);
-((data ? (__ecereClass_GlobalData->Destructor ? __ecereClass_GlobalData->Destructor((void *)data) : 0, __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor((void *)data) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(data)) : 0), data = 0);
+((data ? __extension__ ({
+void * __ecerePtrToDelete = (data);
+
+__ecereClass_GlobalData->Destructor ? __ecereClass_GlobalData->Destructor((void *)__ecerePtrToDelete) : 0, __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), data = 0);
 }
 }
 
index cf08959..dc806f2 100644 (file)
@@ -1975,7 +1975,11 @@ unsigned int size;
 typeName->qualifiers = specs;
 typeName->declarator = decl;
 OutputTypeName(typeName, f, 1);
-((typeName ? (__ecereClass_TypeName->Destructor ? __ecereClass_TypeName->Destructor((void *)typeName) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(typeName)) : 0), typeName = 0);
+((typeName ? __extension__ ({
+void * __ecerePtrToDelete = (typeName);
+
+__ecereClass_TypeName->Destructor ? __ecereClass_TypeName->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), typeName = 0);
 size = ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *))__extension__ ({
 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = f;
 
index 63c3548..be8261f 100644 (file)
@@ -8304,7 +8304,11 @@ FreeExpContents(checkedExp);
 FreeType(checkedExp->expType);
 FreeType(checkedExp->destType);
 *checkedExp = *newExp;
-((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
+((newExp ? __extension__ ({
+void * __ecerePtrToDelete = (newExp);
+
+__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), newExp = 0);
 checkedExp->prev = prev;
 checkedExp->next = next;
 }
@@ -8313,7 +8317,11 @@ void FinishTemplatesContext(struct Context * context)
 {
 PopContext(context);
 FreeContext(context);
-((context ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)context) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(context)) : 0), context = 0);
+((context ? __extension__ ({
+void * __ecerePtrToDelete = (context);
+
+__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), context = 0);
 }
 
 static __attribute__((unused)) void UnusedFunction()
@@ -10097,7 +10105,11 @@ if(exp->destType)
 exp->destType->refCount--;
 if(exp->expType)
 exp->expType->refCount--;
-((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
+((newExp ? __extension__ ({
+void * __ecerePtrToDelete = (newExp);
+
+__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), newExp = 0);
 }
 else
 {
@@ -10161,7 +10173,11 @@ if(exp->destType)
 exp->destType->refCount--;
 if(exp->expType)
 exp->expType->refCount--;
-((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
+((newExp ? __extension__ ({
+void * __ecerePtrToDelete = (newExp);
+
+__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), newExp = 0);
 }
 else
 {
@@ -10219,7 +10235,11 @@ if(type)
 {
 FreeType(exp->destType);
 FreeType(exp->expType);
-((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
+((newExp ? __extension__ ({
+void * __ecerePtrToDelete = (newExp);
+
+__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), newExp = 0);
 break;
 }
 }
@@ -11757,7 +11777,11 @@ FreeExpContents(exp);
 FreeType(exp->expType);
 FreeType(exp->destType);
 *exp = *exp2;
-((exp2 ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)exp2) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(exp2)) : 0), exp2 = 0);
+((exp2 ? __extension__ ({
+void * __ecerePtrToDelete = (exp2);
+
+__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), exp2 = 0);
 break;
 }
 case '-':
@@ -12989,7 +13013,11 @@ struct Conversion * convert = converts.first;
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&converts, convert);
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, convert);
 }
-((type ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
+((type ? __extension__ ({
+void * __ecerePtrToDelete = (type);
+
+__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), type = 0);
 return 1;
 }
 }
@@ -12997,7 +13025,11 @@ return 1;
 }
 if(converts.first)
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
-((type ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
+((type ? __extension__ ({
+void * __ecerePtrToDelete = (type);
+
+__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), type = 0);
 }
 }
 for(nameSpace = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&nameSpace->nameSpaces); nameSpace != (((void *)0)); nameSpace = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)nameSpace)))
@@ -13166,7 +13198,11 @@ FreeType(exp->destType);
 *exp = *e;
 exp->prev = prev;
 exp->next = next;
-((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
+((e ? __extension__ ({
+void * __ecerePtrToDelete = (e);
+
+__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), e = 0);
 (__ecereNameSpace__ecere__com__eSystem_Delete(list), list = 0);
 }
 else
@@ -13941,7 +13977,11 @@ sourceExp->expType = dest;
 dest->refCount++;
 }
 flag = 1;
-((tempType ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)tempType) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(tempType)) : 0), tempType = 0);
+((tempType ? __extension__ ({
+void * __ecerePtrToDelete = (tempType);
+
+__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), tempType = 0);
 }
 }
 if(_class && _class->type == 2 && source->kind != 8)
@@ -14026,7 +14066,11 @@ dest->classObjectType = source->classObjectType;
 FreeType(source);
 source = _class->dataType;
 source->refCount++;
-((tempType ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)tempType) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(tempType)) : 0), tempType = 0);
+((tempType ? __extension__ ({
+void * __ecerePtrToDelete = (tempType);
+
+__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), tempType = 0);
 }
 }
 }
@@ -15715,7 +15759,11 @@ ProcessClass(_class->definitions, _class->symbol);
 if(inCompiler)
 {
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
-((external ? (__ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)external) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(external)) : 0), external = 0);
+((external ? __extension__ ({
+void * __ecerePtrToDelete = (external);
+
+__ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), external = 0);
 }
 }
 else if(external->type == 4)
@@ -17035,7 +17083,11 @@ FreeType(exp->destType);
 *exp = *e;
 exp->prev = prev;
 exp->next = next;
-((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
+((e ? __extension__ ({
+void * __ecerePtrToDelete = (e);
+
+__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), e = 0);
 ProcessExpressionType(exp);
 }
 break;
@@ -18463,7 +18515,11 @@ FreeType(exp->expType);
 FreeType(exp->destType);
 exp->expType = expType;
 exp->destType = destType;
-((castExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)castExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(castExp)) : 0), castExp = 0);
+((castExp ? __extension__ ({
+void * __ecerePtrToDelete = (castExp);
+
+__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), castExp = 0);
 exp->prev = prev;
 exp->next = next;
 }
index 38c98e4..7143465 100644 (file)
@@ -2480,7 +2480,11 @@ struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = e->from->
 
 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__LinkList->_vTbl;
 })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove])(e->from->outgoing, (struct __ecereNameSpace__ecere__com__IteratorPointer *)e);
-((e ? (__ecereClass_TopoEdge->Destructor ? __ecereClass_TopoEdge->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
+((e ? __extension__ ({
+void * __ecerePtrToDelete = (e);
+
+__ecereClass_TopoEdge->Destructor ? __ecereClass_TopoEdge->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), e = 0);
 }
 else
 {
@@ -2901,7 +2905,11 @@ FreeType(exp->destType);
 {
 struct Expression * firstExp = list.first;
 
-((firstExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)firstExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(firstExp)) : 0), firstExp = 0);
+((firstExp ? __extension__ ({
+void * __ecerePtrToDelete = (firstExp);
+
+__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), firstExp = 0);
 }
 FreeType(exp->destType);
 exp->destType = expType;
@@ -2950,7 +2958,11 @@ struct Expression * e = list.first;
 FreeType(exp->destType);
 *exp = *e;
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&list, e);
-((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
+((e ? __extension__ ({
+void * __ecerePtrToDelete = (e);
+
+__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), e = 0);
 exp->expType = expType;
 exp->prev = prev;
 exp->next = next;
@@ -3025,7 +3037,11 @@ void * prev = dummyDecl->prev, * next = dummyDecl->next;
 *dummyDecl = *decl;
 dummyDecl->prev = prev;
 dummyDecl->next = next;
-((decl ? (__ecereClass_Declaration->Destructor ? __ecereClass_Declaration->Destructor((void *)decl) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(decl)) : 0), decl = 0);
+((decl ? __extension__ ({
+void * __ecerePtrToDelete = (decl);
+
+__ecereClass_Declaration->Destructor ? __ecereClass_Declaration->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), decl = 0);
 decl = dummyDecl;
 }
 ProcessDeclaration(decl);
@@ -3159,7 +3175,11 @@ newCall->expType = exp->expType;
 *exp = *newCall;
 exp->prev = prev;
 exp->next = next;
-((newCall ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newCall) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newCall)) : 0), newCall = 0);
+((newCall ? __extension__ ({
+void * __ecerePtrToDelete = (newCall);
+
+__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), newCall = 0);
 }
 }
 }
index 2e1ffca..fefd9b1 100644 (file)
@@ -287,10 +287,10 @@ extern struct Expression * MkExpCall(struct Expression * expression, struct __ec
 
 extern void ProcessExpressionType(struct Expression * exp);
 
-extern struct Expression * MkExpCondition(struct Expression * cond, struct __ecereNameSpace__ecere__sys__OldList * expressions, struct Expression * elseExp);
-
 extern struct Expression * MkExpExtensionCompound(struct Statement * compound);
 
+extern struct Expression * MkExpCondition(struct Expression * cond, struct __ecereNameSpace__ecere__sys__OldList * expressions, struct Expression * elseExp);
+
 extern void ProcessExpressionInstPass(struct Expression * exp);
 
 extern struct Expression * MoveExpContents(struct Expression * exp);
@@ -2369,7 +2369,10 @@ else if(exp->expType && exp->expType->kind == 8 && exp->expType->__anon1._class
 {
 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
 struct __ecereNameSpace__ecere__com__Class * _class;
+struct Statement * stmt;
 struct Expression * o;
+struct Statement * compound = MkCompoundStmt(MkListOne(MkDeclaration(MkListOne(MkSpecifier(VOID)), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("__ecerePtrToDelete"))), MkInitializerAssignment(MkExpBrackets(args)))))), MkListOne(stmt = MkExpressionStmt(list)));
+struct Expression * stmtExp = MkExpExtensionCompound(compound);
 
 for(_class = exp->expType->__anon1._class->__anon1.registered; _class && _class->type == 5; _class = _class->base)
 {
@@ -2382,15 +2385,15 @@ FullClassNameCat(className, _class->fullName, 0);
 if(!_class->symbol)
 _class->symbol = FindClass(_class->fullName);
 DeclareClass(curExternal, _class->symbol, className);
-ListAdd(list, MkExpCondition(MkExpPointer(QMkExpId(className), MkIdentifier("Destructor")), MkListOne(MkExpCall(MkExpPointer(QMkExpId(className), MkIdentifier("Destructor")), MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), QMkPtrDecl((((void *)0)))), CopyExpression((*args).first))))), MkExpConstant("0")));
+ListAdd(list, MkExpCondition(MkExpPointer(QMkExpId(className), MkIdentifier("Destructor")), MkListOne(MkExpCall(MkExpPointer(QMkExpId(className), MkIdentifier("Destructor")), MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), QMkPtrDecl((((void *)0)))), MkExpIdentifier(MkIdentifier("__ecerePtrToDelete")))))), MkExpConstant("0")));
 }
-ListAdd(list, MkExpCall(QMkExpId("ecere::com::eSystem_Delete"), args));
+ListAdd(list, MkExpCall(QMkExpId("ecere::com::eSystem_Delete"), MkListOne(MkExpIdentifier(MkIdentifier("__ecerePtrToDelete")))));
 DeclareFunctionUtil(curExternal, "eSystem_Delete");
 o = CopyExpression(object);
 ProcessExpressionType(o);
 o->usage = (o->usage & ~0x1) | (((unsigned int)(1)) << 0);
 ProcessExpression(o);
-ListAdd(exp->__anon1.list, MkExpBrackets(MkListOne(MkExpCondition(o, MkListOne(MkExpBrackets(list)), MkExpConstant("0")))));
+ListAdd(exp->__anon1.list, MkExpBrackets(MkListOne(MkExpCondition(o, MkListOne(stmtExp), MkExpConstant("0")))));
 }
 else if(exp->expType && exp->expType->kind == 20)
 {
@@ -2543,7 +2546,11 @@ FreeType(exp->destType);
 *exp = *refExp;
 exp->prev = prev;
 exp->next = next;
-((refExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)refExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(refExp)) : 0), refExp = 0);
+((refExp ? __extension__ ({
+void * __ecerePtrToDelete = (refExp);
+
+__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), refExp = 0);
 }
 if(exp->__anon1.op.op == '&' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->expType && exp->__anon1.op.exp2->expType->kind == 20 && !exp->__anon1.op.exp2->expType->passAsTemplate)
 {
@@ -3188,7 +3195,11 @@ __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*((struct Statement *)
 e->byReference = 1;
 FreeType(checkedExp->expType);
 FreeType(checkedExp->destType);
-((checkedExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)checkedExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(checkedExp)) : 0), checkedExp = 0);
+((checkedExp ? __extension__ ({
+void * __ecerePtrToDelete = (checkedExp);
+
+__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), checkedExp = 0);
 }
 else if((!e->byReference && (!e->expType || !e->expType->classObjectType)) || (_class && _class->type == 5))
 {
index 7f907b0..3d65dea 100644 (file)
@@ -1036,7 +1036,11 @@ if((*newSpecs).first)
 struct Specifier * newSpec = CopySpecifier((*newSpecs).first);
 
 *spec = *newSpec;
-((newSpec ? (__ecereClass_Specifier->Destructor ? __ecereClass_Specifier->Destructor((void *)newSpec) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newSpec)) : 0), newSpec = 0);
+((newSpec ? __extension__ ({
+void * __ecerePtrToDelete = (newSpec);
+
+__ecereClass_Specifier->Destructor ? __ecereClass_Specifier->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), newSpec = 0);
 }
 FreeList(newSpecs, (void *)(FreeSpecifier));
 if(decl)
@@ -1059,7 +1063,11 @@ if((*newSpecs).first)
 struct Specifier * newSpec = CopySpecifier((*newSpecs).first);
 
 *spec = *newSpec;
-((newSpec ? (__ecereClass_Specifier->Destructor ? __ecereClass_Specifier->Destructor((void *)newSpec) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newSpec)) : 0), newSpec = 0);
+((newSpec ? __extension__ ({
+void * __ecerePtrToDelete = (newSpec);
+
+__ecereClass_Specifier->Destructor ? __ecereClass_Specifier->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), newSpec = 0);
 }
 if(decl)
 {
@@ -1255,7 +1263,11 @@ struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = m->incomi
 
 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__LinkList->_vTbl;
 })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove])(m->incoming, (struct __ecereNameSpace__ecere__com__IteratorPointer *)e);
-((e ? (__ecereClass_TopoEdge->Destructor ? __ecereClass_TopoEdge->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
+((e ? __extension__ ({
+void * __ecerePtrToDelete = (e);
+
+__ecereClass_TopoEdge->Destructor ? __ecereClass_TopoEdge->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), e = 0);
 if(!((struct __ecereNameSpace__ecere__com__LinkList *)(((char *)m->incoming + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->count)
 {
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*list), m);
@@ -2292,7 +2304,11 @@ FreeExpContents(exp);
 FreeType(exp->expType);
 FreeType(exp->destType);
 *exp = *castExp;
-((castExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)castExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(castExp)) : 0), castExp = 0);
+((castExp ? __extension__ ({
+void * __ecerePtrToDelete = (castExp);
+
+__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), castExp = 0);
 exp->prev = prev;
 exp->next = next;
 InstDeclPassExpression(exp);
index 1c96ce5..e05e624 100644 (file)
@@ -1993,7 +1993,11 @@ case 248:
 {
 PopContext((*yyvaluep).context);
 FreeContext((*yyvaluep).context);
-(((*yyvaluep).context ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)(*yyvaluep).context) : 0, __ecereNameSpace__ecere__com__eSystem_Delete((*yyvaluep).context)) : 0), (*yyvaluep).context = 0);
+(((*yyvaluep).context ? __extension__ ({
+void * __ecerePtrToDelete = ((*yyvaluep).context);
+
+__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
+}) : 0), (*yyvaluep).context = 0);
 }
 ;
 break;
index e955b2d..7a6da86 100644 (file)
@@ -1053,7 +1053,11 @@ static void ProcessExpression(Expression exp)
 
                OldList * list = MkList();
                Class _class;
+               Statement stmt;
                Expression o;
+               Statement compound = MkCompoundStmt(MkListOne(MkDeclaration(MkListOne(MkSpecifier(VOID)), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer(null, null), MkDeclaratorIdentifier(MkIdentifier("__ecerePtrToDelete"))),
+                  MkInitializerAssignment(MkExpBrackets(args)))))), MkListOne(stmt = MkExpressionStmt(list)));
+               Expression stmtExp = MkExpExtensionCompound(compound);
                for(_class = exp.expType._class.registered; _class && _class.type == noHeadClass; _class = _class.base)
                {
                   char className[1024];
@@ -1079,14 +1083,14 @@ static void ProcessExpression(Expression exp)
                                  QMkExpId(className),
                                  MkIdentifier("Destructor")
                               ),
-                              MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), QMkPtrDecl(null)), CopyExpression(args->first)))
+                              MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), QMkPtrDecl(null)), MkExpIdentifier(MkIdentifier("__ecerePtrToDelete")) /*CopyExpression(args->first)*/))
                            )
                         ),
                         MkExpConstant("0")
                      )
                   );
                }
-               ListAdd(list, MkExpCall(QMkExpId("ecere::com::eSystem_Delete"), args));
+               ListAdd(list, MkExpCall(QMkExpId("ecere::com::eSystem_Delete"), MkListOne(MkExpIdentifier(MkIdentifier("__ecerePtrToDelete"))) /*args*/));
                DeclareFunctionUtil(curExternal, "eSystem_Delete");
                o = CopyExpression(object);
                ProcessExpressionType(o);
@@ -1099,7 +1103,8 @@ static void ProcessExpression(Expression exp)
                         MkExpCondition(
                            o,
                            MkListOne(
-                              MkExpBrackets(list)
+                              //MkExpBrackets(list)
+                              stmtExp
                            ),
                            MkExpConstant("0")
                         )