Improve debugging of QML expressions
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>
This commit is contained in:
parent
b7f6382b1e
commit
2c078cc291
|
@ -1226,7 +1226,7 @@ void JSCodeGen::beginObjectScope(QQmlPropertyCache *scopeObject)
|
|||
_scopeObject = scopeObject;
|
||||
}
|
||||
|
||||
QVector<int> JSCodeGen::generateJSCodeForFunctionsAndBindings(const QList<AST::Node*> &functions)
|
||||
QVector<int> JSCodeGen::generateJSCodeForFunctionsAndBindings(const QList<AST::Node*> &functions, const QHash<int, QString> &functionNames)
|
||||
{
|
||||
QVector<int> runtimeFunctionIndices(functions.size());
|
||||
|
||||
|
@ -1257,7 +1257,7 @@ QVector<int> JSCodeGen::generateJSCodeForFunctionsAndBindings(const QList<AST::N
|
|||
if (function)
|
||||
name = function->name.toString();
|
||||
else
|
||||
name = QStringLiteral("%qml-expression-entry");
|
||||
name = functionNames.value(i, QStringLiteral("%qml-expression-entry"));
|
||||
|
||||
AST::SourceElements *body;
|
||||
if (function)
|
||||
|
|
|
@ -362,7 +362,7 @@ struct Q_QML_EXPORT JSCodeGen : public QQmlJS::Codegen
|
|||
void beginObjectScope(QQmlPropertyCache *scopeObject);
|
||||
|
||||
// Returns mapping from input functions to index in V4IR::Module::functions / compiledData->runtimeFunctions
|
||||
QVector<int> generateJSCodeForFunctionsAndBindings(const QList<AST::Node*> &functions);
|
||||
QVector<int> generateJSCodeForFunctionsAndBindings(const QList<AST::Node*> &functions, const QHash<int, QString> &functionNames);
|
||||
|
||||
// Resolve QObject members with the help of QQmlEngine's meta type registry
|
||||
virtual V4IR::Expr *member(V4IR::Expr *base, const QString *name);
|
||||
|
|
|
@ -3632,6 +3632,8 @@ bool QQmlCompiler::completeComponentBuild()
|
|||
QQmlJS::Engine *jsEngine = parser.jsEngine();
|
||||
QQmlJS::MemoryPool *pool = jsEngine->pool();
|
||||
|
||||
QHash<int, QString> expressionNames;
|
||||
|
||||
for (JSBindingReference *b = compileState->bindings.first(); b; b = b->nextReference) {
|
||||
|
||||
JSBindingReference &binding = *b;
|
||||
|
@ -3648,6 +3650,7 @@ bool QQmlCompiler::completeComponentBuild()
|
|||
ComponentCompileState::PerObjectCompileData *cd = &compileState->jsCompileData[b->bindingContext.object];
|
||||
cd->functionsToCompile.append(node);
|
||||
binding.compiledIndex = cd->functionsToCompile.count() - 1;
|
||||
expressionNames.insert(binding.compiledIndex, binding.property->name().toString().prepend(QStringLiteral("expression for ")));
|
||||
|
||||
if (componentStats)
|
||||
componentStats->componentStat.scriptBindings.append(b->value->location);
|
||||
|
@ -3680,7 +3683,7 @@ bool QQmlCompiler::completeComponentBuild()
|
|||
|
||||
jsCodeGen.beginObjectScope(scopeObject->metatype);
|
||||
|
||||
cd->runtimeFunctionIndices = jsCodeGen.generateJSCodeForFunctionsAndBindings(cd->functionsToCompile);
|
||||
cd->runtimeFunctionIndices = jsCodeGen.generateJSCodeForFunctionsAndBindings(cd->functionsToCompile, expressionNames);
|
||||
|
||||
foreach (const QQmlCompilerTypes::ComponentCompileState::CompiledMetaMethod &cmm, cd->compiledMetaMethods) {
|
||||
typedef QQmlVMEMetaData VMD;
|
||||
|
|
|
@ -2359,7 +2359,8 @@ void QQmlTypeData::compile()
|
|||
// Compile JS binding expressions and signal handlers
|
||||
|
||||
JSCodeGen jsCodeGen(enginePrivate, finalUrlString(), parsedQML->code, &parsedQML->jsModule, &parsedQML->jsParserEngine, parsedQML->program, m_compiledData->importCache);
|
||||
const QVector<int> runtimeFunctionIndices = jsCodeGen.generateJSCodeForFunctionsAndBindings(parsedQML->functions);
|
||||
QHash<int, QString> expressionNames; // ### TODO
|
||||
const QVector<int> runtimeFunctionIndices = jsCodeGen.generateJSCodeForFunctionsAndBindings(parsedQML->functions, expressionNames);
|
||||
|
||||
QV4::ExecutionEngine *v4 = QV8Engine::getV4(m_typeLoader->engine());
|
||||
|
||||
|
|
Loading…
Reference in New Issue