aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qqmlcodegenerator_p.h
Commit message (Collapse)AuthorAgeFilesLines
* Cleanup, part 2Simon Hausmann2014-03-181-503/+0
| | | | | | | | | | | * QQmlCodeGenerator -> QQmlIR::IRBuilder (it doesn't generate code, it generates the Object/Property/Signal/etc. IR of the .qml file, that's going to get transformed to QV4::CompiledData::*) * ParsedQML -> QQmlIR::Document Change-Id: I329e858487b66e1ae528d44316761f5dd34b79f4 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Namespace cleanupSimon Hausmann2014-03-171-45/+22
| | | | | | | Move the QML IR types into the QmlIR namespace and clean them up. Change-Id: I2125449e5a519034e23670651efa620f405730b4 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Add support for resolving translation bindings at compile timeSimon Hausmann2014-03-111-1/+7
| | | | | | | | | | Simple calls to qsTr and qsTrId are detected at type compile time and reduced to a special Translation and TranslationById binding type, which avoids allocating a QML binding at type instantiation type just to perform a translation. Change-Id: I61e4f2db2a8092b5e6870e174b832d9c20cd62b5 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix property initialization order for mixed list and default ↵Simon Hausmann2014-03-041-0/+21
| | | | | | | | | | | | | | | | | | | | | | | | property setups Get a little closer to replicating the old compiler's behavior without introducing a new nested data structure for lists: * List property assignments should happen in declaration order for the items. Instead of doing magic in QmlObject::appendBinding, simply traverse the UiArrayBinding members in reverse order. Within a list, the items remain in order then, due to QmlObject::appendItem prepending. In the overall picture for the entire object, the reverse initialization order for properties is also preserved this way. * When an object has property bindings to the default property and also bindings to a named property that - after meta-object determination - turns out to be the default property, then we need to merge the bindings and preserve the declaration order. (tst_qqmlecmascript::defaultPropertyListOrder checks that) Fixes tst_qqmlenginedebugservice that expects bindings to an entire list to happen in reverse order (like other properties). Change-Id: I7408c97cdb971e06b1ee43a2a85f8cc6f008c444 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix tst_qqmlvaluetypesSimon Hausmann2014-03-031-1/+1
| | | | | | | | | | | | | | * Make sure to remove earlier set bindings for any value type property, not just scripts. We want font.bold: false to also override an earlier actual binding for example. * Propagate on assignments on qualified property names throughout the chain of bindings - that makes it easier to detect them early on. * The group property collection in the bindings validator should only include value bindings to group properties, not on assignments - as they can always appear in parallel. Change-Id: Ib7ec4de755a5a8d269324a77cba36eb945366274 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] CleanupSimon Hausmann2014-03-021-28/+0
| | | | | | | | Move SignalHandlerConverter into the type compiler and make it a proper compile pass sub-class. Change-Id: Ice8fc9acdfdb613e1d7b25728401a2376a692ccc Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix qquickvisualdatamodel testsSimon Hausmann2014-03-021-1/+2
| | | | | | | | | Allow for signal handlers to be installed on group property objects. We determine the property cache objects earlier correctly, so the empyt type name check is not necessary. Change-Id: Idc38fdc1a78c0f4d5147ec882e7872a62510e790 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Compile functions and bindings in appropriate scopesSimon Hausmann2014-03-021-9/+60
| | | | | | | This enables accelerated property access also for this code path. Change-Id: Iafb177b1fe7878e6c54cfb258f2e8d8ea32aa59e Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix memory leaksSimon Hausmann2014-03-021-3/+0
| | | | | | | | | | | In memory pool allocated classes we cannot have members that require a destructor to run to free memory. Therefore this patch removes the QSets in the object class used for duplicate property and signal name checking. The checking is instead done using linear search, which should be fine given that usually the number declared signals and newly declared properties is low per type. Change-Id: Id7a7a9bdd9e145975dcee4d5340489615f4f71e3 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix error reporting for group propertiesSimon Hausmann2014-03-021-4/+3
| | | | | | | | | | Report errors when setting group properties multiple times, or when assigning values to them. Some of this can be done right after parsing, some of it requires knowledge about the type of group property (QObject or value type) Change-Id: I1aa33e64a5f64dfa4f625469f5b6a84cd8dfb18d Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix error reporting when trying to set list properties ↵Simon Hausmann2014-03-021-0/+1
| | | | | | | multiple times Change-Id: Ifcbed45894b739a57873356e8963670084614880 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Ensure that qualified type names end in an id with an upper ↵Simon Hausmann2014-03-021-3/+3
| | | | | | | case letter Change-Id: I35166b86ddc7c2e87dc77b59f4d8272279ca5688 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Clean up our internal namespacesLars Knoll2014-02-231-54/+54
| | | | | | | | QQmlJS::MASM -> QV4::JIT QQmlJS::V4IR -> QV4::IR Change-Id: I707e8990459114a699c200fe3c22cec3c8df1afc Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* [new compiler] Fix binding initialization orderSimon Hausmann2014-02-041-0/+37
| | | | | | | | | | | | | | | | | Since commit 3d958cec8d53094a1bbab895377e451b07716e1f (loong time ago!) property bindings are stored in a linked list and newly encounted bindings at parse time are prepended to the list, causing the binding processing to happen in reverse order. There are however exception to the rule. For example list bindings are processed in declaration order and assignments to the default property are sorted by location in the file. In addition various tests rely on value properties being installed first, then followed by signal handlers and group/attached properties. Change-Id: I3bcae29faec5b2420fbba362cd81b8ba960ed19f Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Cleanup empty string handlingSimon Hausmann2014-02-041-4/+3
| | | | | | | | | Ensure that the empty string always has index 0, that simplifies the code in a few places and makes it easier to check for the empty string in other places where there's no access to the string pool itself. Change-Id: Icd204aec478e8350ef3fee75d89bda1f88cffe26 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix sanity checking of parameter names when connecting to C++ ↵Simon Hausmann2014-02-031-0/+1
| | | | | | | signals Change-Id: Ie2dc8689786a61fe5f38a0f91ff86f011e965b2d Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Don't allow setting the id property multiple timesSimon Hausmann2014-02-031-2/+2
| | | | | Change-Id: Ic7f1938dd048db6c6975d78ad4f69d3c646cece5 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix error messages for binding vs. property declarationsSimon Hausmann2014-02-031-7/+6
| | | | | | | | Separate binding errors from property declaration errors - they were accidentally mixed up. Change-Id: Id2d5134dc98ee3e1d7ce0c3d356f165e144e0d82 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] CleanupsSimon Hausmann2014-02-031-27/+46
| | | | | | | | | | | When creating the initial object tree from the AST, encapsulate the declarations and bindings in the QmlObject class, in order to centralize the redirection via declarationsOverride as well as the error handling. This also replaces the hashes to detect duplicate properties/signals from being QString based to simply use the existing string indices from the compilation unit. Change-Id: Ia6ceae56977a98b5c5a7a738bf983a731e608d46 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix signal handlers that are fuzzily matchedSimon Hausmann2014-02-031-2/+2
| | | | | | | | Use the same logic at object creation time as during the signal handler conversion phase. Change-Id: Idb48a3849da7b6543ec50c15e1ccbf2939c3ee39 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix property declarations inside group propertiesSimon Hausmann2014-02-031-3/+9
| | | | | | | | Property declarations inside group properties as well as their initializers go into into the surrounding object. Change-Id: I5b2b0f7bc41daea1275eb17ed04560e17052ca42 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix location of errors in group property objectsSimon Hausmann2014-02-031-2/+2
| | | | | Change-Id: I63aa43ec7d9e90c1593c54dfc44890330c8669ae Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Report errors when trying to bind to read-only propertiesSimon Hausmann2014-01-281-0/+1
| | | | | | | | | | | The only exception are initializers for read-only property declarations. Also adjusted the error location of one test to point to the correct value location as opposed to the property location, as with all the other similar errors. Change-Id: I2333d3c485fc374b1b39a5f5a4408af5cf08a20f Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix support for namespaces in attached propertiesSimon Hausmann2014-01-271-1/+1
| | | | | | | | | | | | | When doing import QtQml 2.0 as MyQml with MyQml.Component.onComplete: ... We now store "MyQml.Component" as one string as the type name, in order to get resolved correctly. Change-Id: I11a6def88bcb8b98b5fa9548053e27fb58170e62 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix duplicate property/signal name detection for group objectsSimon Hausmann2014-01-201-2/+4
| | | | | | | | | | | | | | | For a rectangle like this: color: "blue" border.color: "red" we must not issue a duplicate property error for "color" because they are in different objects. This patch fixes that by moving the sets for checking the presence of these into the object itself, so that the qSwap on _object also transitions to the correct property/signal name set. Change-Id: I9ac0e5877eb9f60b618b031f99290707de28112d Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Add support for QML list modelsSimon Hausmann2014-01-201-1/+2
| | | | | | | | | | | | | List model definitions make heavy use of custom parsers, which requires AST access as well as a general port to the new QQmlCustomParser API. Additional fixes in the custom parser support were needed to pass all tests: * Fix support for AcceptsSignalHandlers and AcceptsAttachedProperties * Don't call setCustomData unless the compiler generated data earlier Change-Id: Ic42f8a890391267c94f63d35f055b60fdbf3c83d Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Add support for value interceptors / on-assignmentsSimon Hausmann2014-01-171-3/+3
| | | | | | | | | | | | | | Behavior on x { NumberAnimation { ... } } is implemented by assigning a value interceptor (Behavior is a sub-class of that) to the x property in a special way. That requires various things: * A VME meta-object must be created and installed on the surrounding object, in order for the interceptors to work * On assignments need to be excluded from duplicate property assignment checks * Behaviours require also finalization callbacks on component creation Change-Id: I40250b71081a2e315cda3bdb6677fa4b227fa443 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Add support for implicitly defined componentsSimon Hausmann2014-01-101-1/+3
| | | | | | | | | | | | | | | Use-cases like itemDelegate: Item { ... } implicitly define a component without the item-surrounding Component {}, base on the fact that the property itself is of type QQmlComponent (or derived). This means we have to synthesize a Component {} object and insert it into the data structure. Change-Id: I8992451a5a6732c7fd898eaf83c276dc6a8b7d19 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Fix signal handlers for properties declared in the same objectSimon Hausmann2014-01-081-0/+2
| | | | | | | | | | | | We need to generate the property caches before we can try converting the signal handler expressions in the AST to function declarations, as that conversion requires looking up the signal signature / meta-data from the property cache. This in turn requires rewriting the property cache generator code to operate on the data structure we have before creating the QV4::CompiledData. Change-Id: I0d1c59d947f36171b4eb89f47a2e1ff1bc493c6f Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Clean up handling of illegal names and enable in new compilerSimon Hausmann2014-01-061-1/+3
| | | | | | | | | | Access to the identifier hash may not be thread-safe from the loader thread, so use a QSet copy instead (which is cheap because we don't detach). This also enables the checking for illegal types again. Change-Id: I8c3ec1fd0fc01cce3269e206f479a90bdbbc89dd Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Fix broken Maroon game / regression in PropertyChanges {} elementSimon Hausmann2013-12-101-3/+18
| | | | | | | | | | | | | | | | | | | | | | Commit 0aadcf8077840068eb182269e9ed9c31ad12f45e that pre-compiles the expressions in PropertyChanges {} introduced a regression in where the evaluation context was incorrect and thus bindings would not be able to access the correct properties. For example PropertyChanges { target: someObject y: height / 2 } Here height should be looked up in the context of "someObject", not of the PropertyChanges element. This patch introduces an auto-test that verifies that the lookup context is correct and fixes the bug by disabling accelerated compile time property lookups for binding expressions that are requested from a custom parser. Change-Id: I5cb607d07211b453ddfc9928ccbf5f9ecec85575 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Remove unused memberLars Knoll2013-12-041-2/+1
| | | | | Change-Id: I9926f1ab10ea04387f17794944dcc11f4a2a9054 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Merge branch 'release' of ssh://codereview.qt-project.org/qt/qtdeclarative ↵Simon Hausmann2013-11-261-0/+2
|\ | | | | | | | | | | into stable Change-Id: I0bf06be69927d5961f1bdb4948c3572ef6111923
| * Fix memory corruption in QML expression compilationSimon Hausmann2013-11-251-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We store QQmlPropertyData pointers in our IR for Qt meta-object property resolution at compile time. As it turns out however, it is possible that these pointers change after retrieval from the QQmlPropertyCache, as the cache may change later in the compilation process. Therefore we must do what also QQmlCompiler does by storing a copy of the QQmlPropertyData. For the JS IR we can do that conveniently through the IR memory pool. A side-effect of this bug was that QQmlPropertyData pointers were re-used and so the identity check in the isel later such as _function->contextObjectDependencies.contains(m->property) for dependency tracking failed. In the example given in the bug report it was determined that the window.contentWidth property wouldn't need a property capture, and therefore the binding was not re-evaluated as window.contentWidth later in the binding evaluation phase received its correct value. This patch also fixes the incorrect debug output names assigned to JS binding expressions, where the index used to look up the name is per compiled object, not per QML component. Task-number: QTBUG-35063 Change-Id: I3e5bbfaac11e5c122a2ed15a3e486a93988e1b6e Reviewed-by: J-P Nurmi <jpnurmi@digia.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | IR Cleanup, resolve ID objects through array subscriptsSimon Hausmann2013-11-251-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | ...instead of a special MEMBER type. This allows removing the type member from V4IR::Member altogether (and thus unshadow from V4IR::Expr::type). By not requiring the base of a id lookup member expression to be a NAME, we can also speed up repeated id lookups by fetching the id object array wrapper only once per function. Change-Id: I3e9b8f498d32ace4a0cc2254f49e02ecc124f79c Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Speed up repeated context, scope and import script lookupsSimon Hausmann2013-11-251-0/+5
| | | | | | | | | | | | | | | | | | Instead of querying for the context, scope or imported scripts object on each access, do it once at the beginning of the expression in the IR and re-use the temp. The optimizer will optimize away unused temps. Change-Id: I703e737469030c4454d23c567873012a2b537d71 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Improve type interference for QObject propertiesSimon Hausmann2013-11-251-3/+0
|/ | | | | | | | | | | | | | | | | | | | | | | | Propagate QObject properties in member expressions across temporaries as part of the type interference SSA pass. This replaces the earlier attempt to resolving QObject properties in fieldMemberExpression() in the codegen, but it was incomplete and now things like the following are fully resolved: var tmp = blah.somePropertyThatReturnsAQQuickItem; <-- QQuickItem property return type propagated into tmp var width = tmp.width; <-- and picked up here again to resolve the index of width instead of by name With this patch Temp gets a helper structure with a function pointer, initialized to aid the resolution of properties in Qt meta objects. This structure is propagated into the temps until it reaches the next member expression that uses the temp. Similarly QObjectType is added as IR type, next to VarType. The resolution inside the SSA type interference pass also requires passing through the QQmlEngine from the upper caller levels, in order to resolve the property type to a potential QMetaObject property. Change-Id: I14c98fa455db57603da46613ce49c174d0944291 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Improve debugging of QML expressionsSimon Hausmann2013-11-011-1/+1
| | | | | | | | Add the name of the property to the generated IR function ("expression for x") to make it easier to debug. Change-Id: If35f42764774e6d7f40d3bf080e1fbdb12321ed5 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Resolve member expressions of QObject membersSimon Hausmann2013-10-311-1/+6
| | | | | | | | | | | | ...when the base is a QObject property itself or an ID referenced object. This patch resolves for example the width property in a parent.width expression to be a per-index lookup at run-time. That requires the base ("parent") however to be a final property or come from an object where expected revision is known, i.e. a QML imported object (scope or context). Change-Id: Iaa1f57ace452da5e059c1d4e63b52b316e1a6b08 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Initial support for resolving meta-property access for the scope and context ↵Simon Hausmann2013-10-311-4/+12
| | | | | | | | | | | | | | | | | 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>
* Cleanup QML specific JS code generatorSimon Hausmann2013-10-291-7/+7
| | | | | | | | Move parameters global to the entire QML file to the constructor, pass component/context specific parameters to the generate function. Change-Id: I6c3ab41b3bab19b066bbe20f971c5cafaeb70b98 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Speed up id object lookupsSimon Hausmann2013-10-291-13/+13
| | | | | | | | | | | | | | | | | We can resolve lookups for objects referenced by id at QML compile time and use a run-time helper to extract the id object out of the QML context data by index instead of name. Dependencies to id objects are also tracked at compile time and registered separately before entering the generated function code. The lookup of id objects is encoded in the IR as special member lookups. Members will also then in the future be used to for property lookups in context and scope properties, as well as any other property lookups in QObjects where we can determine the meta-object. Change-Id: I36cf3ceb11b51a983da6cad5b61c3bf574acc20a Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* V4 debugger: retrieve formals and locals.Erik Verbruggen2013-10-241-2/+3
| | | | | Change-Id: I47507a4d7d1b429b9c43ed3a7822079efe577327 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Add support CompositeSingleton to the new V4 compiler.v5.2.0-beta1Antti Piira2013-10-211-0/+12
| | | | | | | | | | | | | | | | | Implements QQmlCodeGenerator::visit(AST::UiPragma *) to process any pragma statements in a QML file for the new V4 compiler approach. Only pragma Singleton is supported, others will generate errors. Also adds necessary hooks to treat types as Singletons. Basic functionality is working, but three of the QML Singleton unit tests fail. Some of them are dependent on other language capabilities that seem to have problems. In addition removes unnecessary toString() call in the equivalent visit(AST::UiPragma *) function of the old parser. Change-Id: Iec9fa887f953b80b7f9a11878d846637a8f519ef Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Compile binding expressions in the QQmlCompilerSimon Hausmann2013-10-111-5/+7
| | | | | | | | | | | | | | | | | | | | | | | | This is done by re-using the JS code generator from the new compiler. A few bugs were fixed on the way: * The index into the compiledData->runtimeFunctions array is not the same as the function index when they are collected (from the AST), as for example binding expressions may create extra V4IR::Function objects that break the 1:1 mapping. Therefore the JS code gen will return a mapping from incoming function index to V4IR::Module::Function (and thus runtimeFunction) * Binding expressions in the old backend get usually unpacked from their ExpressionStatement node. The reference to that node is lost, and instead of trying to preserve it, we simply synthesize it again. This won't be necessary anymore with the new compiler in the future. * Commit 1c29d63d6045cf9d58cbc0f850de8fa50bf75d09 ensured to always look up locals by name, and so we have to do the same when initializing the closures of nested functions inside binding expressions (in qv4codegen.cpp) * Had to change the Qml debugger service auto-test, which does toString() on a function that is now compiled. Even if we implemented FunctionPrototype::toString() to do what v8 does by extracting the string from the file, it wouldn't help in this test, because it feeds the input from a string instead of a file. * In tst_parserstress we now end up compiling all JS code, which previously was only parsed. This triggers some bugs in the SSA handling. Those tests are skipped and tracked in QTBUG-34047 Change-Id: I44df51085510da0fd3d99eb5f1c7d4d17bcffdcf Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Fix determination of lookup mode in V4 code generatorSimon Hausmann2013-10-111-2/+2
| | | | | | | | | | | | | | | | | | In order to determine the type of lookup we need (name or directly in environment members), we used Codegen::_mode, which is set to the currently suitable mode depending on the function (parameter to defineFunction). However that's not quite correct, the look-up mode depends on the function itself, not where it was called from. This patch corrects that by moving the compilation mode into the Environment itself. This is needed by follow-up patches. Additionally the "bool deletable" parameter to the builtin_declare_vars was always set to false, because it used mode instead of _mode, which was never set to Eval or QmlBinding. This will be cleaned up in a future patch. Change-Id: I878f187945e5de091689ab5d70a0f33eb5a9e38f Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Fix invalid alias error reporting in new compilerSimon Hausmann2013-09-301-0/+2
| | | | | | | | Match exactly the VME code path by reporting the right type of error as well as the right hand side of the alias binding if necessary. Change-Id: I35d192a20641e0acbf25d20f3dc5fb53cc7cbae5 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Add Singleton support for QMLAntti Piira2013-09-211-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This introduces Singleton support for QML (Composite Singleton). For now, the Singleton support is only availabe for QML types in modules or (remote and local) directories with qmldir file. However, in the future this support may be expanded to arbitrary QML file imports without by leaving out the qmldir requirement. You define a QML type as a Singleton with the following two steps: 1. By adding a pragma Singleton to a type's QML file: pragma Singleton The pragma and import statements can be mixed and their order does not matter. Singleton is the only supported pragma for now. Others will generate errors. 2. By specifying a qmldir file for the directory of your imported type and prepending the type with "singleton" keyword as follows: singleton TestTypeSingleton TestTypeSingleton.qml Alternatively you may specify a qmldir file for a module and specify your type as a singleton as follows: singleton TestTypeSingleton 1.0 TestTypeSingleton.qml Composite Singletons may be included in a module and may be used with a local namespace qualifier when imported with: "import xxx as NameSpace" A singleton instance is created at first use and stored into the QmlEngine (one instance per engine) and eventually released by the engine's destructor. CompositeSingletonType has a dual nature and will return true to both isComposite() and isSingleton() calls. In most cases its enough to check for just isComposite() or isSingleton(). However, there is a isCompositeSingleton() available as well. I used "qlalr --no-debug --no-lines --qt qqmljs.g" to generate the qqmljsparser and qqmljsgrammar files from qqmljs.g. Unit tests are included. Change-Id: I91b303612c5e132143b325b9a8f982e9355bc90e Reviewed-by: Alan Alpert (Personal) <416365416c@gmail.com>
* [new compiler] Initial support for alias propertiesSimon Hausmann2013-09-201-1/+2
| | | | | | | | | Aliases are resolved at "compile time", not rough JS expressions. This is done right after we determined the scope of components in the QML file, which is also where we collect object ids (that aliases use). Change-Id: If5702337f2cca08d17f196c3b2fde3bbdfea5b3c Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* [new compiler] Initial support for componentsSimon Hausmann2013-09-201-0/+1
| | | | | | | | | We use a dedicated pass through the objects in QV4::CompiledData::QmlUnit to determine which objects are QQmlComponents. We remember their object indices as well as to which component other objects belong to (if any). Change-Id: I97929c57e2ccb2fd380d612002d128359c4bc253 Reviewed-by: Lars Knoll <lars.knoll@digia.com>