From 953779d0edaa9a6192bdec5d8c94db3f6f06fa57 Mon Sep 17 00:00:00 2001 From: triton Date: Sun, 20 Jan 2013 13:52:41 +0000 Subject: [PATCH] Check if a function already exists before adding a new one. --- src/Parser/Parser.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp index 21a002a5..25e9509a 100644 --- a/src/Parser/Parser.cpp +++ b/src/Parser/Parser.cpp @@ -969,8 +969,18 @@ Cxxi::Function^ Parser::WalkFunction(clang::FunctionDecl* FD, bool IsDependent) using namespace clang; using namespace clix; - auto F = gcnew Cxxi::Function(); + auto NS = GetNamespace(FD); + assert(NS && "Expected a valid namespace"); + + auto Name = marshalString(FD->getNameAsString()); + Cxxi::Function^ F = NS->FindFunction(Name, /*Create=*/ false); + + if (F != nullptr) + return F; + + F = gcnew Cxxi::Function(); WalkFunction(FD, F, IsDependent); + NS->Functions->Add(F); return F; } @@ -1235,10 +1245,6 @@ Cxxi::Declaration^ Parser::WalkDeclaration(clang::Decl* D, auto F = WalkFunction(FD); HandleComments(FD, F); - auto NS = GetNamespace(FD); - F->Namespace = NS; - NS->Functions->Add(F); - Decl = F; break;