Add floats to the high level IR type system.
authorRoberto Raggi <roberto.raggi@nokia.com>
Wed, 28 Mar 2012 08:25:15 +0000 (10:25 +0200)
committerQt by Nokia <qt-info@nokia.com>
Tue, 3 Apr 2012 14:22:04 +0000 (16:22 +0200)
Change-Id: If78870000eb72231e6eac67ec8a3d6441b5a4877
Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
src/qml/qml/v4/qv4ir.cpp
src/qml/qml/v4/qv4ir_p.h
src/qml/qml/v4/qv4irbuilder.cpp
src/qml/qml/v4/qv4irbuilder_p.h

index 69de522..d2b9605 100644 (file)
@@ -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
index 3a68695..0f5128e 100644 (file)
@@ -150,6 +150,7 @@ enum Type {
     FirstNumberType,
     BoolType = FirstNumberType,
     IntType,
+    FloatType,
     NumberType
 };
 Type maxType(IR::Type left, IR::Type right);
index 57cea57..b8210b8 100644 (file)
@@ -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;
 
index f519209..e73ec22 100644 (file)
@@ -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;