compiler/libec: Fixed PrintLn(Degrees { 1 })
authorJerome St-Louis <jerome@ecere.com>
Wed, 6 Aug 2014 21:51:21 +0000 (17:51 -0400)
committerJerome St-Louis <jerome@ecere.com>
Wed, 6 Aug 2014 21:52:18 +0000 (17:52 -0400)
- Was losing typedObject destType when processing instance

compiler/bootstrap/libec/bootstrap/pass16.c
compiler/libec/src/pass16.ec

index 33b066d..6601c54 100644 (file)
@@ -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;
index b5fcf89..9b874c5 100644 (file)
@@ -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;