blob: 851ad1d7ac5bd7f7c3e1ae72255cbe24c7983274 [file] [log] [blame]
Greg Claytona2721472011-06-25 00:44:06 +00001//===-- ClangASTImporter.cpp ------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "clang/AST/Decl.h"
11#include "lldb/Symbol/ClangASTContext.h"
12#include "lldb/Symbol/ClangASTImporter.h"
13
14using namespace lldb_private;
15using namespace clang;
16
17clang::QualType
18ClangASTImporter::CopyType (clang::ASTContext *src_ast,
19 clang::QualType type)
20{
Greg Claytondd0649b2011-07-06 18:55:08 +000021 MinionSP minion_sp (GetMinion(src_ast, false));
22 if (minion_sp)
23 return minion_sp->Import(type);
24 return QualType();
Greg Claytona2721472011-06-25 00:44:06 +000025}
26
27clang::Decl *
28ClangASTImporter::CopyDecl (clang::ASTContext *src_ast,
29 clang::Decl *decl)
30{
Greg Claytondd0649b2011-07-06 18:55:08 +000031 MinionSP minion_sp;
Greg Claytona2721472011-06-25 00:44:06 +000032
33 if (isa<clang::NamespaceDecl>(decl))
Greg Claytondd0649b2011-07-06 18:55:08 +000034 minion_sp = GetMinion(src_ast, true);
Greg Claytona2721472011-06-25 00:44:06 +000035 else
Greg Claytondd0649b2011-07-06 18:55:08 +000036 minion_sp = GetMinion(src_ast, false);
Greg Claytona2721472011-06-25 00:44:06 +000037
Greg Claytondd0649b2011-07-06 18:55:08 +000038 if (minion_sp)
39 return minion_sp->Import(decl);
40 return NULL;
Greg Claytona2721472011-06-25 00:44:06 +000041}
42
43const clang::DeclContext *
44ClangASTImporter::CompleteDeclContext (const clang::DeclContext *decl_context)
45{
46 const Decl *context_decl = dyn_cast<Decl>(decl_context);
47
48 if (!context_decl)
49 return NULL;
50
51 DeclOrigin context_decl_origin = GetDeclOrigin(context_decl);
52
53 if (!context_decl_origin.Valid())
54 return NULL;
55
56 if (!ClangASTContext::GetCompleteDecl(context_decl_origin.ctx, context_decl_origin.decl))
57 return NULL;
58
Greg Claytondd0649b2011-07-06 18:55:08 +000059 MinionSP minion_sp (GetMinion(context_decl_origin.ctx, false));
60 if (minion_sp)
61 minion_sp->ImportDefinition(context_decl_origin.decl);
Greg Claytona2721472011-06-25 00:44:06 +000062
63 return decl_context;
64}