Browse Source

Merge pull request #195 from InitialForce/feature_parser_collect_targetinfo

Extend parser to collect TargetInfo (type widths etc)
pull/210/head
João Matos 12 years ago
parent
commit
e7bfb757b2
  1. 12
      src/Core/Parser/Parser.cs
  2. 33
      src/CppParser/Bindings/CLI/AST.cpp
  3. 23
      src/CppParser/Bindings/CLI/AST.h
  4. 1
      src/CppParser/CppParser.cpp
  5. 1
      src/CppParser/CppParser.h
  6. 117
      src/CppParser/Parser.cpp
  7. 1
      src/CppParser/Parser.h
  8. 77
      src/CppParser/Target.h
  9. 4
      src/Generator/Driver.cs
  10. 6
      src/Parser/Main.cpp
  11. 117
      src/Parser/Parser.cpp
  12. 2
      src/Parser/Parser.h
  13. 69
      src/Parser/Target.h

12
src/Core/Parser/Parser.cs

@ -38,6 +38,18 @@ namespace CppSharp @@ -38,6 +38,18 @@ namespace CppSharp
ASTContext = context;
}
/// <summary>
/// Get info about that target
/// </summary>
/// <param name="options"></param>
/// <returns></returns>
public ParserTargetInfo GetTargetInfo(ParserOptions options)
{
options.ASTContext = ASTContext;
return Parser.ClangParser.GetTargetInfo(options);
}
/// <summary>
/// Parses a C++ source file to a translation unit.
/// </summary>

33
src/CppParser/Bindings/CLI/AST.cpp

