From 4390b181e0fca6b9a57e5f7c0cb80b63f8a6fdec Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Thu, 5 Jun 2014 02:57:32 -0400 Subject: [PATCH] compiler/libec: Fixed mistake in last commit - Was accessing templateParameter member without ensuring we're dealing with a template type --- compiler/bootstrap/libec/bootstrap/pass3.c | 7 ++----- compiler/libec/src/pass3.ec | 23 ++++++++++------------- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/compiler/bootstrap/libec/bootstrap/pass3.c b/compiler/bootstrap/libec/bootstrap/pass3.c index 39f750b..ae73fbc 100644 --- a/compiler/bootstrap/libec/bootstrap/pass3.c +++ b/compiler/bootstrap/libec/bootstrap/pass3.c @@ -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)); diff --git a/compiler/libec/src/pass3.ec b/compiler/libec/src/pass3.ec index b043ff7..96fd4aa 100644 --- a/compiler/libec/src/pass3.ec +++ b/compiler/libec/src/pass3.ec @@ -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) -- 1.8.3.1