From 44cdfad1d8eee2c9ba8ce7b38a35b4698cdc31c8 Mon Sep 17 00:00:00 2001 From: Alexandre Bique Date: Fri, 15 May 2009 18:53:54 +0100 Subject: [PATCH] [ozulis] fixing some memory leaks --- src/ozulis/parser.cc | 4 +++- src/ozulis/plugin-manager.cc | 10 ++++++++++ src/ozulis/plugin-manager.hh | 1 + src/ozulis/visitors/simplify.cc | 20 ++++++++++---------- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/ozulis/parser.cc b/src/ozulis/parser.cc index 0c44671..b13669c 100644 --- a/src/ozulis/parser.cc +++ b/src/ozulis/parser.cc @@ -29,6 +29,8 @@ namespace ozulis Compiler::instance().error( (boost::format(_("%1%: %2%.")) % path % strerror(errno)).str()); - return parse(stream); + ast::FilePtr file = parse(stream); + fclose(stream); + return file; } } diff --git a/src/ozulis/plugin-manager.cc b/src/ozulis/plugin-manager.cc index 20f07fa..0489d75 100644 --- a/src/ozulis/plugin-manager.cc +++ b/src/ozulis/plugin-manager.cc @@ -23,6 +23,16 @@ namespace ozulis { } + PluginManager::~PluginManager() + { + BOOST_FOREACH (Plugin * plugin, languages_) + { + void * handle = plugin->handle; + delete plugin; + dlclose(handle); + } + } + void PluginManager::addPluginPath(const fs::path & path) { diff --git a/src/ozulis/plugin-manager.hh b/src/ozulis/plugin-manager.hh index a901db3..0b255ca 100644 --- a/src/ozulis/plugin-manager.hh +++ b/src/ozulis/plugin-manager.hh @@ -20,6 +20,7 @@ namespace ozulis { public: PluginManager(); + ~PluginManager(); typedef Parser * (*CreateParser_f)(); diff --git a/src/ozulis/visitors/simplify.cc b/src/ozulis/visitors/simplify.cc index 54c82ff..20a5b65 100644 --- a/src/ozulis/visitors/simplify.cc +++ b/src/ozulis/visitors/simplify.cc @@ -249,17 +249,17 @@ namespace ozulis ast::SymbolExp & node = reinterpret_cast (node_); if (node.symbol->address->nodeType == ast::MemoryAddress::nodeTypeId()) { - ast::SymbolExp * sexp = new ast::SymbolExp; + ast::SymbolExpPtr sexp = new ast::SymbolExp; sexp->symbol = new ast::Symbol; sexp->symbol->name = "%" + node.symbol->name + "_" + ctx.nextId(); sexp->symbol->type = unreferencedType(node.type); - ast::RegisterAddress * addr = new ast::RegisterAddress; + ast::RegisterAddressPtr addr = new ast::RegisterAddress; addr->address = sexp->symbol->name; sexp->symbol->address = addr; sexp->type = sexp->symbol->type; ctx.replacement = sexp; - ast::LoadVar * lv = new ast::LoadVar; + ast::LoadVarPtr lv = new ast::LoadVar; lv->to = sexp->symbol->name; lv->from = &node; ctx.simplifications.push_back(lv); @@ -271,8 +271,8 @@ namespace ozulis static void visitVarDecl(ast::Node & node_, Simplify & ctx) { ast::VarDecl & node = reinterpret_cast (node_); - ast::Symbol * symbol = ctx.scope->findSymbol(node.name); - ast::Alloca * alloc = new ast::Alloca; + ast::SymbolPtr symbol = ctx.scope->findSymbol(node.name); + ast::AllocaPtr alloc = new ast::Alloca; alloc->symbol = symbol; ctx.simplifications.push_back(alloc); } @@ -283,7 +283,7 @@ namespace ozulis reinterpret_cast (node_); visitVarDecl(node, ctx); SIMPLIFY(node.value); - ast::StoreVar * sv = new ast::StoreVar; + ast::StoreVarPtr sv = new ast::StoreVar; sv->to = ctx.scope->findSymbol(node.name); sv->value = ctx.replacement; ctx.simplifications.push_back(sv); @@ -305,16 +305,16 @@ namespace ozulis ast::DereferenceExp & node = reinterpret_cast (node_); SIMPLIFY(node.exp); - ast::LoadVar * lv = new ast::LoadVar; + ast::LoadVarPtr lv = new ast::LoadVar; lv->to = ctx.scope->prefix + ctx.nextId(); lv->from = node.exp; ctx.simplifications.push_back(lv); - ast::SymbolExp * id = new ast::SymbolExp; + ast::SymbolExpPtr id = new ast::SymbolExp; id->symbol = new ast::Symbol; id->symbol->name = lv->to; id->symbol->type = node.type; - ast::RegisterAddress * addr = new ast::RegisterAddress; + ast::RegisterAddressPtr addr = new ast::RegisterAddress; addr->address = id->symbol->name; id->symbol->address = addr; id->type = node.type; @@ -365,7 +365,7 @@ namespace ozulis { ast::CastExp & node = reinterpret_cast (node_); SIMPLIFY(node.exp); - ast::Exp * exp = CastSimplifier::simplify(node); + ast::ExpPtr exp = CastSimplifier::simplify(node); if (exp->nodeType == ast::NumberExp::nodeTypeId()) ctx.replacement = exp; else -- 2.11.4.GIT