diff options
author | Lars Knoll <[email protected]> | 2018-04-16 13:35:32 +0200 |
---|---|---|
committer | Lars Knoll <[email protected]> | 2018-05-02 14:19:45 +0000 |
commit | f3d6ed472fd2386c77cc286c067abee0a20fc0b9 (patch) | |
tree | 3a373a2b4ed2ee2b1aac454139f77506efedc137 /src/qml | |
parent | 613dede03b1fa742027072c5656ef6ccefc651ad (diff) |
Fixes to symbol handling in StringObject and toString()
Change-Id: I0990e9610a3200502719191fa0a4174ba9ee1903
Reviewed-by: Simon Hausmann <[email protected]>
Diffstat (limited to 'src/qml')
-rw-r--r-- | src/qml/jsruntime/qv4stringobject.cpp | 45 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4value.cpp | 7 |
2 files changed, 26 insertions, 26 deletions
diff --git a/src/qml/jsruntime/qv4stringobject.cpp b/src/qml/jsruntime/qv4stringobject.cpp index db873d32e2..bfc7a82046 100644 --- a/src/qml/jsruntime/qv4stringobject.cpp +++ b/src/qml/jsruntime/qv4stringobject.cpp @@ -306,12 +306,11 @@ ReturnedValue StringPrototype::method_endsWith(const FunctionObject *b, const Va if (v4->hasException) return QV4::Encode::undefined(); - QString searchString; - if (argc) { - if (argv[0].as<RegExpObject>()) - return v4->throwTypeError(); - searchString = argv[0].toQString(); - } + if (argc && argv[0].as<RegExpObject>()) + return v4->throwTypeError(); + QString searchString = (argc ? argv[0] : Primitive::undefinedValue()).toQString(); + if (v4->hasException) + return Encode::undefined(); int pos = value.length(); if (argc > 1) @@ -331,9 +330,9 @@ ReturnedValue StringPrototype::method_indexOf(const FunctionObject *b, const Val if (v4->hasException) return QV4::Encode::undefined(); - QString searchString; - if (argc) - searchString = argv[0].toQString(); + QString searchString = (argc ? argv[0] : Primitive::undefinedValue()).toQString(); + if (v4->hasException) + return Encode::undefined(); int pos = 0; if (argc > 1) @@ -353,12 +352,11 @@ ReturnedValue StringPrototype::method_includes(const FunctionObject *b, const Va if (v4->hasException) return QV4::Encode::undefined(); - QString searchString; - if (argc) { - if (argv[0].as<RegExpObject>()) - return v4->throwTypeError(); - searchString = argv[0].toQString(); - } + if (argc && argv[0].as<RegExpObject>()) + return v4->throwTypeError(); + QString searchString = (argc ? argv[0] : Primitive::undefinedValue()).toQString(); + if (v4->hasException) + return Encode::undefined(); int pos = 0; if (argc > 1) { @@ -382,9 +380,9 @@ ReturnedValue StringPrototype::method_lastIndexOf(const FunctionObject *b, const if (v4->hasException) return QV4::Encode::undefined(); - QString searchString; - if (argc) - searchString = argv[0].toQString(); + QString searchString = (argc ? argv[0] : Primitive::undefinedValue()).toQString(); + if (v4->hasException) + return Encode::undefined(); double position = argc > 1 ? RuntimeHelpers::toNumber(argv[1]) : +qInf(); if (std::isnan(position)) @@ -785,12 +783,11 @@ ReturnedValue StringPrototype::method_startsWith(const FunctionObject *b, const if (v4->hasException) return QV4::Encode::undefined(); - QString searchString; - if (argc) { - if (argv[0].as<RegExpObject>()) - return v4->throwTypeError(); - searchString = argv[0].toQString(); - } + if (argc && argv[0].as<RegExpObject>()) + return v4->throwTypeError(); + QString searchString = (argc ? argv[0] : Primitive::undefinedValue()).toQString(); + if (v4->hasException) + return Encode::undefined(); int pos = 0; if (argc > 1) diff --git a/src/qml/jsruntime/qv4value.cpp b/src/qml/jsruntime/qv4value.cpp index bd397752fe..a18dffac1e 100644 --- a/src/qml/jsruntime/qv4value.cpp +++ b/src/qml/jsruntime/qv4value.cpp @@ -205,9 +205,12 @@ QString Value::toQString() const else return QStringLiteral("false"); case Value::Managed_Type: - if (String *s = stringValue()) + if (String *s = stringValue()) { return s->toQString(); - { + } else if (isSymbol()) { + static_cast<const Managed *>(this)->engine()->throwTypeError(); + return QString(); + } else { Q_ASSERT(isObject()); Scope scope(objectValue()->engine()); ScopedValue prim(scope, RuntimeHelpers::toPrimitive(*this, STRING_HINT)); |