Merge Function::init with the constructor
authorSimon Hausmann <simon.hausmann@digia.com>
Fri, 16 Aug 2013 19:31:24 +0000 (21:31 +0200)
committerLars Knoll <lars.knoll@digia.com>
Fri, 16 Aug 2013 19:39:51 +0000 (21:39 +0200)
Change-Id: I557f8a80aa2c74398b94e87ed0f29fe8d2297150
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/qml/compiler/qv4compileddata.cpp
src/qml/compiler/qv4isel_masm.cpp
src/qml/compiler/qv4isel_moth.cpp
src/qml/jsruntime/qv4function.cpp
src/qml/jsruntime/qv4function_p.h

index e0a3cbc..7f02509 100644 (file)
@@ -80,10 +80,6 @@ QV4::Function *CompilationUnit::linkToEngine(ExecutionEngine *engine)
     for (int i = 0; i < data->stringTableSize; ++i)
         runtimeStrings[i] = engine->newIdentifier(data->stringAt(i)->qString());
 
-    runtimeFunctions.resize(data->functionTableSize);
-    for (int i = 0; i < data->functionTableSize; ++i)
-        runtimeFunctions[i] = new QV4::Function(engine, runtimeStrings[data->functionAt(i)->nameIndex]);
-
     runtimeRegularExpressions = new QV4::Value[data->regexpTableSize];
     for (int i = 0; i < data->regexpTableSize; ++i) {
         const CompiledData::RegExp *re = data->regexpAt(i);
index c564c3d..1210e38 100644 (file)
@@ -75,13 +75,15 @@ QV4::Function *CompilationUnit::linkBackendToEngine(ExecutionEngine *engine)
 
     const CompiledData::Function *compiledRootFunction = data->functionAt(data->indexOfRootFunction);
 
+    runtimeFunctions.resize(data->functionTableSize);
+
     for (int i = 0 ;i < runtimeFunctions.size(); ++i) {
-        QV4::Function *runtimeFunction = runtimeFunctions.at(i);
         const CompiledData::Function *compiledFunction = data->functionAt(i);
 
-        runtimeFunction->init(this, compiledFunction,
-                              (Value (*)(QV4::ExecutionContext *, const uchar *)) codeRefs[i].code().executableAddress(),
-                              codeRefs[i].size());
+        QV4::Function *runtimeFunction = new QV4::Function(engine, this, compiledFunction,
+                                                           (Value (*)(QV4::ExecutionContext *, const uchar *)) codeRefs[i].code().executableAddress(),
+                                                           codeRefs[i].size());
+        runtimeFunctions[i] = runtimeFunction;
 
         if (compiledFunction == compiledRootFunction) {
             assert(!rootRuntimeFunction);
index 3622f2a..c1d926c 100644 (file)
@@ -1088,14 +1088,15 @@ QV4::Function *CompilationUnit::linkBackendToEngine(QV4::ExecutionEngine *engine
 
     const QV4::CompiledData::Function *compiledRootFunction = data->functionAt(data->indexOfRootFunction);
 
+    runtimeFunctions.resize(data->functionTableSize);
+
     for (int i = 0 ;i < runtimeFunctions.size(); ++i) {
-        QV4::Function *runtimeFunction = runtimeFunctions.at(i);
         const QV4::CompiledData::Function *compiledFunction = data->functionAt(i);
 
-        runtimeFunction->init(this, compiledFunction,
-                              &VME::exec, /*size - doesn't matter for moth*/0);
-
+        QV4::Function *runtimeFunction = new QV4::Function(engine, this, compiledFunction,
+                                                           &VME::exec, /*size - doesn't matter for moth*/0);
         runtimeFunction->codeData = reinterpret_cast<const uchar *>(codeRefs.at(i).constData());
+        runtimeFunctions[i] = runtimeFunction;
 
         if (QV4::Debugging::Debugger *debugger = engine->debugger)
             debugger->setPendingBreakpoints(runtimeFunction);
index 87db585..e357508 100644 (file)
@@ -51,17 +51,22 @@ QT_BEGIN_NAMESPACE
 
 using namespace QV4;
 
-Function::~Function()
-{
-}
-
-void Function::init(CompiledData::CompilationUnit *unit, const CompiledData::Function *function, Value (*codePtr)(ExecutionContext *, const uchar *),
-                    quint32 _codeSize)
+Function::Function(ExecutionEngine *engine, CompiledData::CompilationUnit *unit, const CompiledData::Function *function,
+                   Value (*codePtr)(ExecutionContext *, const uchar *), quint32 _codeSize)
+        : name(0)
+        , compiledFunction(0)
+        , compilationUnit(0)
+        , code(0)
+        , codeData(0)
+        , codeSize(0)
+        , engine(engine)
 {
     Q_ASSERT(!compilationUnit);
     compilationUnit = unit;
     compiledFunction = function;
 
+    name = compilationUnit->runtimeStrings[compiledFunction->nameIndex];
+
     code = codePtr;
     codeSize = _codeSize;
 
@@ -77,6 +82,11 @@ void Function::init(CompiledData::CompilationUnit *unit, const CompiledData::Fun
         locals[i] = engine->newString(unit->data->stringAt(localsIndices[i])->qString());
 }
 
+Function::~Function()
+{
+}
+
+
 void Function::mark()
 {
     if (name)
index d9ba9dc..d197098 100644 (file)
@@ -100,21 +100,10 @@ struct Function {
 
     ExecutionEngine *engine;
 
-    Function(ExecutionEngine *engine, String *name)
-        : name(name)
-        , compiledFunction(0)
-        , compilationUnit(0)
-        , code(0)
-        , codeData(0)
-        , codeSize(0)
-        , engine(engine)
-    {}
+    Function(ExecutionEngine *engine, CompiledData::CompilationUnit *unit, const CompiledData::Function *function,
+             Value (*codePtr)(ExecutionContext *, const uchar *), quint32 _codeSize);
     ~Function();
 
-    // ### Merge with constructor later.
-    void init(CompiledData::CompilationUnit *unit, const CompiledData::Function *function,
-              Value (*codePtr)(ExecutionContext *, const uchar *), quint32 _codeSize);
-
     inline QString sourceFile() const { return compilationUnit->fileName(); }
 
     inline bool usesArgumentsObject() const { return compiledFunction->flags & CompiledData::Function::UsesArgumentsObject; }