aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/compiler/qv4compileddata_p.h1
-rw-r--r--src/qml/compiler/qv4compiler.cpp2
-rw-r--r--src/qml/compiler/qv4isel_p.cpp2
-rw-r--r--src/qml/jsruntime/qv4debugging.cpp4
-rw-r--r--src/qml/jsruntime/qv4engine.cpp8
-rw-r--r--src/qml/jsruntime/qv4function_p.h3
6 files changed, 11 insertions, 9 deletions
diff --git a/src/qml/compiler/qv4compileddata_p.h b/src/qml/compiler/qv4compileddata_p.h
index b4dbee5164..ff3d3e8091 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 ca186e28f3..fcc6c19b02 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 8b49991577..a3e9e97461 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 1b182eac89..5965af8cfd 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 95f6def648..f346321b3b 100644
--- a/src/qml/jsruntime/qv4engine.cpp
+++ b/src/qml/jsruntime/qv4engine.cpp
@@ -625,7 +625,7 @@ QVector<ExecutionEngine::StackFrame> 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::StackFrame> 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 ced2bf5626..5f6ad65672 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<LineNumberMapping> 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; }