aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlcompiler_p.h
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2014-03-06 16:55:09 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-07 15:33:19 +0100
commit99efe4309379482fce5c231885883e359bf85290 (patch)
treedbb9333a547fa1939bd63bd64136611e9fe82968 /src/qml/qml/qqmlcompiler_p.h
parent9fc17c08e5635cf112c6194e6c24af2a9c7caf00 (diff)
Remove old compiler and VME
This removes the bulk of the code. A few smaller cleanups remain, to be done in smaller changes as they move code around. Additionally the "optimize" option of qqmlbundle was removed. It called QQmlScript::Parser::preparseData, which however was not implemented and always returned an empty QByteArray. Therefore "optimize" would not do anything and the class is gone now :) Change-Id: I0c265e756704cb53c5250be1f69e4a3e1b6e64d5 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/qml/qqmlcompiler_p.h')
-rw-r--r--src/qml/qml/qqmlcompiler_p.h348
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