diff options
author | Erik Verbruggen <erik.verbruggen@qt.io> | 2017-06-20 11:28:27 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2017-06-21 09:19:59 +0000 |
commit | 48d77ce4c83c2c1d2f3ee3d01c69550e115c3226 (patch) | |
tree | b62edfd573502ded0ff436c250992684d3770567 /src/qml/jsruntime/qv4runtime.cpp | |
parent | 5c86161fa28e951435a735a299b886fbfbe3bb16 (diff) |
Add support for post increment/decrement
Change-Id: Ie3f03a548105fe49d29e3d60bf823435f21b0340
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4runtime.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4runtime.cpp | 44 |
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); |