7#include <QtCore/qstring.h>
8#include <qv4string_p.h>
9#include <qv4engine_p.h>
10#include <qv4scopedvalue_p.h>
11#include <private/qv4mm_p.h>
13using namespace Qt::Literals::StringLiterals;
18 return Value::fromUInt32(asArrayIndex()).toString(e);
19 return asStringOrSymbol();
23 Heap::StringOrSymbol *s = asStringOrSymbol();
24 return s && s->internalClass->vtable->isString;
28 Heap::StringOrSymbol *s = asStringOrSymbol();
29 return s && !s->internalClass->vtable->isString && s->internalClass->vtable->isStringOrSymbol;
38 Heap::String *s =
static_cast<
Heap::String *>(asStringOrSymbol());
39 Scope scope(s->internalClass->engine);
41 double d = str->toNumber();
42 if (d == 0. &&
std::signbit(d))
44 ScopedString converted(scope, Value::fromDouble(d).toString(scope.engine));
45 if (converted->equals(str))
53 return QString::number(asArrayIndex());
54 Heap::StringOrSymbol *s = asStringOrSymbol();
55 Q_ASSERT(s->internalClass->vtable->isStringOrSymbol);
56 return s->toQString();
64 else if (prefix == Setter)
67 n += QString::number(asArrayIndex());
69 Heap::StringOrSymbol *s = asStringOrSymbol();
70 QString str = s->toQString();
71 if (s->internalClass->vtable->isString)
73 else if (str.size() > 1)
74 n += QChar::fromLatin1(
'[') + QStringView{str}.mid(1) + QChar::fromLatin1(
']');
76 return engine->newString(n);
Scoped< String > ScopedString
bool isArrayIndex() const
Heap::StringOrSymbol * toStringOrSymbol(ExecutionEngine *e)
bool isCanonicalNumericIndexString() const
Q_QML_EXPORT bool isSymbol() const
Q_QML_EXPORT bool isString() const
Heap::String * asFunctionName(ExecutionEngine *e, FunctionNamePrefix prefix) const