Move QV4::Function::sourceFile to CompiledFunction
authorSimon Hausmann <simon.hausmann@digia.com>
Wed, 14 Aug 2013 14:02:56 +0000 (16:02 +0200)
committerSimon Hausmann <simon.hausmann@digia.com>
Thu, 15 Aug 2013 07:11:36 +0000 (09:11 +0200)
Change-Id: Iacf907c475070bab4a5a1583280f110c089141c4
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/qml/compiler/qv4compileddata_p.h
src/qml/compiler/qv4compiler.cpp
src/qml/compiler/qv4isel_p.cpp
src/qml/jsruntime/qv4debugging.cpp
src/qml/jsruntime/qv4engine.cpp
src/qml/jsruntime/qv4function_p.h

index b4dbee5..ff3d3e8 100644 (file)
@@ -109,6 +109,7 @@ struct Function
 
     QV4::Value (*code)(ExecutionContext *, const uchar *);
     quint32 nameIndex;
+    quint32 sourceFileIndex;
     qint64 flags;
     quint32 nFormals;
     quint32 formalsOffset;
index ca186e2..fcc6c19 100644 (file)
@@ -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;
index 8b49991..a3e9e97 100644 (file)
@@ -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);
 
index 1b182ea..5965af8 100644 (file)
@@ -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;
 
index 95f6def..f346321 100644 (file)
@@ -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;
index ced2bf5..5f6ad65 100644 (file)
@@ -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; }