fixing problem 644
This commit is contained in:
19
expr.cpp
19
expr.cpp
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user