aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qv4instr_moth_p.h
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2013-10-24 14:51:02 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-31 10:50:38 +0100
commit34c85bb56c92316a6ce1c79d25f9653fec14791c (patch)
tree6d3d43de33fa53a1353c52506e989ae126f1361b /src/qml/compiler/qv4instr_moth_p.h
parentbb7d26ebb0c2e7a9f06a030be8bfcd00e346e06f (diff)
Initial support for resolving meta-property access for the scope and context objects at QML compile time
This avoids having to do a string lookup for ids and in the import cache at run-time, before we can do a string hash lookup in the property cache. Instead we resolve final properties in the context and scope object at compile time and look them up at run-time using their index instead. The dependencies to these properties are also tracked separately and recorded in the compiled data. This is merely the initial patch. There's a lot left to do, such as having specialized getter and setters for specific property types. Setters are missing altogether right now and will fall back to name lookup. Change-Id: If3cb4e7c9454ef4850a615f0935b311c9395b165 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/compiler/qv4instr_moth_p.h')
-rw-r--r--src/qml/compiler/qv4instr_moth_p.h26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/qml/compiler/qv4instr_moth_p.h b/src/qml/compiler/qv4instr_moth_p.h
index 6734d93ae0..d1619962f5 100644
--- a/src/qml/compiler/qv4instr_moth_p.h
+++ b/src/qml/compiler/qv4instr_moth_p.h
@@ -65,6 +65,7 @@ QT_BEGIN_NAMESPACE
F(GetLookup, getLookup) \
F(StoreProperty, storeProperty) \
F(SetLookup, setLookup) \
+ F(LoadQObjectProperty, loadQObjectProperty) \
F(Push, push) \
F(CallValue, callValue) \
F(CallProperty, callProperty) \
@@ -122,7 +123,9 @@ QT_BEGIN_NAMESPACE
F(MulNumberParams, mulNumberParams) \
F(SubNumberParams, subNumberParams) \
F(LoadThis, loadThis) \
- F(LoadIdObject, loadIdObject)
+ F(LoadQmlIdObject, loadQmlIdObject) \
+ F(LoadQmlContextObject, loadQmlContextObject) \
+ F(LoadQmlScopeObject, loadQmlScopeObject)
#if defined(Q_CC_GNU) && (!defined(Q_CC_INTEL) || __INTEL_COMPILER >= 1200)
# define MOTH_THREADED_INTERPRETER
@@ -275,6 +278,12 @@ union Instr
Param base;
Param result;
};
+ struct instr_loadQObjectProperty {
+ MOTH_INSTR_HEADER
+ int propertyIndex;
+ Param base;
+ Param result;
+ };
struct instr_storeProperty {
MOTH_INSTR_HEADER
int name;
@@ -623,11 +632,19 @@ union Instr
MOTH_INSTR_HEADER
Param result;
};
- struct instr_loadIdObject {
+ struct instr_loadQmlIdObject {
MOTH_INSTR_HEADER
Param result;
int id;
};
+ struct instr_loadQmlContextObject {
+ MOTH_INSTR_HEADER
+ Param result;
+ };
+ struct instr_loadQmlScopeObject {
+ MOTH_INSTR_HEADER
+ Param result;
+ };
instr_common common;
instr_ret ret;
@@ -643,6 +660,7 @@ union Instr
instr_storeElement storeElement;
instr_loadProperty loadProperty;
instr_getLookup getLookup;
+ instr_loadQObjectProperty loadQObjectProperty;
instr_storeProperty storeProperty;
instr_setLookup setLookup;
instr_push push;
@@ -702,7 +720,9 @@ union Instr
instr_mulNumberParams mulNumberParams;
instr_subNumberParams subNumberParams;
instr_loadThis loadThis;
- instr_loadIdObject loadIdObject;
+ instr_loadQmlIdObject loadQmlIdObject;
+ instr_loadQmlContextObject loadQmlContextObject;
+ instr_loadQmlScopeObject loadQmlScopeObject;
static int size(Type type);
};