compiler/libec: Fixed mistake in last commit
authorJerome St-Louis <jerome@ecere.com>
Thu, 5 Jun 2014 06:57:32 +0000 (02:57 -0400)
committerJerome St-Louis <jerome@ecere.com>
Thu, 5 Jun 2014 06:57:32 +0000 (02:57 -0400)
- Was accessing templateParameter member without ensuring we're dealing with a template type

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

index 39f750b..ae73fbc 100644 (file)
@@ -1586,9 +1586,7 @@ if(e->type != 11 || !IsVoidPtrCast(e->__anon1.cast.typeName))
 {
 if(src)
 src->refCount++;
-if(src->kind == 20)
-{
-if(src->__anon1.templateParameter && src->__anon1.templateParameter->type == 0)
+if(src->kind == 20 && src->__anon1.templateParameter && src->__anon1.templateParameter->type == 0)
 {
 struct Type * newType = (((void *)0));
 
@@ -1602,7 +1600,6 @@ FreeType(src);
 src = newType;
 }
 }
-}
 if(src && src->kind == 8 && src->__anon1._class)
 {
 struct __ecereNameSpace__ecere__com__Class * sc = src->__anon1._class->__anon1.registered;
@@ -1615,7 +1612,7 @@ if(dest && (dest->kind == 20 || dest->kind == 8))
 {
 if(dest)
 dest->refCount++;
-if(dest->__anon1.templateParameter && dest->__anon1.templateParameter->type == 0)
+if(dest->kind == 20 && dest->__anon1.templateParameter && dest->__anon1.templateParameter->type == 0)
 {
 struct Type * newType = (((void *)0));
 
index b043ff7..96fd4aa 100644 (file)
@@ -499,20 +499,17 @@ static void InstDeclPassExpression(Expression exp)
                   if(e.type != castExp || !IsVoidPtrCast(e.cast.typeName))
                   {
                      if(src) src.refCount++;
-                     if(src.kind == templateType)
+                     if(src.kind == templateType && src.templateParameter && src.templateParameter.type == type)
                      {
-                        if(src.templateParameter && src.templateParameter.type == type)
+                        Type newType = null;
+                        if(src.templateParameter.dataTypeString)
+                           newType = ProcessTypeString(src.templateParameter.dataTypeString, false);
+                        else if(src.templateParameter.dataType)
+                           newType = ProcessType(src.templateParameter.dataType.specifiers, src.templateParameter.dataType.decl);
+                        if(newType)
                         {
-                           Type newType = null;
-                           if(src.templateParameter.dataTypeString)
-                              newType = ProcessTypeString(src.templateParameter.dataTypeString, false);
-                           else if(src.templateParameter.dataType)
-                              newType = ProcessType(src.templateParameter.dataType.specifiers, src.templateParameter.dataType.decl);
-                           if(newType)
-                           {
-                              FreeType(src);
-                              src = newType;
-                           }
+                           FreeType(src);
+                           src = newType;
                         }
                      }
                      if(src && src.kind == classType && src._class)
@@ -525,7 +522,7 @@ static void InstDeclPassExpression(Expression exp)
                            {
                               if(dest) dest.refCount++;
 
-                              if(dest.templateParameter && dest.templateParameter.type == type)
+                              if(dest.kind == templateType && dest.templateParameter && dest.templateParameter.type == type)
                               {
                                  Type newType = null;
                                  if(dest.templateParameter.dataTypeString)