Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
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#include <private/qv4mm_p.h>
11
12using namespace Qt::Literals::StringLiterals;
13
20
22 Heap::StringOrSymbol *s = asStringOrSymbol();
23 return s && s->internalClass->vtable->isString;
24}
25
27 Heap::StringOrSymbol *s = asStringOrSymbol();
28 return s && !s->internalClass->vtable->isString && s->internalClass->vtable->isStringOrSymbol;
29}
30
32{
33 if (isArrayIndex())
34 return true;
35 if (isSymbol())
36 return false;
37 Heap::String *s = static_cast<Heap::String *>(asStringOrSymbol());
38 Scope scope(s->internalClass->engine);
39 ScopedString str(scope, s);
40 double d = str->toNumber();
41 if (d == 0. && std::signbit(d))
42 return true;
43 ScopedString converted(scope, Value::fromDouble(d).toString(scope.engine));
44 if (converted->equals(str))
45 return true;
46 return false;
47}
48
50{
51 if (isArrayIndex())
52 return QString::number(asArrayIndex());
53 Heap::StringOrSymbol *s = asStringOrSymbol();
54 Q_ASSERT(s->internalClass->vtable->isStringOrSymbol);
55 return s->toQString();
56}
57
59{
60 QString n;
61 if (prefix == Getter)
62 n += "get "_L1;
63 else if (prefix == Setter)
64 n += "set "_L1;
65 if (isArrayIndex())
66 n += QString::number(asArrayIndex());
67 else {
68 Heap::StringOrSymbol *s = asStringOrSymbol();
69 QString str = s->toQString();
70 if (s->internalClass->vtable->isString)
71 n += s->toQString();
72 else if (str.size() > 1)
73 n += QChar::fromLatin1('[') + QStringView{str}.mid(1) + QChar::fromLatin1(']');
74 }
75 return engine->newString(n);
76}
\inmodule QtCore
Definition qstringview.h:78
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
QString mid(qsizetype position, qsizetype n=-1) const &
Definition qstring.cpp:5300
qsizetype size() const noexcept
Returns the number of characters in this string.
Definition qstring.h:186
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:8084
QString str
[2]
Scoped< String > ScopedString
static QString toString(QV4::ReturnedValue v)
GLfloat n
GLdouble s
[6]
Definition qopenglext.h:235
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
QJSEngine engine
[0]
bool isArrayIndex() const
Heap::StringOrSymbol * toStringOrSymbol(ExecutionEngine *e)
Q_QML_EXPORT QString toQString() const
bool isCanonicalNumericIndexString() const
Q_QML_EXPORT bool isSymbol() const
Q_QML_EXPORT bool isString() const
StringOrSymbol * asStringOrSymbol() const
uint asArrayIndex() const
Heap::String * asFunctionName(ExecutionEngine *e, FunctionNamePrefix prefix) const
ExecutionEngine * engine
static Value fromDouble(double d)
Definition qv4value_p.h:199
static Value fromUInt32(uint i)
Definition qv4value_p.h:203