fixing problem 644

This commit is contained in:
Ilia Filippov
2013-10-25 12:49:06 +04:00
parent e436e33771
commit 621679245a

View File

@@ -7065,9 +7065,22 @@ TypeCastExpr::GetLValue(FunctionEmitContext *ctx) const {
const Type *
TypeCastExpr::GetType() const {
// We have to switch off this assert after supporting of operators.
//AssertPos(pos, type->HasUnboundVariability() == false);
return type;
// Here we try to resolve situation where (base_type) can be treated as
// (uniform base_type) of (varying base_type). This is a part of function
// TypeCastExpr::TypeCheck. After implementation of operators we
// have to have this functionality here.
const Type *toType = type, *fromType = expr->GetType();
if (toType == NULL || fromType == NULL)
return NULL;
if (toType->HasUnboundVariability()) {
if (fromType->IsUniformType()) {
toType = type->ResolveUnboundVariability(Variability::Uniform);
} else {
toType = type->ResolveUnboundVariability(Variability::Varying);
}
}
AssertPos(pos, toType->HasUnboundVariability() == false);
return toType;
}