Browse Source

Fixed the parser to always fill the original pointer value in declarations.

pull/159/head
triton 12 years ago
parent
commit
74368b2c3d
  1. 16
      src/CppParser/Parser.cpp
  2. 11
      src/Parser/Parser.cpp

16
src/CppParser/Parser.cpp

@ -919,6 +919,10 @@ TranslationUnit* Parser::GetTranslationUnit(clang::SourceLocation Loc, @@ -919,6 +919,10 @@ TranslationUnit* Parser::GetTranslationUnit(clang::SourceLocation Loc,
*Kind = LocKind;
auto Unit = Lib->FindOrCreateModule(File);
if (Unit->OriginalPtr == nullptr)
Unit->OriginalPtr = (void*) SM.getFileEntryForID(SM.getFileID(Loc));
if (LocKind != SourceLocationKind::Invalid)
Unit->IsSystemHeader = SM.isInSystemHeader(Loc);
@ -969,11 +973,12 @@ DeclarationContext* Parser::GetNamespace(clang::Decl* D, @@ -969,11 +973,12 @@ DeclarationContext* Parser::GetNamespace(clang::Decl* D,
{
case Decl::Namespace:
{
const NamespaceDecl* ND = cast<NamespaceDecl>(Ctx);
NamespaceDecl* ND = cast<NamespaceDecl>(Ctx);
if (ND->isAnonymousNamespace())
continue;
auto Name = ND->getName();
DC = DC->FindCreateNamespace(Name);
HandleDeclaration(ND, DC);
continue;
}
case Decl::LinkageSpec:
@ -1896,6 +1901,8 @@ void Parser::WalkMacros(clang::PreprocessingRecord* PR) @@ -1896,6 +1901,8 @@ void Parser::WalkMacros(clang::PreprocessingRecord* PR)
break;
auto macro = new MacroDefinition();
macro->OriginalPtr = (void*) MD;
macro->Name = II->getName().trim();
macro->Expression = Expression.trim();
@ -2040,6 +2047,11 @@ void Parser::HandleOriginalText(clang::Decl* D, Declaration* Decl) @@ -2040,6 +2047,11 @@ void Parser::HandleOriginalText(clang::Decl* D, Declaration* Decl)
void Parser::HandleDeclaration(clang::Decl* D, Declaration* Decl)
{
if (Decl->OriginalPtr != nullptr)
return;
Decl->OriginalPtr = (void*) D;
if (Decl->PreprocessedEntities.empty())
{
auto startLoc = GetDeclStartLocation(C.get(), D);
@ -2135,6 +2147,7 @@ Declaration* Parser::WalkDeclaration(clang::Decl* D, @@ -2135,6 +2147,7 @@ Declaration* Parser::WalkDeclaration(clang::Decl* D,
{
auto TS = cast<ClassTemplateSpecializationDecl>(D);
auto CT = new ClassTemplateSpecialization();
HandleDeclaration(TS, CT);
Decl = CT;
break;
@ -2143,6 +2156,7 @@ Declaration* Parser::WalkDeclaration(clang::Decl* D, @@ -2143,6 +2156,7 @@ Declaration* Parser::WalkDeclaration(clang::Decl* D,
{
auto TS = cast<ClassTemplatePartialSpecializationDecl>(D);
auto CT = new ClassTemplatePartialSpecialization();
HandleDeclaration(TS, CT);
Decl = CT;
break;

11
src/Parser/Parser.cpp

@ -1020,6 +1020,10 @@ CppSharp::AST::TranslationUnit^ Parser::GetTranslationUnit(clang::SourceLocation @@ -1020,6 +1020,10 @@ CppSharp::AST::TranslationUnit^ Parser::GetTranslationUnit(clang::SourceLocation
*Kind = LocKind;
auto Unit = Lib->FindOrCreateModule(clix::marshalString<clix::E_UTF8>(File));
if (Unit->OriginalPtr.ToPointer() == nullptr)
Unit->OriginalPtr = System::IntPtr((void*)SM.getFileEntryForID(SM.getFileID(Loc)));
if (LocKind != SourceLocationKind::Invalid)
Unit->IsSystemHeader = SM.isInSystemHeader(Loc);
@ -1070,11 +1074,12 @@ CppSharp::AST::DeclarationContext^ Parser::GetNamespace(clang::Decl* D, @@ -1070,11 +1074,12 @@ CppSharp::AST::DeclarationContext^ Parser::GetNamespace(clang::Decl* D,
{
case Decl::Namespace:
{
const NamespaceDecl* ND = cast<NamespaceDecl>(Ctx);
NamespaceDecl* ND = cast<NamespaceDecl>(Ctx);
if (ND->isAnonymousNamespace())
continue;
auto Name = clix::marshalString<clix::E_UTF8>(ND->getName());
DC = DC->FindCreateNamespace(Name);
HandleDeclaration(ND, DC);
continue;
}
case Decl::LinkageSpec:
@ -1972,7 +1977,7 @@ void Parser::WalkMacros(clang::PreprocessingRecord* PR) @@ -1972,7 +1977,7 @@ void Parser::WalkMacros(clang::PreprocessingRecord* PR)
{
case PreprocessedEntity::MacroDefinitionKind:
{
const MacroDefinition* MD = cast<MacroDefinition>(PE);
auto MD = cast<MacroDefinition>(PE);
if (!IsValidDeclaration(MD->getLocation()))
break;
@ -2007,6 +2012,8 @@ void Parser::WalkMacros(clang::PreprocessingRecord* PR) @@ -2007,6 +2012,8 @@ void Parser::WalkMacros(clang::PreprocessingRecord* PR)
break;
auto macro = gcnew CppSharp::AST::MacroDefinition();
macro->OriginalPtr = System::IntPtr((void*)MD);
macro->Name = marshalString<E_UTF8>(II->getName())->Trim();
macro->Expression = marshalString<E_UTF8>(Expression)->Trim();

Loading…
Cancel
Save