diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-05-27 22:58:32 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-05-28 10:40:08 +0000 |
commit | 3ccd529e350fdf20ad3fb7b296220d63f8bcc747 (patch) | |
tree | c755f0c029543fbf2afd510156e1d51c28a8b28b /src/qml/jsruntime/qv4vme_moth.cpp | |
parent | 23aa9d58d006dd50adb3f582df9b7dab4f64be0b (diff) |
Implement toPrimitive() the way the ES7 spec wants it
Add Dat.prototype[Symbol.toPrimitive] and make use of those
methods in the toPrimitive implementation.
Change-Id: I82a9a94dcae6822100de364373b3f4de1e3d749b
Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
Diffstat (limited to 'src/qml/jsruntime/qv4vme_moth.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4vme_moth.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/qml/jsruntime/qv4vme_moth.cpp b/src/qml/jsruntime/qv4vme_moth.cpp index d89d314942..bf07faca2a 100644 --- a/src/qml/jsruntime/qv4vme_moth.cpp +++ b/src/qml/jsruntime/qv4vme_moth.cpp @@ -398,13 +398,13 @@ static bool compareEqual(QV4::Value lhs, QV4::Value rhs) Heap::Base *r = rhs.m(); Q_ASSERT(l); Q_ASSERT(r); - if (l->internalClass->vtable->isString == r->internalClass->vtable->isString) + if (l->internalClass->vtable->isStringOrSymbol == r->internalClass->vtable->isStringOrSymbol) return static_cast<QV4::Managed &>(lhs).isEqualTo(&static_cast<QV4::Managed &>(rhs)); - if (l->internalClass->vtable->isString) { + if (l->internalClass->vtable->isStringOrSymbol) { rhs = Primitive::fromReturnedValue(RuntimeHelpers::objectDefaultValue(&static_cast<QV4::Object &>(rhs), PREFERREDTYPE_HINT)); break; } else { - Q_ASSERT(r->internalClass->vtable->isString); + Q_ASSERT(r->internalClass->vtable->isStringOrSymbol); lhs = Primitive::fromReturnedValue(RuntimeHelpers::objectDefaultValue(&static_cast<QV4::Object &>(lhs), PREFERREDTYPE_HINT)); break; } @@ -419,8 +419,8 @@ static bool compareEqual(QV4::Value lhs, QV4::Value rhs) rhs = Primitive::fromDouble(rhs.int_32()); // fall through default: // double - if (lhs.m()->internalClass->vtable->isString) - return RuntimeHelpers::toNumber(lhs) == rhs.doubleValue(); + if (lhs.m()->internalClass->vtable->isStringOrSymbol) + return lhs.m()->internalClass->vtable->isString ? (RuntimeHelpers::toNumber(lhs) == rhs.doubleValue()) : false; else lhs = Primitive::fromReturnedValue(RuntimeHelpers::objectDefaultValue(&static_cast<QV4::Object &>(lhs), PREFERREDTYPE_HINT)); } |