diff options
author | Lars Knoll <lars.knoll@digia.com> | 2014-05-09 15:06:29 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-07-22 13:49:19 +0200 |
commit | 903e04deadb4b8f13a77c8a741c0f937beca0640 (patch) | |
tree | 7a502afea535428de7192b64e929e260bc539d24 /src/qml | |
parent | 133ea9d0f1c2dc73b916f5993616a1dd88be98a1 (diff) |
Convert String to new constructor syntax
Change-Id: I07f7667d3d72a7d72e6717d194de8d7b15435777
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml')
-rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 3 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4function.cpp | 4 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4lookup.cpp | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4object.cpp | 4 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4runtime.cpp | 18 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4string.cpp | 77 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4string_p.h | 35 | ||||
-rw-r--r-- | src/qml/qml/ftw/qhashedstring_p.h | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmllocale.cpp | 4 |
9 files changed, 74 insertions, 75 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index 719223f549..a9cbdaea56 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -497,7 +497,8 @@ Returned<Object> *ExecutionEngine::newObject(InternalClass *internalClass) Returned<String> *ExecutionEngine::newString(const QString &s) { - return (new (memoryManager) String(this, s))->asReturned<String>(); + Scope scope(this); + return ScopedString(scope, new (this) String::Data(this, s))->asReturned<String>(); } String *ExecutionEngine::newIdentifier(const QString &text) diff --git a/src/qml/jsruntime/qv4function.cpp b/src/qml/jsruntime/qv4function.cpp index 6fdf61f2c3..89646ec755 100644 --- a/src/qml/jsruntime/qv4function.cpp +++ b/src/qml/jsruntime/qv4function.cpp @@ -62,6 +62,8 @@ Function::Function(ExecutionEngine *engine, CompiledData::CompilationUnit *unit, internalClass = engine->emptyClass; const quint32 *formalsIndices = compiledFunction->formalsTable(); // iterate backwards, so we get the right ordering for duplicate names + Scope scope(engine); + ScopedString s(scope); for (int i = static_cast<int>(compiledFunction->nFormals - 1); i >= 0; --i) { String *arg = compilationUnit->runtimeStrings[formalsIndices[i]].asString(); while (1) { @@ -71,7 +73,7 @@ Function::Function(ExecutionEngine *engine, CompiledData::CompilationUnit *unit, break; } // duplicate arguments, need some trick to store them - arg = new (engine->memoryManager) String(engine, arg, engine->newString(QString(0xfffe))->getPointer()); + arg = (s = new (engine) String::Data(engine, arg, engine->newString(QString(0xfffe))->getPointer())).getPointer(); } } diff --git a/src/qml/jsruntime/qv4lookup.cpp b/src/qml/jsruntime/qv4lookup.cpp index d2ddec560b..57154c4779 100644 --- a/src/qml/jsruntime/qv4lookup.cpp +++ b/src/qml/jsruntime/qv4lookup.cpp @@ -563,7 +563,7 @@ ReturnedValue Lookup::primitiveGetterAccessor1(Lookup *l, const ValueRef object) ReturnedValue Lookup::stringLengthGetter(Lookup *l, const ValueRef object) { if (String *s = object->asString()) - return Encode(s->length()); + return Encode(s->d()->length()); l->getter = getterGeneric; return getterGeneric(l, object); diff --git a/src/qml/jsruntime/qv4object.cpp b/src/qml/jsruntime/qv4object.cpp index b8993d3bde..d8570758df 100644 --- a/src/qml/jsruntime/qv4object.cpp +++ b/src/qml/jsruntime/qv4object.cpp @@ -384,7 +384,7 @@ bool Object::hasOwnProperty(uint index) const return true; if (isStringObject()) { String *s = static_cast<const StringObject *>(this)->d()->value.asString(); - if (index < (uint)s->length()) + if (index < (uint)s->d()->length()) return true; } if (!queryIndexed(index).isEmpty()) @@ -444,7 +444,7 @@ PropertyAttributes Object::queryIndexed(const Managed *m, uint index) if (o->isStringObject()) { String *s = static_cast<const StringObject *>(o)->d()->value.asString(); - if (index < (uint)s->length()) + if (index < (uint)s->d()->length()) return (Attr_NotWritable|Attr_NotConfigurable); } return Attr_Invalid; diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp index 400ee69e69..e84e85c149 100644 --- a/src/qml/jsruntime/qv4runtime.cpp +++ b/src/qml/jsruntime/qv4runtime.cpp @@ -510,11 +510,11 @@ QV4::ReturnedValue RuntimeHelpers::addHelper(ExecutionContext *ctx, const ValueR pright = convert_to_string_add(ctx, pright); if (scope.engine->hasException) return Encode::undefined(); - if (!pleft->stringValue()->length()) + if (!pleft->stringValue()->d()->length()) return pright->asReturnedValue(); - if (!pright->stringValue()->length()) + if (!pright->stringValue()->d()->length()) return pleft->asReturnedValue(); - return (new (ctx->engine()->memoryManager) String(ctx->d()->engine, pleft->stringValue(), pright->stringValue()))->asReturnedValue(); + return (new (ctx->engine()) String::Data(ctx->d()->engine, pleft->stringValue(), pright->stringValue()))->asReturnedValue(); } double x = RuntimeHelpers::toNumber(pleft); double y = RuntimeHelpers::toNumber(pright); @@ -526,11 +526,11 @@ QV4::ReturnedValue Runtime::addString(QV4::ExecutionContext *ctx, const QV4::Val Q_ASSERT(left->isString() || right->isString()); if (left->isString() && right->isString()) { - if (!left->stringValue()->length()) + if (!left->stringValue()->d()->length()) return right->asReturnedValue(); - if (!right->stringValue()->length()) + if (!right->stringValue()->d()->length()) return left->asReturnedValue(); - return (new (ctx->engine()->memoryManager) String(ctx->d()->engine, left->stringValue(), right->stringValue()))->asReturnedValue(); + return (new (ctx->engine()) String::Data(ctx->d()->engine, left->stringValue(), right->stringValue()))->asReturnedValue(); } Scope scope(ctx); @@ -543,11 +543,11 @@ QV4::ReturnedValue Runtime::addString(QV4::ExecutionContext *ctx, const QV4::Val pright = convert_to_string_add(ctx, right); if (scope.engine->hasException) return Encode::undefined(); - if (!pleft->stringValue()->length()) + if (!pleft->stringValue()->d()->length()) return pright->asReturnedValue(); - if (!pright->stringValue()->length()) + if (!pright->stringValue()->d()->length()) return pleft->asReturnedValue(); - return (new (ctx->engine()->memoryManager) String(ctx->d()->engine, pleft->stringValue(), pright->stringValue()))->asReturnedValue(); + return (new (ctx->engine()) String::Data(ctx->d()->engine, pleft->stringValue(), pright->stringValue()))->asReturnedValue(); } void Runtime::setProperty(ExecutionContext *ctx, const ValueRef object, String *name, const ValueRef value) diff --git a/src/qml/jsruntime/qv4string.cpp b/src/qml/jsruntime/qv4string.cpp index 588c79496c..1cdd439ab2 100644 --- a/src/qml/jsruntime/qv4string.cpp +++ b/src/qml/jsruntime/qv4string.cpp @@ -251,38 +251,37 @@ bool String::isEqualTo(Managed *t, Managed *o) } -String::String(ExecutionEngine *engine, const QString &text) - : Managed(engine->stringClass) +String::Data::Data(ExecutionEngine *engine, const QString &t) + : Managed::Data(engine->stringClass) { - Data *data = d(); - data->text = const_cast<QString &>(text).data_ptr(); - data->text->ref.ref(); - data->identifier = 0; - data->stringHash = UINT_MAX; - data->largestSubLength = 0; - data->len = d()->text->size; - setSubtype(StringType_Unknown); + subtype = StringType_Unknown; + + text = const_cast<QString &>(t).data_ptr(); + text->ref.ref(); + identifier = 0; + stringHash = UINT_MAX; + largestSubLength = 0; + len = text->size; } -String::String(ExecutionEngine *engine, String *l, String *r) - : Managed(engine->stringClass) +String::Data::Data(ExecutionEngine *engine, String *l, String *r) + : Managed::Data(engine->stringClass) { - setSubtype(StringType_Unknown); + subtype = StringType_Unknown; - Data *data = d(); - data->left = l; - data->right = r; - data->stringHash = UINT_MAX; - data->largestSubLength = qMax(l->d()->largestSubLength, r->d()->largestSubLength); - data->len = l->d()->len + r->d()->len; + left = l; + right = r; + stringHash = UINT_MAX; + largestSubLength = qMax(l->d()->largestSubLength, r->d()->largestSubLength); + len = l->d()->len + r->d()->len; - if (!l->d()->largestSubLength && l->d()->len > d()->largestSubLength) - d()->largestSubLength = l->d()->len; - if (!r->d()->largestSubLength && r->d()->len > d()->largestSubLength) - d()->largestSubLength = r->d()->len; + if (!l->d()->largestSubLength && l->d()->len > largestSubLength) + largestSubLength = l->d()->len; + if (!r->d()->largestSubLength && r->d()->len > largestSubLength) + largestSubLength = r->d()->len; // make sure we don't get excessive depth in our strings - if (d()->len > 256 && d()->len >= 2*d()->largestSubLength) + if (len > 256 && len >= 2*largestSubLength) simplifyString(); } @@ -321,33 +320,33 @@ bool String::equals(String *other) const void String::makeIdentifierImpl() const { if (d()->largestSubLength) - simplifyString(); + d()->simplifyString(); Q_ASSERT(!d()->largestSubLength); engine()->identifierTable->identifier(this); } -void String::simplifyString() const +void String::Data::simplifyString() const { - Q_ASSERT(d()->largestSubLength); + Q_ASSERT(largestSubLength); int l = length(); QString result(l, Qt::Uninitialized); QChar *ch = const_cast<QChar *>(result.constData()); recursiveAppend(ch); - d()->text = result.data_ptr(); - d()->text->ref.ref(); - d()->identifier = 0; - d()->largestSubLength = 0; + text = result.data_ptr(); + text->ref.ref(); + identifier = 0; + largestSubLength = 0; } -QChar *String::recursiveAppend(QChar *ch) const +QChar *String::Data::recursiveAppend(QChar *ch) const { - if (d()->largestSubLength) { - ch = d()->left->recursiveAppend(ch); - ch = d()->right->recursiveAppend(ch); + if (largestSubLength) { + ch = left->d()->recursiveAppend(ch); + ch = right->d()->recursiveAppend(ch); } else { - memcpy(ch, d()->text->data(), d()->text->size*sizeof(QChar)); - ch += d()->text->size; + memcpy(ch, text->data(), text->size*sizeof(QChar)); + ch += text->size; } return ch; } @@ -356,7 +355,7 @@ QChar *String::recursiveAppend(QChar *ch) const void String::createHashValue() const { if (d()->largestSubLength) - simplifyString(); + d()->simplifyString(); Q_ASSERT(!d()->largestSubLength); const QChar *ch = reinterpret_cast<const QChar *>(d()->text->data()); const QChar *end = ch + d()->text->size; @@ -421,7 +420,7 @@ uint String::createHashValue(const char *ch, int length) uint String::getLength(const Managed *m) { - return static_cast<const String *>(m)->length(); + return static_cast<const String *>(m)->d()->length(); } #endif // V4_BOOTSTRAP diff --git a/src/qml/jsruntime/qv4string_p.h b/src/qml/jsruntime/qv4string_p.h index 7af6ff5947..3578c0378e 100644 --- a/src/qml/jsruntime/qv4string_p.h +++ b/src/qml/jsruntime/qv4string_p.h @@ -54,6 +54,19 @@ struct Identifier; struct Q_QML_PRIVATE_EXPORT String : public Managed { #ifndef V4_BOOTSTRAP struct Data : Managed::Data { + Data(ExecutionEngine *engine, const QString &text); + Data(ExecutionEngine *engine, String *l, String *n); + ~Data() { + if (!largestSubLength && !text->ref.deref()) + QStringData::deallocate(text); + } + void simplifyString() const; + int length() const { + Q_ASSERT((largestSubLength && + (len == left->d()->len + right->d()->len)) || + len == (uint)text->size); + return len; + } union { mutable QStringData *text; mutable String *left; @@ -65,6 +78,8 @@ struct Q_QML_PRIVATE_EXPORT String : public Managed { mutable uint stringHash; mutable uint largestSubLength; uint len; + private: + QChar *recursiveAppend(QChar *ch) const; }; struct { union { @@ -93,13 +108,6 @@ struct Q_QML_PRIVATE_EXPORT String : public Managed { StringType_ArrayIndex }; - String(ExecutionEngine *engine, const QString &text); - String(ExecutionEngine *engine, String *l, String *n); - ~String() { - if (!d()->largestSubLength && !d()->text->ref.deref()) - QStringData::deallocate(d()->text); - } - bool equals(String *other) const; inline bool isEqualTo(const String *other) const { if (this == other) @@ -121,14 +129,12 @@ struct Q_QML_PRIVATE_EXPORT String : public Managed { inline QString toQString() const { if (d()->largestSubLength) - simplifyString(); + d()->simplifyString(); QStringDataPtr ptr = { d()->text }; d()->text->ref.ref(); return QString(ptr); } - void simplifyString() const; - inline unsigned hashValue() const { if (subtype() == StringType_Unknown) createHashValue(); @@ -164,12 +170,6 @@ struct Q_QML_PRIVATE_EXPORT String : public Managed { l = l->d()->left; return l->d()->text->size && QChar::isUpper(l->d()->text->data()[0]); } - int length() const { - Q_ASSERT((d()->largestSubLength && - (d()->len == d()->left->d()->len + d()->right->d()->len)) || - d()->len == (uint)d()->text->size); - return d()->len; - } Identifier *identifier() const { return d()->identifier; } @@ -186,9 +186,6 @@ protected: static bool deleteIndexedProperty(Managed *m, uint index); static bool isEqualTo(Managed *that, Managed *o); static uint getLength(const Managed *m); - -private: - QChar *recursiveAppend(QChar *ch) const; #endif public: diff --git a/src/qml/qml/ftw/qhashedstring_p.h b/src/qml/qml/ftw/qhashedstring_p.h index 61a492013d..57217a6bf8 100644 --- a/src/qml/qml/ftw/qhashedstring_p.h +++ b/src/qml/qml/ftw/qhashedstring_p.h @@ -245,7 +245,7 @@ public: } inline bool equals(const QV4::String *string) const { - if (length != string->length() || hash != string->hashValue()) + if (length != string->d()->length() || hash != string->hashValue()) return false; if (isQString()) { QStringDataPtr dd; diff --git a/src/qml/qml/qqmllocale.cpp b/src/qml/qml/qqmllocale.cpp index 7687c17e82..0d67b3a319 100644 --- a/src/qml/qml/qqmllocale.cpp +++ b/src/qml/qml/qqmllocale.cpp @@ -383,7 +383,7 @@ QV4::ReturnedValue QQmlNumberExtension::method_toLocaleString(QV4::CallContext * if (!ctx->d()->callData->args[1].isString()) V4THROW_ERROR("Locale: Number.toLocaleString(): Invalid arguments"); QV4::String *fs = ctx->d()->callData->args[1].toString(ctx); - if (fs->length()) + if (fs->d()->length()) format = fs->toQString().at(0).unicode(); } int prec = 2; @@ -447,7 +447,7 @@ QV4::ReturnedValue QQmlNumberExtension::method_fromLocaleString(QV4::CallContext } QV4::String *ns = ctx->d()->callData->args[numberIdx].toString(ctx); - if (!ns->length()) + if (!ns->d()->length()) return QV4::Encode(Q_QNAN); bool ok = false; |