Qt 6.x
The Qt SDK
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
qv4propertykey.cpp
Go to the documentation of this file.
1// Copyright (C) 2018 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qv4propertykey_p.h"
5
6#include <QtCore/qstring.h>
7#include <qv4string_p.h>
8#include <qv4engine_p.h>
9#include <qv4scopedvalue_p.h>
10
12{
13 if (isArrayIndex())
15 return asStringOrSymbol();
16}
17
19 Heap::StringOrSymbol *s = asStringOrSymbol();
20 return s && s->internalClass->vtable->isString;
21}
22
24 Heap::StringOrSymbol *s = asStringOrSymbol();
25 return s && !s->internalClass->vtable->isString && s->internalClass->vtable->isStringOrSymbol;
26}
27
29{
30 if (isArrayIndex())
31 return true;
32 if (isSymbol())
33 return false;
34 Heap::String *s = static_cast<Heap::String *>(asStringOrSymbol());
35 Scope scope(s->internalClass->engine);
36 ScopedString str(scope, s);
37 double d = str->toNumber();
38 if (d == 0. && std::signbit(d))
39 return true;
40 ScopedString converted(scope, Value::fromDouble(d).toString(scope.engine));
41 if (converted->equals(str))
42 return true;
43 return false;
44}
45
47{
48 if (isArrayIndex())
49 return QString::number(asArrayIndex());
50 Heap::StringOrSymbol *s = asStringOrSymbol();
51 Q_ASSERT(s->internalClass->vtable->isStringOrSymbol);
52 return s->toQString();
53}
54
56{
57 QString n;
58 if (prefix == Getter)
59 n = QStringLiteral("get ");
60 else if (prefix == Setter)
61 n = QStringLiteral("set ");
62 if (isArrayIndex())
63 n += QString::number(asArrayIndex());
64 else {
65 Heap::StringOrSymbol *s = asStringOrSymbol();
66 QString str = s->toQString();
67 if (s->internalClass->vtable->isString)
68 n += s->toQString();
69 else if (str.size() > 1)
71 }
72 return engine->newString(n);
73}
static constexpr QChar fromLatin1(char c) noexcept
Converts the Latin-1 character c to its equivalent QChar.
Definition qchar.h:461
\inmodule QtCore
Definition qstringview.h:76
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
qsizetype size() const
Returns the number of characters in this string.
Definition qstring.h:182
QString mid(qsizetype position, qsizetype n=-1) const
Returns a string that contains n characters of this string, starting at the specified position index.
Definition qstring.cpp:5204
static QString number(int, int base=10)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:7822
QString str
[2]
double e
static QString toString(QV4::ReturnedValue v)
GLfloat n
GLdouble s
[6]
Definition qopenglext.h:235
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
#define QStringLiteral(str)
QJSEngine engine
[0]
bool isArrayIndex() const
Heap::StringOrSymbol * toStringOrSymbol(ExecutionEngine *e)
Q_QML_PRIVATE_EXPORT QString toQString() const
bool isCanonicalNumericIndexString() const
Q_QML_PRIVATE_EXPORT bool isSymbol() const
Q_QML_PRIVATE_EXPORT bool isString() const
StringOrSymbol * asStringOrSymbol() const
uint asArrayIndex() const
Heap::String * asFunctionName(ExecutionEngine *e, FunctionNamePrefix prefix) const
ExecutionEngine * engine
Heap::String * toString(ExecutionEngine *e) const
Definition qv4value_p.h:114
static Value fromDouble(double d)
Definition qv4value_p.h:199
static Value fromUInt32(uint i)
Definition qv4value_p.h:203