Browse Source

Add support for WebAssembly C++ ABI to parser and AST converter.

pull/1711/head
Joao Matos 2 years ago
parent
commit
813cf1fb74
  1. 3
      src/AST/ASTContext.cs
  2. 3
      src/CppParser/Bindings/CLI/Decl.h
  3. 3
      src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs
  4. 3
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs
  5. 3
      src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs
  6. 3
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs
  7. 3
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs
  8. 3
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs
  9. 20
      src/CppParser/Decl.h
  10. 2
      src/CppParser/Parser.cpp
  11. 2
      src/Parser/ASTConverter.cs

3
src/AST/ASTContext.cs

@ -11,7 +11,8 @@ namespace CppSharp.AST @@ -11,7 +11,8 @@ namespace CppSharp.AST
Microsoft,
ARM,
iOS,
iOS64
iOS64,
WebAssembly
}
/// <summary>

3
src/CppParser/Bindings/CLI/Decl.h

@ -256,7 +256,8 @@ namespace CppSharp @@ -256,7 +256,8 @@ namespace CppSharp
Microsoft = 1,
ARM = 2,
iOS = 3,
iOS64 = 4
iOS64 = 4,
WebAssembly = 5
};
public enum class RecordArgABI

3
src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs

@ -6301,7 +6301,8 @@ namespace CppSharp @@ -6301,7 +6301,8 @@ namespace CppSharp
Microsoft = 1,
ARM = 2,
iOS = 3,
iOS64 = 4
iOS64 = 4,
WebAssembly = 5
}
public enum RecordArgABI

3
src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs

@ -6301,7 +6301,8 @@ namespace CppSharp @@ -6301,7 +6301,8 @@ namespace CppSharp
Microsoft = 1,
ARM = 2,
iOS = 3,
iOS64 = 4
iOS64 = 4,
WebAssembly = 5
}
public enum RecordArgABI

3
src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs

@ -6301,7 +6301,8 @@ namespace CppSharp @@ -6301,7 +6301,8 @@ namespace CppSharp
Microsoft = 1,
ARM = 2,
iOS = 3,
iOS64 = 4
iOS64 = 4,
WebAssembly = 5
}
public enum RecordArgABI

3
src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs

@ -6301,7 +6301,8 @@ namespace CppSharp @@ -6301,7 +6301,8 @@ namespace CppSharp
Microsoft = 1,
ARM = 2,
iOS = 3,
iOS64 = 4
iOS64 = 4,
WebAssembly = 5
}
public enum RecordArgABI

3
src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs

@ -6301,7 +6301,8 @@ namespace CppSharp @@ -6301,7 +6301,8 @@ namespace CppSharp
Microsoft = 1,
ARM = 2,
iOS = 3,
iOS64 = 4
iOS64 = 4,
WebAssembly = 5
}
public enum RecordArgABI

3
src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs

@ -6301,7 +6301,8 @@ namespace CppSharp @@ -6301,7 +6301,8 @@ namespace CppSharp
Microsoft = 1,
ARM = 2,
iOS = 3,
iOS64 = 4
iOS64 = 4,
WebAssembly = 5
}
public enum RecordArgABI

20
src/CppParser/Decl.h

@ -12,7 +12,12 @@ @@ -12,7 +12,12 @@
#include "Types.h"
#include <algorithm>
namespace CppSharp { namespace CppParser { namespace AST {
namespace CppSharp
{
namespace CppParser
{
namespace AST
{
enum class DeclarationKind
{
@ -124,7 +129,8 @@ public: @@ -124,7 +129,8 @@ public:
CS_IGNORE Class *FindClass(const void *OriginalPtr, const std::string &Name, bool IsComplete,
bool Create);
CS_IGNORE template<typename T> T* FindTemplate(const std::string& USR);
CS_IGNORE template <typename T>
T *FindTemplate(const std::string &USR);
CS_IGNORE Enumeration *FindEnum(const void *OriginalPtr);
CS_IGNORE Enumeration *FindEnum(const std::string &Name, bool Create = false);
@ -465,7 +471,8 @@ enum class CppAbi @@ -465,7 +471,8 @@ enum class CppAbi
Microsoft,
ARM,
iOS,
iOS64
iOS64,
WebAssembly
};
enum class VTableComponentKind
@ -609,7 +616,8 @@ template<typename T> @@ -609,7 +616,8 @@ template<typename T>
T *DeclarationContext::FindTemplate(const std::string &USR)
{
auto foundTemplate = std::find_if(Templates.begin(), Templates.end(),
[&](Template* t) { return t->USR == USR; });
[&](Template *t)
{ return t->USR == USR; });
if (foundTemplate != Templates.end())
return static_cast<T *>(*foundTemplate);
@ -831,4 +839,6 @@ public: @@ -831,4 +839,6 @@ public:
VECTOR(TranslationUnit *, TranslationUnits)
};
} } }
}
}
}

2
src/CppParser/Parser.cpp

@ -104,6 +104,8 @@ static CppAbi GetClassLayoutAbi(clang::TargetCXXABI::Kind abi) @@ -104,6 +104,8 @@ static CppAbi GetClassLayoutAbi(clang::TargetCXXABI::Kind abi)
return CppAbi::iOS;
case clang::TargetCXXABI::AppleARM64:
return CppAbi::iOS64;
case clang::TargetCXXABI::WebAssembly:
return CppAbi::WebAssembly;
default:
llvm_unreachable("Unsupported C++ ABI kind");
}

2
src/Parser/ASTConverter.cs

@ -1719,6 +1719,8 @@ namespace CppSharp @@ -1719,6 +1719,8 @@ namespace CppSharp
return AST.CppAbi.iOS;
case CppAbi.iOS64:
return AST.CppAbi.iOS64;
case CppAbi.WebAssembly:
return AST.CppAbi.WebAssembly;
default:
throw new ArgumentOutOfRangeException("abi");
}

Loading…
Cancel
Save