From 34c85bb56c92316a6ce1c79d25f9653fec14791c Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Thu, 24 Oct 2013 14:51:02 +0200 Subject: 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 --- src/qml/compiler/qv4instr_moth_p.h | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'src/qml/compiler/qv4instr_moth_p.h') 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); }; -- cgit v1.2.3