diff options
-rw-r--r-- | src/qml/jsruntime/qv4runtime.cpp | 21 | ||||
-rw-r--r-- | tests/auto/qml/ecmascripttests/TestExpectations | 3 |
2 files changed, 18 insertions, 6 deletions
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp index 39a451e941..6ada8b64f1 100644 --- a/src/qml/jsruntime/qv4runtime.cpp +++ b/src/qml/jsruntime/qv4runtime.cpp @@ -377,9 +377,24 @@ QV4::ReturnedValue Runtime::method_in(ExecutionEngine *engine, const Value &left double RuntimeHelpers::stringToNumber(const QString &string) { const QStringRef s = QStringRef(&string).trimmed(); - if (s.startsWith(QLatin1String("0x")) || s.startsWith(QLatin1String("0X"))) - return s.toLong(nullptr, 16); - bool ok; + if (s.startsWith(QLatin1Char('0'))) { + int base = -1; + if (s.startsWith(QLatin1String("0x")) || s.startsWith(QLatin1String("0X"))) + base = 16; + else if (s.startsWith(QLatin1String("0o")) || s.startsWith(QLatin1String("0O"))) + base = 8; + else if (s.startsWith(QLatin1String("0b")) || s.startsWith(QLatin1String("0B"))) + base = 2; + if (base > 0) { + bool ok = true; + qlonglong num; + num = s.mid(2).toLongLong(&ok, base); + if (!ok) + return qQNaN(); + return num; + } + } + bool ok = false; QByteArray ba = s.toLatin1(); const char *begin = ba.constData(); const char *end = nullptr; diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations index d1740e5147..b5d89ca545 100644 --- a/tests/auto/qml/ecmascripttests/TestExpectations +++ b/tests/auto/qml/ecmascripttests/TestExpectations @@ -197,9 +197,6 @@ built-ins/Map/prototype/forEach/iterates-values-deleted-then-readded.js fails built-ins/Math/round/S15.8.2.15_A7.js fails built-ins/Number/proto-from-ctor-realm.js fails built-ins/Number/prototype/toPrecision/return-values.js fails -built-ins/Number/string-binary-literal.js fails -built-ins/Number/string-hex-literal-invalid.js fails -built-ins/Number/string-octal-literal.js fails built-ins/Object/create/15.2.3.5-4-14.js strictFails built-ins/Object/create/15.2.3.5-4-37.js strictFails built-ins/Object/entries/getter-making-future-key-nonenumerable.js fails |