From 7a2400641295603b37221dfae2b5ba289dd2a1c9 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Wed, 28 Mar 2012 10:25:15 +0200 Subject: [PATCH] Add floats to the high level IR type system. Change-Id: If78870000eb72231e6eac67ec8a3d6441b5a4877 Reviewed-by: Aaron Kennedy --- src/qml/qml/v4/qv4ir.cpp | 8 +++++--- src/qml/qml/v4/qv4ir_p.h | 1 + src/qml/qml/v4/qv4irbuilder.cpp | 3 +++ src/qml/qml/v4/qv4irbuilder_p.h | 1 + 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/qml/qml/v4/qv4ir.cpp b/src/qml/qml/v4/qv4ir.cpp index 69de522..d2b9605 100644 --- a/src/qml/qml/v4/qv4ir.cpp +++ b/src/qml/qml/v4/qv4ir.cpp @@ -65,6 +65,7 @@ inline const char *typeName(Type t) case ObjectType: return "object"; case BoolType: return "bool"; case IntType: return "int"; + case FloatType: return "float"; case NumberType: return "number"; default: return "invalid"; } @@ -90,9 +91,10 @@ IR::Type maxType(IR::Type left, IR::Type right) return IR::StringType; } else if (left == right) return left; - else if (isNumberType(left) && isNumberType(right)) - return qMax(left, right); - else if ((isNumberType(left) && isStringType(right)) || + else if (isNumberType(left) && isNumberType(right)) { + IR::Type ty = qMax(left, right); + return ty == FloatType ? NumberType : ty; // promote floats + } else if ((isNumberType(left) && isStringType(right)) || (isNumberType(right) && isStringType(left))) return IR::StringType; else diff --git a/src/qml/qml/v4/qv4ir_p.h b/src/qml/qml/v4/qv4ir_p.h index 3a68695..0f5128e 100644 --- a/src/qml/qml/v4/qv4ir_p.h +++ b/src/qml/qml/v4/qv4ir_p.h @@ -150,6 +150,7 @@ enum Type { FirstNumberType, BoolType = FirstNumberType, IntType, + FloatType, NumberType }; Type maxType(IR::Type left, IR::Type right); diff --git a/src/qml/qml/v4/qv4irbuilder.cpp b/src/qml/qml/v4/qv4irbuilder.cpp index 57cea57..b8210b8 100644 --- a/src/qml/qml/v4/qv4irbuilder.cpp +++ b/src/qml/qml/v4/qv4irbuilder.cpp @@ -61,6 +61,9 @@ static IR::Type irTypeFromVariantType(int t, QQmlEnginePrivate *engine, const QM case QMetaType::Int: return IR::IntType; + case QMetaType::Float: + return IR::FloatType; + case QMetaType::Double: return IR::NumberType; diff --git a/src/qml/qml/v4/qv4irbuilder_p.h b/src/qml/qml/v4/qv4irbuilder_p.h index f519209..e73ec22 100644 --- a/src/qml/qml/v4/qv4irbuilder_p.h +++ b/src/qml/qml/v4/qv4irbuilder_p.h @@ -95,6 +95,7 @@ protected: case QQmlJS::IR::StringType: case QQmlJS::IR::BoolType: case QQmlJS::IR::IntType: + case QQmlJS::IR::FloatType: case QQmlJS::IR::NumberType: return true; -- 2.7.4