From 3e49617bc6dddcc7a053d0ec643c8994d84a8c5e Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Wed, 14 Aug 2013 16:02:56 +0200 Subject: [PATCH] Move QV4::Function::sourceFile to CompiledFunction Change-Id: Iacf907c475070bab4a5a1583280f110c089141c4 Reviewed-by: Lars Knoll --- src/qml/compiler/qv4compileddata_p.h | 1 + src/qml/compiler/qv4compiler.cpp | 2 ++ src/qml/compiler/qv4isel_p.cpp | 2 -- src/qml/jsruntime/qv4debugging.cpp | 4 ++-- src/qml/jsruntime/qv4engine.cpp | 8 ++++---- src/qml/jsruntime/qv4function_p.h | 3 ++- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/qml/compiler/qv4compileddata_p.h b/src/qml/compiler/qv4compileddata_p.h index b4dbee5..ff3d3e8 100644 --- a/src/qml/compiler/qv4compileddata_p.h +++ b/src/qml/compiler/qv4compileddata_p.h @@ -109,6 +109,7 @@ struct Function QV4::Value (*code)(ExecutionContext *, const uchar *); quint32 nameIndex; + quint32 sourceFileIndex; qint64 flags; quint32 nFormals; quint32 formalsOffset; diff --git a/src/qml/compiler/qv4compiler.cpp b/src/qml/compiler/qv4compiler.cpp index ca186e2..fcc6c19 100644 --- a/src/qml/compiler/qv4compiler.cpp +++ b/src/qml/compiler/qv4compiler.cpp @@ -71,6 +71,7 @@ QV4::CompiledData::Unit *QV4::Compiler::JSUnitGenerator::generateUnit() { foreach (QQmlJS::V4IR::Function *f, irModule->functions) { registerString(*f->name); + registerString(f->sourceFile); for (int i = 0; i < f->formals.size(); ++i) registerString(*f->formals.at(i)); for (int i = 0; i < f->locals.size(); ++i) @@ -143,6 +144,7 @@ void QV4::Compiler::JSUnitGenerator::writeFunction(char *f, QQmlJS::V4IR::Functi { QV4::CompiledData::Function *function = (QV4::CompiledData::Function *)f; function->nameIndex = getStringId(*irFunction->name); + function->sourceFileIndex = getStringId(irFunction->sourceFile); function->flags = 0; if (irFunction->hasDirectEval) function->flags |= CompiledData::Function::HasDirectEval; diff --git a/src/qml/compiler/qv4isel_p.cpp b/src/qml/compiler/qv4isel_p.cpp index 8b49991..a3e9e97 100644 --- a/src/qml/compiler/qv4isel_p.cpp +++ b/src/qml/compiler/qv4isel_p.cpp @@ -84,8 +84,6 @@ QV4::Function *EvalInstructionSelection::createFunctionMapping(QV4::Function *ou QV4::Function *vmFunction = _engine->newFunction(irFunction->name ? *irFunction->name : QString()); _irToVM.insert(irFunction, vmFunction); - vmFunction->sourceFile = irFunction->sourceFile; - if (outer) outer->addNestedFunction(vmFunction); diff --git a/src/qml/jsruntime/qv4debugging.cpp b/src/qml/jsruntime/qv4debugging.cpp index 1b182ea..5965af8 100644 --- a/src/qml/jsruntime/qv4debugging.cpp +++ b/src/qml/jsruntime/qv4debugging.cpp @@ -130,7 +130,7 @@ Debugger::ExecutionState Debugger::currentExecutionState(const uchar *code) cons } state.function = function; - state.fileName = function->sourceFile; + state.fileName = function->sourceFile(); qptrdiff relativeProgramCounter = code - function->codeData; state.lineNumber = function->lineNumberForProgramCounter(relativeProgramCounter); @@ -343,7 +343,7 @@ bool Debugger::BreakPoints::contains(const QString &fileName, int lineNumber) co void Debugger::BreakPoints::applyToFunction(Function *function, bool removeBreakPoints) { - Iterator breakPointsForFile = find(function->sourceFile); + Iterator breakPointsForFile = find(function->sourceFile()); if (breakPointsForFile == end()) return; diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index 95f6def..f346321 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -625,7 +625,7 @@ QVector ExecutionEngine::stackTrace(int frameLimit) if (CallContext *callCtx = c->asCallContext()) { StackFrame frame; if (callCtx->function->function) - frame.source = callCtx->function->function->sourceFile; + frame.source = callCtx->function->function->sourceFile(); frame.function = callCtx->function->name->toQString(); frame.line = -1; frame.column = -1; @@ -641,7 +641,7 @@ QVector ExecutionEngine::stackTrace(int frameLimit) if (frameLimit && globalCode) { StackFrame frame; - frame.source = globalCode->sourceFile; + frame.source = globalCode->sourceFile(); frame.function = globalCode->name->toQString(); frame.line = -1; frame.column = -1; @@ -677,14 +677,14 @@ QUrl ExecutionEngine::resolvedUrl(const QString &file) while (c) { if (CallContext *callCtx = c->asCallContext()) { if (callCtx->function->function) - base.setUrl(callCtx->function->function->sourceFile); + base.setUrl(callCtx->function->function->sourceFile()); break; } c = c->parent; } if (base.isEmpty() && globalCode) - base.setUrl(globalCode->sourceFile); + base.setUrl(globalCode->sourceFile()); if (base.isEmpty()) return src; diff --git a/src/qml/jsruntime/qv4function_p.h b/src/qml/jsruntime/qv4function_p.h index ced2bf5..5f6ad65 100644 --- a/src/qml/jsruntime/qv4function_p.h +++ b/src/qml/jsruntime/qv4function_p.h @@ -106,7 +106,6 @@ struct Function { Lookup *lookups; - QString sourceFile; QVector lineNumberMappings; ExecutionEngine *engine; @@ -133,6 +132,8 @@ struct Function { nestedFunctions.append(f); } + inline QString sourceFile() const { return compilationUnit->data->stringAt(compiledFunction->sourceFileIndex)->qString(); } + inline bool usesArgumentsObject() const { return compiledFunction->flags & CompiledData::Function::UsesArgumentsObject; } inline bool isStrict() const { return compiledFunction->flags & CompiledData::Function::IsStrict; } inline bool isNamedExpression() const { return compiledFunction->flags & CompiledData::Function::IsNamedExpression; } -- 2.7.4