Browse Source

Fixed the generated C# when having a field of type char*.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/685/head
Dimitar Dobrev 9 years ago
parent
commit
397d82b2a1
  1. 4
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs
  2. 2
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std.cs
  3. 4
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs
  4. 5
      src/CppParser/Parser.cpp
  5. 4
      src/Generator/Generators/CSharp/CSharpSources.cs

4
src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/Std.cs

@ -90,7 +90,7 @@ namespace std @@ -90,7 +90,7 @@ namespace std
}
}
public unsafe partial class _Alloc_construct
public unsafe partial class _Has_no_alloc_construct_tag
{
[StructLayout(LayoutKind.Explicit, Size = 0)]
public partial struct Internal
@ -98,7 +98,7 @@ namespace std @@ -98,7 +98,7 @@ namespace std
}
}
public unsafe partial class _Alloc_destroy
public unsafe partial class _Has_no_alloc_destroy_tag
{
[StructLayout(LayoutKind.Explicit, Size = 0)]
public partial struct Internal

2
src/CppParser/Bindings/CSharp/x86_64-linux-gnu/Std.cs

@ -170,7 +170,7 @@ namespace std @@ -170,7 +170,7 @@ namespace std
{
get
{
return ((Internal*) __Instance)->_M_p;
return (sbyte*) ((Internal*) __Instance)->_M_p;
}
set

4
src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/Std.cs

@ -90,7 +90,7 @@ namespace std @@ -90,7 +90,7 @@ namespace std
}
}
public unsafe partial class _Alloc_construct
public unsafe partial class _Has_no_alloc_construct_tag
{
[StructLayout(LayoutKind.Explicit, Size = 0)]
public partial struct Internal
@ -98,7 +98,7 @@ namespace std @@ -98,7 +98,7 @@ namespace std
}
}
public unsafe partial class _Alloc_destroy
public unsafe partial class _Has_no_alloc_destroy_tag
{
[StructLayout(LayoutKind.Explicit, Size = 0)]
public partial struct Internal

5
src/CppParser/Parser.cpp

@ -3172,8 +3172,11 @@ AST::Expression* Parser::WalkExpression(clang::Expr* Expr) @@ -3172,8 +3172,11 @@ AST::Expression* Parser::WalkExpression(clang::Expr* Expr)
case Stmt::ImplicitCastExprClass:
return WalkExpression(cast<CastExpr>(Expr)->getSubExprAsWritten());
case Stmt::CXXOperatorCallExprClass:
{
auto OperatorCallExpr = cast<CXXOperatorCallExpr>(Expr);
return new AST::Expression(GetStringFromStatement(Expr), StatementClass::CXXOperatorCallExpr,
WalkDeclaration(cast<CXXOperatorCallExpr>(Expr)->getCalleeDecl()));
OperatorCallExpr->getCalleeDecl() ? WalkDeclaration(OperatorCallExpr->getCalleeDecl()) : 0);
}
case Stmt::CXXConstructExprClass:
case Stmt::CXXTemporaryObjectExprClass:
{

4
src/Generator/Generators/CSharp/CSharpSources.cs

@ -1143,7 +1143,9 @@ namespace CppSharp.Generators.CSharp @@ -1143,7 +1143,9 @@ namespace CppSharp.Generators.CSharp
{
var final = field.Type.GetFinalPointee().Desugar();
if (final.IsPrimitiveType() && !final.IsPrimitiveType(PrimitiveType.Void) &&
!final.IsPrimitiveType(PrimitiveType.Char))
(!final.IsPrimitiveType(PrimitiveType.Char) ||
(!Driver.Options.MarshalCharAsManagedChar &&
!((PointerType) field.Type).QualifiedPointee.Qualifiers.IsConst)))
@return = string.Format("({0}*) {1}", field.Type.GetPointee().Desugar(), @return);
}
WriteLine("return {0};", @return);

Loading…
Cancel
Save