diff options
Diffstat (limited to 'src/qml/qml/qqmlcompiler_p.h')
-rw-r--r-- | src/qml/qml/qqmlcompiler_p.h | 348 |
1 files changed, 0 insertions, 348 deletions
diff --git a/src/qml/qml/qqmlcompiler_p.h b/src/qml/qml/qqmlcompiler_p.h index 03134091f0..98d308aa5c 100644 --- a/src/qml/qml/qqmlcompiler_p.h +++ b/src/qml/qml/qqmlcompiler_p.h @@ -55,7 +55,6 @@ #include "qqml.h" #include "qqmlerror.h" -#include "qqmlinstruction_p.h" #include "qqmlscript_p.h" #include "qqmlengine_p.h" #include <private/qbitfield_p.h> @@ -126,23 +125,8 @@ public: void doDynamicTypeCheck(); }; - // --- old compiler: - QList<TypeReference> types; - // --- new compiler: // map from name index QHash<int, TypeReference*> resolvedTypes; - // --- - - struct V8Program { - V8Program(const QByteArray &p, QQmlCompiledData *c) - : program(p), cdata(c) {} - - QByteArray program; - QV4::PersistentValue bindings; - QQmlCompiledData *cdata; - }; - - QList<V8Program> programs; QQmlPropertyCache *rootPropertyCache; QList<QString> primitives; @@ -173,28 +157,6 @@ public: bool isComponent(int objectIndex) const { return objectIndexToIdPerComponent.contains(objectIndex); } bool isCompositeType() const { return !datas.at(qmlUnit->indexOfRootObject).isEmpty(); } - // --- - - struct Instruction { -#define QML_INSTR_DATA_TYPEDEF(I, FMT) typedef QQmlInstructionData<QQmlInstruction::I> I; - FOR_EACH_QML_INSTR(QML_INSTR_DATA_TYPEDEF) -#undef QML_INSTR_DATA_TYPEDEF - private: - Instruction(); - }; - - void dumpInstructions(); - - template <int Instr> - int addInstruction(const QQmlInstructionData<Instr> &data) - { - QQmlInstruction genericInstr; - QQmlInstructionMeta<Instr>::setDataNoCommon(genericInstr, data); - return addInstructionHelper(static_cast<QQmlInstruction::Type>(Instr), genericInstr); - } - int nextInstructionIndex(); - QQmlInstruction *instruction(int index); - QQmlInstruction::Type instructionType(const QQmlInstruction *instr); bool isInitialized() const { return hasEngine(); } void initialize(QQmlEngine *); @@ -204,318 +166,8 @@ protected: virtual void clear(); // From QQmlCleanup private: - friend class QQmlCompiler; - - int addInstructionHelper(QQmlInstruction::Type type, QQmlInstruction &instr); - void dump(QQmlInstruction *, int idx = -1); QQmlCompiledData(const QQmlCompiledData &other); QQmlCompiledData &operator=(const QQmlCompiledData &other); - - int indexForString(const QString &); - int indexForByteArray(const QByteArray &); - int indexForUrl(const QUrl &); -}; - -namespace QQmlCompilerTypes { - struct BindingContext - { - BindingContext() - : stack(0), owner(0), object(0) {} - BindingContext(QQmlScript::Object *o) - : stack(0), owner(0), object(o) {} - BindingContext incr() const { - BindingContext rv(object); - rv.stack = stack + 1; - return rv; - } - bool isSubContext() const { return stack != 0; } - int stack; - int owner; - QQmlScript::Object *object; - }; - - struct BindingReference - { - enum DataType { QtScript, - Tr, TrId }; - DataType dataType; - }; - - struct JSBindingReference : public QQmlPool::Class, - public BindingReference - { - JSBindingReference() : disableLookupAcceleration(false), nextReference(0) {} - - QQmlScript::Variant expression; - QQmlScript::Property *property; - QQmlScript::Value *value; - - int compiledIndex : 16; - int customParserBindingsIndex : 15; - int disableLookupAcceleration: 1; - - BindingContext bindingContext; - - JSBindingReference *nextReference; - }; - - struct TrBindingReference : public QQmlPool::POD, - public BindingReference - { - QStringRef text; - QStringRef comment; - int n; - }; - - struct IdList : public QFieldList<QQmlScript::Object, - &QQmlScript::Object::nextIdObject> - { - QQmlScript::Object *value(const QString &id) const { - for (QQmlScript::Object *o = first(); o; o = next(o)) { - if (o->id == id) - return o; - } - return 0; - } - }; - - struct DepthStack { - DepthStack() : _depth(0), _maxDepth(0) {} - DepthStack(const DepthStack &o) : _depth(o._depth), _maxDepth(o._maxDepth) {} - DepthStack &operator=(const DepthStack &o) { _depth = o._depth; _maxDepth = o._maxDepth; return *this; } - - int depth() const { return _depth; } - int maxDepth() const { return _maxDepth; } - - void push() { ++_depth; _maxDepth = qMax(_depth, _maxDepth); } - void pop() { --_depth; Q_ASSERT(_depth >= 0); Q_ASSERT(_maxDepth > _depth); } - - void pushPop(int count) { _maxDepth = qMax(_depth + count, _maxDepth); } - private: - int _depth; - int _maxDepth; - }; - - // Contains all the incremental compiler state about a component. As - // a single QML file can have multiple components defined, there may be - // more than one of these for each compile - struct ComponentCompileState : public QQmlPool::Class - { - ComponentCompileState() - : parserStatusCount(0), totalBindingsCount(0), pushedProperties(0), nested(false), - root(0) {} - - IdList ids; - int parserStatusCount; - int totalBindingsCount; - int pushedProperties; - bool nested; - - QByteArray compiledBindingData; - - DepthStack objectDepth; - DepthStack listDepth; - - typedef QQmlCompilerTypes::JSBindingReference B; - typedef QFieldList<B, &B::nextReference> JSBindingReferenceList; - JSBindingReferenceList bindings; - typedef QQmlScript::Object O; - typedef QFieldList<O, &O::nextAliasingObject> AliasingObjectsList; - AliasingObjectsList aliasingObjects; - QQmlScript::Object *root; - - struct CompiledMetaMethod - { - int methodIndex; - int compiledFunctionIndex; // index in functionToCompile - }; - - QList<CompiledMetaMethod> compiledMetaMethods; - struct PerObjectCompileData - { - QList<QtQml::CompiledFunctionOrExpression> functionsToCompile; - QVector<int> runtimeFunctionIndices; - QVector<CompiledMetaMethod> compiledMetaMethods; - }; - QHash<QQmlScript::Object *, PerObjectCompileData> jsCompileData; - }; -}; - -class QMetaObjectBuilder; -class Q_AUTOTEST_EXPORT QQmlCompiler : public QQmlCustomParserCompilerBackend -{ - Q_DECLARE_TR_FUNCTIONS(QQmlCompiler) -public: - QQmlCompiler(QQmlPool *); - - bool compile(QQmlEngine *, QQmlTypeData *, QQmlCompiledData *); - - bool isError() const; - QList<QQmlError> errors() const; - - static bool isAttachedPropertyName(const QString &); - static bool isSignalPropertyName(const QString &); - static bool isAttachedPropertyName(const QHashedStringRef &); - static bool isSignalPropertyName(const QHashedStringRef &); - - virtual QQmlBinding::Identifier bindingIdentifier(const QQmlScript::Variant&value, const QString&name, QQmlCustomParser *customParser); - - virtual const QQmlImports &imports() const { return unit->imports(); } - -private: - typedef QQmlCompiledData::Instruction Instruction; - - static void reset(QQmlCompiledData *); - - void compileTree(QQmlScript::Object *tree); - - - bool buildObject(QQmlScript::Object *obj, const QQmlCompilerTypes::BindingContext &); - bool buildComponent(QQmlScript::Object *obj, const QQmlCompilerTypes::BindingContext &); - bool buildSubObject(QQmlScript::Object *obj, const QQmlCompilerTypes::BindingContext &); - bool buildSignal(QQmlScript::Property *prop, QQmlScript::Object *obj, - const QQmlCompilerTypes::BindingContext &); - bool buildProperty(QQmlScript::Property *prop, QQmlScript::Object *obj, - const QQmlCompilerTypes::BindingContext &); - bool buildPropertyInNamespace(QQmlImportNamespace *ns, - QQmlScript::Property *prop, - QQmlScript::Object *obj, - const QQmlCompilerTypes::BindingContext &); - bool buildIdProperty(QQmlScript::Property *prop, QQmlScript::Object *obj); - bool buildAttachedProperty(QQmlScript::Property *prop, - QQmlScript::Object *obj, - const QQmlCompilerTypes::BindingContext &ctxt); - bool buildGroupedProperty(QQmlScript::Property *prop, - QQmlScript::Object *obj, - const QQmlCompilerTypes::BindingContext &ctxt); - bool buildValueTypeProperty(QObject *type, - QQmlScript::Object *obj, - QQmlScript::Object *baseObj, - const QQmlCompilerTypes::BindingContext &ctxt); - bool buildListProperty(QQmlScript::Property *prop, - QQmlScript::Object *obj, - const QQmlCompilerTypes::BindingContext &ctxt); - bool buildScriptStringProperty(QQmlScript::Property *prop, - QQmlScript::Object *obj, - const QQmlCompilerTypes::BindingContext &ctxt); - bool buildPropertyAssignment(QQmlScript::Property *prop, - QQmlScript::Object *obj, - const QQmlCompilerTypes::BindingContext &ctxt); - bool buildPropertyObjectAssignment(QQmlScript::Property *prop, - QQmlScript::Object *obj, - QQmlScript::Value *value, - const QQmlCompilerTypes::BindingContext &ctxt); - bool buildPropertyOnAssignment(QQmlScript::Property *prop, - QQmlScript::Object *obj, - QQmlScript::Object *baseObj, - QQmlScript::Value *value, - const QQmlCompilerTypes::BindingContext &ctxt); - bool buildPropertyLiteralAssignment(QQmlScript::Property *prop, - QQmlScript::Object *obj, - QQmlScript::Value *value, - const QQmlCompilerTypes::BindingContext &ctxt); - bool doesPropertyExist(QQmlScript::Property *prop, QQmlScript::Object *obj); - bool testLiteralAssignment(QQmlScript::Property *prop, - QQmlScript::Value *value); - bool testQualifiedEnumAssignment(QQmlScript::Property *prop, - QQmlScript::Object *obj, - QQmlScript::Value *value, - bool *isAssignment); - enum DynamicMetaMode { Normal, ForceCreation }; - bool mergeDynamicMetaProperties(QQmlScript::Object *obj); - bool buildDynamicMeta(QQmlScript::Object *obj, DynamicMetaMode mode); - bool buildDynamicMetaAliases(QQmlScript::Object *obj); - bool checkDynamicMeta(QQmlScript::Object *obj); - bool buildBinding(QQmlScript::Value *, QQmlScript::Property *prop, - const QQmlCompilerTypes::BindingContext &ctxt); - bool buildLiteralBinding(QQmlScript::Value *, QQmlScript::Property *prop, - const QQmlCompilerTypes::BindingContext &ctxt); - bool buildComponentFromRoot(QQmlScript::Object *obj, const QQmlCompilerTypes::BindingContext &); - bool completeComponentBuild(); - bool checkValidId(QQmlScript::Value *, const QString &); - - - void genObject(QQmlScript::Object *obj, bool parentToSuper = false); - void genObjectBody(QQmlScript::Object *obj); - void genValueTypeProperty(QQmlScript::Object *obj,QQmlScript::Property *); - void genComponent(QQmlScript::Object *obj); - void genValueProperty(QQmlScript::Property *prop, QQmlScript::Object *obj); - void genListProperty(QQmlScript::Property *prop, QQmlScript::Object *obj); - void genPropertyAssignment(QQmlScript::Property *prop, - QQmlScript::Object *obj, - QQmlScript::Property *valueTypeProperty = 0); - void genLiteralAssignment(QQmlScript::Property *prop, - QQmlScript::Value *value); - void genBindingAssignment(QQmlScript::Value *binding, - QQmlScript::Property *prop, - QQmlScript::Object *obj, - QQmlScript::Property *valueTypeProperty = 0); - int genContextCache(); - - QQmlPropertyData genValueTypeData(QQmlScript::Property *prop, - QQmlScript::Property *valueTypeProp); - - int componentTypeRef(); - int translationContextIndex(); - - QQmlType *toQmlType(QQmlScript::Object *from); - bool canCoerce(int to, QQmlScript::Object *from); - - QString elementName(QQmlScript::Object *); - - QStringList deferredProperties(QQmlScript::Object *); - - QQmlPropertyCache *propertyCacheForObject(QQmlScript::Object *); - QQmlPropertyData *property(QQmlScript::Object *, int); - QQmlPropertyData *property(QQmlScript::Object *, const QHashedStringRef &, - bool *notInRevision = 0); - QQmlPropertyData *signal(QQmlScript::Object *, const QHashedStringRef &, - bool *notInRevision = 0); - int indexOfProperty(QQmlScript::Object *, const QHashedStringRef &, bool *notInRevision = 0); - int indexOfProperty(QQmlScript::Object *, const QString &, bool *notInRevision = 0); - int indexOfSignal(QQmlScript::Object *, const QString &, bool *notInRevision = 0); - - void addId(const QString &, QQmlScript::Object *); - - void dumpStats(); - - void addBindingReference(QQmlCompilerTypes::JSBindingReference *); - - QQmlCompilerTypes::ComponentCompileState *compileState; - - QQmlPool *pool; - - QQmlCompilerTypes::ComponentCompileState *componentState(QQmlScript::Object *); - void saveComponentState(); - - QList<QQmlError> exceptions; - QQmlCompiledData *output; - QQmlEngine *engine; - QQmlEnginePrivate *enginePrivate; - QQmlScript::Object *unitRoot; - QQmlTypeData *unit; - int cachedComponentTypeRef; - int cachedTranslationContextIndex; - - QScopedPointer<IR::Module> jsModule; - - // Compiler component statistics. Only collected if QML_COMPILER_STATS=1 - struct ComponentStat - { - ComponentStat() : lineNumber(0), ids(0), objects(0) {} - - quint16 lineNumber; - - int ids; - QList<QQmlScript::LocationSpan> scriptBindings; - int objects; - }; - struct ComponentStats : public QQmlPool::Class - { - ComponentStat componentStat; - QList<ComponentStat> savedComponentStats; - }; - ComponentStats *componentStats; }; QT_END_NAMESPACE |