From 1a07930ba10d16470ee0a23bcf343f342e764755 Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Wed, 6 Aug 2014 17:51:21 -0400 Subject: [PATCH] compiler/libec: Fixed PrintLn(Degrees { 1 }) - Was losing typedObject destType when processing instance --- compiler/bootstrap/libec/bootstrap/pass16.c | 6 +++++- compiler/libec/src/pass16.ec | 8 +++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/compiler/bootstrap/libec/bootstrap/pass16.c b/compiler/bootstrap/libec/bootstrap/pass16.c index 33b066d..6601c54 100644 --- a/compiler/bootstrap/libec/bootstrap/pass16.c +++ b/compiler/bootstrap/libec/bootstrap/pass16.c @@ -2954,8 +2954,8 @@ ProcessInstMembers(inst, (((void *)0)), &list, 0); if(list.first) { struct Expression * e = list.first; +struct Type * destType = exp->destType; -FreeType(exp->destType); *exp = *e; __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&list, e); ((e ? __extension__ ({ @@ -2963,6 +2963,10 @@ void * __ecerePtrToDelete = (e); __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete); }) : 0), e = 0); +if(!exp->destType) +exp->destType = destType; +else +FreeType(destType); exp->expType = expType; exp->prev = prev; exp->next = next; diff --git a/compiler/libec/src/pass16.ec b/compiler/libec/src/pass16.ec index b5fcf89..9b874c5 100644 --- a/compiler/libec/src/pass16.ec +++ b/compiler/libec/src/pass16.ec @@ -858,10 +858,16 @@ static void ProcessExpression(Expression exp) if(list.first) { Expression e = list.first; - FreeType(exp.destType); + Type destType = exp.destType; *exp = *e; list.Remove(e); delete e; + + // Fixes PrintLn(Degrees { 1 }) + if(!exp.destType) + exp.destType = destType; + else + FreeType(destType); exp.expType = expType; exp.prev = prev; exp.next = next; -- 1.8.3.1