aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4runtime.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/jsruntime/qv4runtime.cpp')
-rw-r--r--src/qml/jsruntime/qv4runtime.cpp44
1 files changed, 42 insertions, 2 deletions
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp
index 9737a18812..3342075f7f 100644
--- a/src/qml/jsruntime/qv4runtime.cpp
+++ b/src/qml/jsruntime/qv4runtime.cpp
@@ -1414,7 +1414,7 @@ QV4::ReturnedValue Runtime::method_setupArgumentsObject(ExecutionEngine *engine)
#endif // V4_BOOTSTRAP
-QV4::ReturnedValue Runtime::method_increment(const Value &value)
+QV4::ReturnedValue Runtime::method_preIncrement(const Value &value)
{
TRACE1(value);
@@ -1426,7 +1426,7 @@ QV4::ReturnedValue Runtime::method_increment(const Value &value)
}
}
-QV4::ReturnedValue Runtime::method_decrement(const Value &value)
+QV4::ReturnedValue Runtime::method_preDecrement(const Value &value)
{
TRACE1(value);
@@ -1438,6 +1438,46 @@ QV4::ReturnedValue Runtime::method_decrement(const Value &value)
}
}
+QV4::ReturnedValue Runtime::method_postIncrement(Value *value)
+{
+ TRACE1(value);
+
+ if (value->isNumber()) {
+ Value old = *value;
+ if (value->isInteger() && value->integerValue() < INT_MAX) {
+ *value = Primitive::fromInt32(value->integerValue() + 1);
+ } else {
+ *value = Primitive::fromDouble(value->doubleValue() + 1.0);
+ }
+ return old.asReturnedValue();
+ }
+
+ // ToNumber conversion needed:
+ double d = value->toNumberImpl();
+ *value = Primitive::fromDouble(d + 1.);
+ return Encode(d);
+}
+
+QV4::ReturnedValue Runtime::method_postDecrement(Value *value)
+{
+ TRACE1(value);
+
+ if (value->isNumber()) {
+ Value old = *value;
+ if (value->isInteger() && value->integerValue() > INT_MIN) {
+ *value = Primitive::fromInt32(value->integerValue() - 1);
+ } else {
+ *value = Primitive::fromDouble(value->doubleValue() - 1.0);
+ }
+ return old.asReturnedValue();
+ }
+
+ // ToNumber conversion needed:
+ double d = value->toNumber();
+ *value = Primitive::fromDouble(d - 1.);
+ return Encode(d);
+}
+
ReturnedValue Runtime::method_toDouble(const Value &value)
{
TRACE1(value);