Browse Source

Merge pull request #27 from ddobrev/master

Fixed finding MinGW symbols; checked the desugared type when visiting pointer types.
pull/25/merge
João Matos 12 years ago
parent
commit
0eb23a5f16
  1. 9
      src/Generator/Generators/CSharp/CSharpMarshal.cs
  2. 3
      src/Generator/Parser.cs
  3. 2
      src/Parser/Parser.cpp
  4. 1
      src/Parser/Parser.h

9
src/Generator/Generators/CSharp/CSharpMarshal.cs

@ -275,8 +275,9 @@ namespace CppSharp.Generators.CSharp
var pointee = pointer.Pointee; var pointee = pointer.Pointee;
if (pointee.IsPrimitiveType(PrimitiveType.Char) || Type type = pointee.Desugar();
pointee.IsPrimitiveType(PrimitiveType.WideChar)) if (type.IsPrimitiveType(PrimitiveType.Char) ||
type.IsPrimitiveType(PrimitiveType.WideChar))
{ {
Context.Return.Write("Marshal.StringToHGlobalAnsi({0})", Context.Return.Write("Marshal.StringToHGlobalAnsi({0})",
Context.Parameter.Name); Context.Parameter.Name);
@ -292,7 +293,7 @@ namespace CppSharp.Generators.CSharp
} }
Class @class; Class @class;
if (pointee.Desugar().IsTagDecl(out @class) && @class.IsValueType) if (type.IsTagDecl(out @class) && @class.IsValueType)
{ {
if (Context.Parameter.Usage == ParameterUsage.Out) if (Context.Parameter.Usage == ParameterUsage.Out)
{ {
@ -312,7 +313,7 @@ namespace CppSharp.Generators.CSharp
} }
PrimitiveType primitive; PrimitiveType primitive;
if (pointee.IsPrimitiveType(out primitive)) if (type.IsPrimitiveType(out primitive))
{ {
Context.Return.Write(Context.Parameter.Name); Context.Return.Write(Context.Parameter.Name);
return true; return true;

3
src/Generator/Parser.cs

@ -52,7 +52,8 @@ namespace CppSharp
NoBuiltinIncludes = options.NoBuiltinIncludes, NoBuiltinIncludes = options.NoBuiltinIncludes,
MicrosoftMode = options.MicrosoftMode, MicrosoftMode = options.MicrosoftMode,
ToolSetToUse = options.ToolsetToUse, ToolSetToUse = options.ToolsetToUse,
TargetTriple = options.TargetTriple TargetTriple = options.TargetTriple,
Abi = options.Abi
}; };
var result = ClangParser.ParseHeader(parserOptions); var result = ClangParser.ParseHeader(parserOptions);

2
src/Parser/Parser.cpp

@ -114,7 +114,7 @@ void Parser::SetupHeader()
C->setInvocation(Inv); C->setInvocation(Inv);
TargetOptions& TO = Inv->getTargetOpts(); TargetOptions& TO = Inv->getTargetOpts();
TargetABI = Opts->MicrosoftMode ? TargetCXXABI::Microsoft TargetABI = (Opts->Abi == CppSharp::AST::CppAbi::Microsoft) ? TargetCXXABI::Microsoft
: TargetCXXABI::GenericItanium; : TargetCXXABI::GenericItanium;
TO.CXXABI = GetCXXABIString(TargetABI); TO.CXXABI = GetCXXABIString(TargetABI);

1
src/Parser/Parser.h

@ -66,6 +66,7 @@ public ref struct ParserOptions
bool NoStandardIncludes; bool NoStandardIncludes;
bool NoBuiltinIncludes; bool NoBuiltinIncludes;
bool MicrosoftMode; bool MicrosoftMode;
CppSharp::AST::CppAbi Abi;
bool Verbose; bool Verbose;
}; };

Loading…
Cancel
Save