aboutsummaryrefslogtreecommitdiffstats
path: root/qv4ir.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2012-12-04 13:40:18 +0100
committerLars Knoll <lars.knoll@digia.com>2012-12-08 04:47:53 +0100
commit5f22fbd7fc4ca6a7f4629cbd34e0fc2e3c1b1cee (patch)
tree31a606540d68674315fbc2c71c76592be2ae3dc8 /qv4ir.cpp
parent3b3f3bebcd24073455de9f4abf2f0c7712a1c1ee (diff)
Add a MemoryManager, which does GC for the interpreter.
Todo: - stack walking for MASM - fix all TODOs/FIXMEs and hidden treasures (bugs). Change-Id: I36f8cdc3a545df7287ce1df17b3570a9c017865e Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'qv4ir.cpp')
-rw-r--r--qv4ir.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/qv4ir.cpp b/qv4ir.cpp
index 7646b371d0..2a9414bb5d 100644
--- a/qv4ir.cpp
+++ b/qv4ir.cpp
@@ -391,8 +391,20 @@ Function *Module::newFunction(const QString &name)
return f;
}
+Module::~Module()
+{
+ foreach (Function *f, functions)
+ f->releaseModuleManagedData();
+}
+
Function::~Function()
{
+ delete[] codeData;
+}
+
+
+void Function::releaseModuleManagedData()
+{
// destroy the Stmt::Data blocks manually, because memory pool cleanup won't
// call the Stmt destructors.
foreach (IR::BasicBlock *b, basicBlocks)
@@ -400,9 +412,11 @@ Function::~Function()
s->destroyData();
qDeleteAll(basicBlocks);
- delete[] codeData;
+ pool = 0;
+ module = 0;
}
+
const QString *Function::newString(const QString &text)
{
return &*strings.insert(text);