@ -736,6 +736,23 @@ CppSharp::Parser::AST::DependentNameType::DependentNameType() @@ -736,6 +736,23 @@ CppSharp::Parser::AST::DependentNameType::DependentNameType()
NativePtr = new ::CppSharp::CppParser::AST::DependentNameType();
}
CppSharp::Parser::AST::PackExpansionType::PackExpansionType(::CppSharp::CppParser::AST::PackExpansionType* native)
: CppSharp::Parser::AST::Type((::CppSharp::CppParser::AST::Type*)native)
{
}
CppSharp::Parser::AST::PackExpansionType::PackExpansionType(System::IntPtr native)
: CppSharp::Parser::AST::Type(native)
{
auto __native = (::CppSharp::CppParser::AST::PackExpansionType*)native.ToPointer();
}
CppSharp::Parser::AST::PackExpansionType::PackExpansionType()
: CppSharp::Parser::AST::Type((::CppSharp::CppParser::AST::Type*)nullptr)
{
NativePtr = new ::CppSharp::CppParser::AST::PackExpansionType();
}
CppSharp::Parser::AST::BuiltinType::BuiltinType(::CppSharp::CppParser::AST::BuiltinType* native)
: CppSharp::Parser::AST::Type((::CppSharp::CppParser::AST::Type*)native)
{
@ -1267,14 +1284,14 @@ void CppSharp::Parser::AST::Declaration::DefinitionOrder::set(unsigned int value @@ -1267,14 +1284,14 @@ void CppSharp::Parser::AST::Declaration::DefinitionOrder::set(unsigned int value
((::CppSharp::CppParser::AST::Declaration*)NativePtr)->DefinitionOrder = value;
}
System::IntPtr CppSharp::Parser::AST::Declaration::OriginalPtr::get()
void* CppSharp::Parser::AST::Declaration::OriginalPtr::get()
{
return IntPtr(((::CppSharp::CppParser::AST::Declaration*)NativePtr)->OriginalPtr);
return ((::CppSharp::CppParser::AST::Declaration*)NativePtr)->OriginalPtr;
}
void CppSharp::Parser::AST::Declaration::OriginalPtr::set(System::IntPtr value)
void CppSharp::Parser::AST::Declaration::OriginalPtr::set(void* value)
{
((::CppSharp::CppParser::AST::Declaration*)NativePtr)->OriginalPtr = (void*)value.ToPointer();
((::CppSharp::CppParser::AST::Declaration*)NativePtr)->OriginalPtr = (void*)value;
}
CppSharp::Parser::AST::DeclarationContext::DeclarationContext(::CppSharp::CppParser::AST::DeclarationContext* native)
@ -2323,9 +2340,9 @@ void CppSharp::Parser::AST::ClassTemplate::addSpecializations(CppSharp::Parser:: @@ -2323,9 +2340,9 @@ void CppSharp::Parser::AST::ClassTemplate::addSpecializations(CppSharp::Parser::
((::CppSharp::CppParser::AST::ClassTemplate*)NativePtr)->addSpecializations(arg0);
}
CppSharp::Parser::AST::ClassTemplateSpecialization^ CppSharp::Parser::AST::ClassTemplate::FindSpecialization(System::IntPtr ptr)
CppSharp::Parser::AST::ClassTemplateSpecialization^ CppSharp::Parser::AST::ClassTemplate::FindSpecialization(void* ptr)
{
auto arg0 = (void*)ptr.ToPointer();
auto arg0 = (void*)ptr;
auto __ret = ((::CppSharp::CppParser::AST::ClassTemplate*)NativePtr)->FindSpecialization(arg0);
if (__ret == nullptr) return nullptr;
return gcnew CppSharp::Parser::AST::ClassTemplateSpecialization((::CppSharp::CppParser::AST::ClassTemplateSpecialization*)__ret);
@ -2339,9 +2356,9 @@ CppSharp::Parser::AST::ClassTemplateSpecialization^ CppSharp::Parser::AST::Class @@ -2339,9 +2356,9 @@ CppSharp::Parser::AST::ClassTemplateSpecialization^ CppSharp::Parser::AST::Class
return gcnew CppSharp::Parser::AST::ClassTemplateSpecialization((::CppSharp::CppParser::AST::ClassTemplateSpecialization*)__ret);
}
CppSharp::Parser::AST::ClassTemplatePartialSpecialization^ CppSharp::Parser::AST::ClassTemplate::FindPartialSpecialization(System::IntPtr ptr)
CppSharp::Parser::AST::ClassTemplatePartialSpecialization^ CppSharp::Parser::AST::ClassTemplate::FindPartialSpecialization(void* ptr)
{
auto arg0 = (void*)ptr.ToPointer();
auto arg0 = (void*)ptr;
auto __ret = ((::CppSharp::CppParser::AST::ClassTemplate*)NativePtr)->FindPartialSpecialization(arg0);
if (__ret == nullptr) return nullptr;
return gcnew CppSharp::Parser::AST::ClassTemplatePartialSpecialization((::CppSharp::CppParser::AST::ClassTemplatePartialSpecialization*)__ret);

23
src/CppParser/Bindings/CLI/AST.h

@ -48,6 +48,7 @@ namespace CppSharp @@ -48,6 +48,7 @@ namespace CppSharp
ref class Method;
ref class Namespace;
ref class NativeLibrary;
ref class PackExpansionType;
ref class Parameter;
ref class PointerType;
ref class PreprocessedEntity;
@ -94,7 +95,8 @@ namespace CppSharp @@ -94,7 +95,8 @@ namespace CppSharp
TemplateParameterSubstitution = 10,
InjectedClassName = 11,
DependentName = 12,
Builtin = 13
PackExpansion = 13,
Builtin = 14
};
public enum struct DeclarationKind
@ -711,6 +713,15 @@ namespace CppSharp @@ -711,6 +713,15 @@ namespace CppSharp
DependentNameType();
};
public ref class PackExpansionType : CppSharp::Parser::AST::Type
{
public:
PackExpansionType(::CppSharp::CppParser::AST::PackExpansionType* native);
PackExpansionType(System::IntPtr native);
PackExpansionType();
};
public ref class BuiltinType : CppSharp::Parser::AST::Type
{
public:
@ -1006,10 +1017,10 @@ namespace CppSharp @@ -1006,10 +1017,10 @@ namespace CppSharp
void set(unsigned int);
}
property System::IntPtr OriginalPtr
property void* OriginalPtr
{
System::IntPtr get();
void set(System::IntPtr);
void* get();
void set(void*);
}
CppSharp::Parser::AST::PreprocessedEntity^ getPreprocessedEntities(unsigned int i);
@ -1592,11 +1603,11 @@ namespace CppSharp @@ -1592,11 +1603,11 @@ namespace CppSharp
void addSpecializations(CppSharp::Parser::AST::ClassTemplateSpecialization^ s);
CppSharp::Parser::AST::ClassTemplateSpecialization^ FindSpecialization(System::IntPtr ptr);
CppSharp::Parser::AST::ClassTemplateSpecialization^ FindSpecialization(void* ptr);
CppSharp::Parser::AST::ClassTemplateSpecialization^ FindSpecialization(CppSharp::Parser::AST::TemplateSpecializationType^ type);
CppSharp::Parser::AST::ClassTemplatePartialSpecialization^ FindPartialSpecialization(System::IntPtr ptr);
CppSharp::Parser::AST::ClassTemplatePartialSpecialization^ FindPartialSpecialization(void* ptr);
CppSharp::Parser::AST::ClassTemplatePartialSpecialization^ FindPartialSpecialization(CppSharp::Parser::AST::TemplateSpecializationType^ type);
};

1
src/CppParser/CppParser.cpp

@ -27,6 +27,7 @@ DEF_VECTOR_STRING(ParserOptions, SystemIncludeDirs) @@ -27,6 +27,7 @@ DEF_VECTOR_STRING(ParserOptions, SystemIncludeDirs)
DEF_VECTOR_STRING(ParserOptions, Defines)
DEF_VECTOR_STRING(ParserOptions, LibraryDirs)
DEF_STRING(ParserOptions, TargetTriple)
DEF_STRING(ParserTargetInfo, ABI)
ParserResult::ParserResult()
: ASTContext(0)

1
src/CppParser/CppParser.h

@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
#include "AST.h"
#include "Helpers.h"
#include "Target.h"
namespace CppSharp { namespace CppParser {

117
src/CppParser/Parser.cpp

@ -1210,6 +1210,37 @@ static CallingConvention ConvertCallConv(clang::CallingConv CC) @@ -1210,6 +1210,37 @@ static CallingConvention ConvertCallConv(clang::CallingConv CC)
return CallingConvention::Default;
}
static ParserIntType ConvertIntType(clang::TargetInfo::IntType IT)
{
switch (IT)
{
case clang::TargetInfo::IntType::NoInt:
return ParserIntType::NoInt;
case clang::TargetInfo::IntType::SignedChar:
return ParserIntType::SignedChar;
case clang::TargetInfo::IntType::UnsignedChar:
return ParserIntType::UnsignedChar;
case clang::TargetInfo::IntType::SignedShort:
return ParserIntType::SignedShort;
case clang::TargetInfo::IntType::UnsignedShort:
return ParserIntType::UnsignedShort;
case clang::TargetInfo::IntType::SignedInt:
return ParserIntType::SignedInt;
case clang::TargetInfo::IntType::UnsignedInt:
return ParserIntType::UnsignedInt;
case clang::TargetInfo::IntType::SignedLong:
return ParserIntType::SignedLong;
case clang::TargetInfo::IntType::UnsignedLong:
return ParserIntType::UnsignedLong;
case clang::TargetInfo::IntType::SignedLongLong:
return ParserIntType::SignedLongLong;
case clang::TargetInfo::IntType::UnsignedLongLong:
return ParserIntType::UnsignedLongLong;
}
llvm_unreachable("Unknown parser integer type");
}
Type* Parser::WalkType(clang::QualType QualType, clang::TypeLoc* TL,
bool DesugarType)
{
@ -2688,3 +2719,89 @@ ParserResult* ClangParser::ParseLibrary(ParserOptions* Opts) @@ -2688,3 +2719,89 @@ ParserResult* ClangParser::ParseLibrary(ParserOptions* Opts)
Parser parser(Opts);
return parser.ParseLibrary(Opts->FileName);
}
ParserTargetInfo* Parser::GetTargetInfo()
{
assert(Opts->ASTContext && "Expected a valid ASTContext");
auto res = new ParserResult();
res->ASTContext = Lib;
SetupHeader();
auto SC = new clang::SemaConsumer();
C->setASTConsumer(SC);
C->createSema(clang::TU_Complete, 0);
SC->InitializeSema(C->getSema());
auto DiagClient = new DiagnosticConsumer();
C->getDiagnostics().setClient(DiagClient);
AST = &C->getASTContext();
// Initialize enough Clang codegen machinery so we can get at ABI details.
llvm::LLVMContext Ctx;
llvm::OwningPtr<llvm::Module> M(new llvm::Module("", Ctx));
M->setTargetTriple(AST->getTargetInfo().getTriple().getTriple());
M->setDataLayout(AST->getTargetInfo().getTargetDescription());
llvm::OwningPtr<llvm::DataLayout> TD(new llvm::DataLayout(AST->getTargetInfo()
.getTargetDescription()));
llvm::OwningPtr<clang::CodeGen::CodeGenModule> CGM(
new clang::CodeGen::CodeGenModule(C->getASTContext(), C->getCodeGenOpts(),
*M, *TD, C->getDiagnostics()));
llvm::OwningPtr<clang::CodeGen::CodeGenTypes> CGT(
new clang::CodeGen::CodeGenTypes(*CGM.get()));
CodeGenInfo = (clang::TargetCodeGenInfo*) &CGM->getTargetCodeGenInfo();
CodeGenTypes = CGT.get();
auto parserTargetInfo = new ParserTargetInfo();
parserTargetInfo->ABI = AST->getTargetInfo().getABI();
parserTargetInfo->Char16Type = ConvertIntType(AST->getTargetInfo().getChar16Type());
parserTargetInfo->Char32Type = ConvertIntType(AST->getTargetInfo().getChar32Type());
parserTargetInfo->Int64Type = ConvertIntType(AST->getTargetInfo().getInt64Type());
parserTargetInfo->IntMaxType = ConvertIntType(AST->getTargetInfo().getIntMaxType());
parserTargetInfo->IntPtrType = ConvertIntType(AST->getTargetInfo().getIntPtrType());
parserTargetInfo->SizeType = ConvertIntType(AST->getTargetInfo().getSizeType());
parserTargetInfo->UIntMaxType = ConvertIntType(AST->getTargetInfo().getUIntMaxType());
parserTargetInfo->WCharType = ConvertIntType(AST->getTargetInfo().getWCharType());
parserTargetInfo->WIntType = ConvertIntType(AST->getTargetInfo().getWIntType());
parserTargetInfo->BoolAlign = AST->getTargetInfo().getBoolAlign();
parserTargetInfo->BoolWidth = AST->getTargetInfo().getBoolWidth();
parserTargetInfo->CharAlign = AST->getTargetInfo().getCharAlign();
parserTargetInfo->CharWidth = AST->getTargetInfo().getCharWidth();
parserTargetInfo->Char16Align = AST->getTargetInfo().getChar16Align();
parserTargetInfo->Char16Width = AST->getTargetInfo().getChar16Width();
parserTargetInfo->Char32Align = AST->getTargetInfo().getChar32Align();
parserTargetInfo->Char32Width = AST->getTargetInfo().getChar32Width();
parserTargetInfo->HalfAlign = AST->getTargetInfo().getHalfAlign();
parserTargetInfo->HalfWidth = AST->getTargetInfo().getHalfWidth();
parserTargetInfo->FloatAlign = AST->getTargetInfo().getFloatAlign();
parserTargetInfo->FloatWidth = AST->getTargetInfo().getFloatWidth();
parserTargetInfo->DoubleAlign = AST->getTargetInfo().getDoubleAlign();
parserTargetInfo->DoubleWidth = AST->getTargetInfo().getDoubleWidth();
parserTargetInfo->ShortAlign = AST->getTargetInfo().getShortAlign();
parserTargetInfo->ShortWidth = AST->getTargetInfo().getShortWidth();
parserTargetInfo->IntAlign = AST->getTargetInfo().getIntAlign();
parserTargetInfo->IntWidth = AST->getTargetInfo().getIntWidth();
parserTargetInfo->IntMaxTWidth = AST->getTargetInfo().getIntMaxTWidth();
parserTargetInfo->LongAlign = AST->getTargetInfo().getLongAlign();
parserTargetInfo->LongWidth = AST->getTargetInfo().getLongWidth();
parserTargetInfo->LongDoubleAlign = AST->getTargetInfo().getLongDoubleAlign();
parserTargetInfo->LongDoubleWidth = AST->getTargetInfo().getLongDoubleWidth();
parserTargetInfo->LongLongAlign = AST->getTargetInfo().getLongLongAlign();
parserTargetInfo->LongLongWidth = AST->getTargetInfo().getLongLongWidth();
parserTargetInfo->PointerAlign = AST->getTargetInfo().getPointerAlign(0);
parserTargetInfo->PointerWidth = AST->getTargetInfo().getPointerWidth(0);
parserTargetInfo->WCharAlign = AST->getTargetInfo().getWCharAlign();
parserTargetInfo->WCharWidth = AST->getTargetInfo().getWCharWidth();
return parserTargetInfo;
}

1
src/CppParser/Parser.h

@ -56,6 +56,7 @@ struct Parser @@ -56,6 +56,7 @@ struct Parser
ParserResultKind ParseSharedLib(llvm::StringRef File,
llvm::MemoryBuffer *Buffer,
CppSharp::CppParser::NativeLibrary*& NativeLib);
ParserTargetInfo* GetTargetInfo();
protected:

77
src/CppParser/Target.h

@ -0,0 +1,77 @@ @@ -0,0 +1,77 @@
/************************************************************************
*
* CppSharp
* Licensed under the simplified BSD license. All rights reserved.
*
************************************************************************/
#pragma once
#include "AST.h"
#include "Helpers.h"
namespace CppSharp { namespace CppParser {
using namespace CppSharp::CppParser::AST;
enum struct ParserIntType
{
NoInt = 0,
SignedChar,
UnsignedChar,
SignedShort,
UnsignedShort,
SignedInt,
UnsignedInt,
SignedLong,
UnsignedLong,
SignedLongLong,
UnsignedLongLong
};
struct CS_API ParserTargetInfo
{
STRING(ABI);
ParserIntType Char16Type;
ParserIntType Char32Type;
ParserIntType Int64Type;
ParserIntType IntMaxType;
ParserIntType IntPtrType;
ParserIntType SizeType;
ParserIntType UIntMaxType;
ParserIntType WCharType;
ParserIntType WIntType;
unsigned int BoolAlign;
unsigned int BoolWidth;
unsigned int CharAlign;
unsigned int CharWidth;
unsigned int Char16Align;
unsigned int Char16Width;
unsigned int Char32Align;
unsigned int Char32Width;
unsigned int HalfAlign;
unsigned int HalfWidth;
unsigned int FloatAlign;
unsigned int FloatWidth;
unsigned int DoubleAlign;
unsigned int DoubleWidth;
unsigned int ShortAlign;
unsigned int ShortWidth;
unsigned int IntAlign;
unsigned int IntWidth;
unsigned int IntMaxTWidth;
unsigned int LongAlign;
unsigned int LongWidth;
unsigned int LongDoubleAlign;
unsigned int LongDoubleWidth;
unsigned int LongLongAlign;
unsigned int LongLongWidth;
unsigned int PointerAlign;
unsigned int PointerWidth;
unsigned int WCharAlign;
unsigned int WCharWidth;
};
} }

4
src/Generator/Driver.cs

@ -214,6 +214,8 @@ namespace CppSharp @@ -214,6 +214,8 @@ namespace CppSharp
parser.SourceParsed += OnSourceFileParsed;
parser.ParseProject(Project, Options);
TargetInfo = parser.GetTargetInfo(Options);
#if !OLD_PARSER
ASTContext = ClangParser.ConvertASTContext(parser.ASTContext);
#endif
@ -221,6 +223,8 @@ namespace CppSharp @@ -221,6 +223,8 @@ namespace CppSharp
return true;
}
public ParserTargetInfo TargetInfo { get; set; }
public bool ParseLibraries()
{
foreach (var library in Options.Libraries)

6
src/Parser/Main.cpp

@ -14,6 +14,12 @@ public ref class ClangParser @@ -14,6 +14,12 @@ public ref class ClangParser
{
public:
static ParserTargetInfo^ GetTargetInfo(ParserOptions^ Opts)
{
::Parser parser(Opts);
return parser.GetTargetInfo();
}
static ParserResult^ ParseHeader(ParserOptions^ Opts)
{
if (!Opts->FileName) return nullptr;

117
src/Parser/Parser.cpp

@ -1233,6 +1233,37 @@ static CppSharp::AST::CallingConvention ConvertCallConv(clang::CallingConv CC) @@ -1233,6 +1233,37 @@ static CppSharp::AST::CallingConvention ConvertCallConv(clang::CallingConv CC)
return CppSharp::AST::CallingConvention::Default;
}
static ParserIntType ConvertIntType(clang::TargetInfo::IntType IT)
{
switch (IT)
{
case clang::TargetInfo::IntType::NoInt:
return ParserIntType::NoInt;
case clang::TargetInfo::IntType::SignedChar:
return ParserIntType::SignedChar;
case clang::TargetInfo::IntType::UnsignedChar:
return ParserIntType::UnsignedChar;
case clang::TargetInfo::IntType::SignedShort:
return ParserIntType::SignedShort;
case clang::TargetInfo::IntType::UnsignedShort:
return ParserIntType::UnsignedShort;
case clang::TargetInfo::IntType::SignedInt:
return ParserIntType::SignedInt;
case clang::TargetInfo::IntType::UnsignedInt:
return ParserIntType::UnsignedInt;
case clang::TargetInfo::IntType::SignedLong:
return ParserIntType::SignedLong;
case clang::TargetInfo::IntType::UnsignedLong:
return ParserIntType::UnsignedLong;
case clang::TargetInfo::IntType::SignedLongLong:
return ParserIntType::SignedLongLong;
case clang::TargetInfo::IntType::UnsignedLongLong:
return ParserIntType::UnsignedLongLong;
}
llvm_unreachable("Unknown parser integer type");
}
CppSharp::AST::QualifiedType^ Parser::WalkQualifiedType(clang::TypeSourceInfo* TSI)
{
auto TL = TSI->getTypeLoc();
@ -2685,3 +2716,89 @@ ParserResult^ Parser::ParseLibrary(const std::string& File) @@ -2685,3 +2716,89 @@ ParserResult^ Parser::ParseLibrary(const std::string& File)
return res;
}
ParserTargetInfo^ Parser::GetTargetInfo()
{
assert(Opts->ASTContext && "Expected a valid ASTContext");
auto res = gcnew ParserResult();
res->ASTContext = Lib;
SetupHeader();
auto SC = new clang::SemaConsumer();
C->setASTConsumer(SC);
C->createSema(clang::TU_Complete, 0);
SC->InitializeSema(C->getSema());
auto DiagClient = new DiagnosticConsumer();
C->getDiagnostics().setClient(DiagClient);
AST = &C->getASTContext();
// Initialize enough Clang codegen machinery so we can get at ABI details.
llvm::LLVMContext Ctx;
llvm::OwningPtr<llvm::Module> M(new llvm::Module("", Ctx));
M->setTargetTriple(AST->getTargetInfo().getTriple().getTriple());
M->setDataLayout(AST->getTargetInfo().getTargetDescription());
llvm::OwningPtr<llvm::DataLayout> TD(new llvm::DataLayout(AST->getTargetInfo()
.getTargetDescription()));
llvm::OwningPtr<clang::CodeGen::CodeGenModule> CGM(
new clang::CodeGen::CodeGenModule(C->getASTContext(), C->getCodeGenOpts(),
*M, *TD, C->getDiagnostics()));
llvm::OwningPtr<clang::CodeGen::CodeGenTypes> CGT(
new clang::CodeGen::CodeGenTypes(*CGM.get()));
CodeGenInfo = (clang::TargetCodeGenInfo*) &CGM->getTargetCodeGenInfo();
CodeGenTypes = CGT.get();
auto parserTargetInfo = gcnew ParserTargetInfo();
parserTargetInfo->ABI = clix::marshalString<clix::E_UTF8>(AST->getTargetInfo().getABI());
parserTargetInfo->Char16Type = ConvertIntType(AST->getTargetInfo().getChar16Type());
parserTargetInfo->Char32Type = ConvertIntType(AST->getTargetInfo().getChar32Type());
parserTargetInfo->Int64Type = ConvertIntType(AST->getTargetInfo().getInt64Type());
parserTargetInfo->IntMaxType = ConvertIntType(AST->getTargetInfo().getIntMaxType());
parserTargetInfo->IntPtrType = ConvertIntType(AST->getTargetInfo().getIntPtrType());
parserTargetInfo->SizeType = ConvertIntType(AST->getTargetInfo().getSizeType());
parserTargetInfo->UIntMaxType = ConvertIntType(AST->getTargetInfo().getUIntMaxType());
parserTargetInfo->WCharType = ConvertIntType(AST->getTargetInfo().getWCharType());
parserTargetInfo->WIntType = ConvertIntType(AST->getTargetInfo().getWIntType());
parserTargetInfo->BoolAlign = AST->getTargetInfo().getBoolAlign();
parserTargetInfo->BoolWidth = AST->getTargetInfo().getBoolWidth();
parserTargetInfo->CharAlign = AST->getTargetInfo().getCharAlign();
parserTargetInfo->CharWidth = AST->getTargetInfo().getCharWidth();
parserTargetInfo->Char16Align = AST->getTargetInfo().getChar16Align();
parserTargetInfo->Char16Width = AST->getTargetInfo().getChar16Width();
parserTargetInfo->Char32Align = AST->getTargetInfo().getChar32Align();
parserTargetInfo->Char32Width = AST->getTargetInfo().getChar32Width();
parserTargetInfo->HalfAlign = AST->getTargetInfo().getHalfAlign();
parserTargetInfo->HalfWidth = AST->getTargetInfo().getHalfWidth();
parserTargetInfo->FloatAlign = AST->getTargetInfo().getFloatAlign();
parserTargetInfo->FloatWidth = AST->getTargetInfo().getFloatWidth();
parserTargetInfo->DoubleAlign = AST->getTargetInfo().getDoubleAlign();
parserTargetInfo->DoubleWidth = AST->getTargetInfo().getDoubleWidth();
parserTargetInfo->ShortAlign = AST->getTargetInfo().getShortAlign();
parserTargetInfo->ShortWidth = AST->getTargetInfo().getShortWidth();
parserTargetInfo->IntAlign = AST->getTargetInfo().getIntAlign();
parserTargetInfo->IntWidth = AST->getTargetInfo().getIntWidth();
parserTargetInfo->IntMaxTWidth = AST->getTargetInfo().getIntMaxTWidth();
parserTargetInfo->LongAlign = AST->getTargetInfo().getLongAlign();
parserTargetInfo->LongWidth = AST->getTargetInfo().getLongWidth();
parserTargetInfo->LongDoubleAlign = AST->getTargetInfo().getLongDoubleAlign();
parserTargetInfo->LongDoubleWidth = AST->getTargetInfo().getLongDoubleWidth();
parserTargetInfo->LongLongAlign = AST->getTargetInfo().getLongLongAlign();
parserTargetInfo->LongLongWidth = AST->getTargetInfo().getLongLongWidth();
parserTargetInfo->PointerAlign = AST->getTargetInfo().getPointerAlign(0);
parserTargetInfo->PointerWidth = AST->getTargetInfo().getPointerWidth(0);
parserTargetInfo->WCharAlign = AST->getTargetInfo().getWCharAlign();
parserTargetInfo->WCharWidth = AST->getTargetInfo().getWCharWidth();
return parserTargetInfo;
}

2
src/Parser/Parser.h

@ -27,6 +27,7 @@ @@ -27,6 +27,7 @@
#include <clang/Sema/Sema.h>
#include "CXXABI.h"
#include "Options.h"
#include "Target.h"
#include <vcclr.h>
#include <string>
@ -54,6 +55,7 @@ struct Parser @@ -54,6 +55,7 @@ struct Parser
ParserResultKind ParseSharedLib(llvm::StringRef File,
llvm::MemoryBuffer *Buffer,
CppSharp::AST::NativeLibrary^ NativeLib);
ParserTargetInfo^ GetTargetInfo();
protected:

69
src/Parser/Target.h

@ -0,0 +1,69 @@ @@ -0,0 +1,69 @@
/************************************************************************
*
* CppSharp
* Licensed under the simplified BSD license. All rights reserved.
*
************************************************************************/
#using <CppSharp.AST.dll>
using namespace System::Collections::Generic;
public enum ParserIntType
{
NoInt = 0,
SignedChar,
UnsignedChar,
SignedShort,
UnsignedShort,
SignedInt,
UnsignedInt,
SignedLong,
UnsignedLong,
SignedLongLong,
UnsignedLongLong
};
public ref struct ParserTargetInfo
{
System::String^ ABI;
ParserIntType Char16Type;
ParserIntType Char32Type;
ParserIntType Int64Type;
ParserIntType IntMaxType;
ParserIntType IntPtrType;
ParserIntType SizeType;
ParserIntType UIntMaxType;
ParserIntType WCharType;
ParserIntType WIntType;
unsigned int BoolAlign;
unsigned int BoolWidth;
unsigned int CharAlign;
unsigned int CharWidth;
unsigned int Char16Align;
unsigned int Char16Width;
unsigned int Char32Align;
unsigned int Char32Width;
unsigned int HalfAlign;
unsigned int HalfWidth;
unsigned int FloatAlign;
unsigned int FloatWidth;
unsigned int DoubleAlign;
unsigned int DoubleWidth;
unsigned int ShortAlign;
unsigned int ShortWidth;
unsigned int IntAlign;
unsigned int IntWidth;
unsigned int IntMaxTWidth;
unsigned int LongAlign;
unsigned int LongWidth;
unsigned int LongDoubleAlign;
unsigned int LongDoubleWidth;
unsigned int LongLongAlign;
unsigned int LongLongWidth;
unsigned int PointerAlign;
unsigned int PointerWidth;
unsigned int WCharAlign;
unsigned int WCharWidth;
};
Loading…
Cancel
Save