Browse Source

Replace the walkTypedefs parameter with Desugar() as it is more clean.

pull/1/head
triton 12 years ago
parent
commit
5da498e3f1
  1. 15
      src/Bridge/Type.cs
  2. 12
      src/Generator/Generators/CLI/CLIMarshal.cs
  3. 2
      src/Generator/Generators/CLI/CLITypePrinter.cs
  4. 12
      src/Generator/Generators/CSharp/CSharpMarshal.cs
  5. 4
      src/Generator/Generators/CSharp/CSharpTypePrinter.cs

15
src/Bridge/Type.cs

@ -13,8 +13,7 @@ namespace Cxxi
{ {
} }
public bool IsPrimitiveType(out PrimitiveType primitive, public bool IsPrimitiveType(out PrimitiveType primitive)
bool walkTypedefs = false)
{ {
var builtin = this as BuiltinType; var builtin = this as BuiltinType;
if (builtin != null) if (builtin != null)
@ -23,22 +22,14 @@ namespace Cxxi
return true; return true;
} }
if (walkTypedefs)
{
var typedef = this as TypedefType;
if (typedef != null)
return typedef.Declaration.Type.IsPrimitiveType(out primitive, true);
}
primitive = PrimitiveType.Null; primitive = PrimitiveType.Null;
return false; return false;
} }
public bool IsPrimitiveType(PrimitiveType primitive, public bool IsPrimitiveType(PrimitiveType primitive)
bool walkTypedefs = false)
{ {
PrimitiveType type; PrimitiveType type;
if (!IsPrimitiveType(out type, walkTypedefs)) if (!IsPrimitiveType(out type))
return false; return false;
return primitive == type; return primitive == type;

12
src/Generator/Generators/CLI/CLIMarshal.cs

@ -43,7 +43,7 @@ namespace Cxxi.Generators.CLI
{ {
var pointee = pointer.Pointee; var pointee = pointer.Pointee;
if (pointee.IsPrimitiveType(PrimitiveType.Void, walkTypedefs: true)) if (pointee.Desugar().IsPrimitiveType(PrimitiveType.Void))
{ {
Context.Return.Write("IntPtr({0})", Context.ReturnVarName); Context.Return.Write("IntPtr({0})", Context.ReturnVarName);
return true; return true;
@ -57,7 +57,7 @@ namespace Cxxi.Generators.CLI
} }
PrimitiveType primitive; PrimitiveType primitive;
if (pointee.IsPrimitiveType(out primitive, walkTypedefs: true)) if (pointee.Desugar().IsPrimitiveType(out primitive))
{ {
Context.Return.Write("IntPtr({0})", Context.ReturnVarName); Context.Return.Write("IntPtr({0})", Context.ReturnVarName);
return true; return true;
@ -325,11 +325,9 @@ namespace Cxxi.Generators.CLI
{ {
var pointee = pointer.Pointee; var pointee = pointer.Pointee;
var isVoidPtr = pointee.IsPrimitiveType(PrimitiveType.Void, var isVoidPtr = pointee.Desugar().IsPrimitiveType(PrimitiveType.Void);
walkTypedefs: true);
var isUInt8Ptr = pointee.IsPrimitiveType(PrimitiveType.UInt8, var isUInt8Ptr = pointee.Desugar().IsPrimitiveType(PrimitiveType.UInt8);
walkTypedefs: true);
if (isVoidPtr || isUInt8Ptr) if (isVoidPtr || isUInt8Ptr)
{ {
@ -416,7 +414,7 @@ namespace Cxxi.Generators.CLI
} }
PrimitiveType primitive; PrimitiveType primitive;
if (decl.Type.IsPrimitiveType(out primitive, walkTypedefs: true)) if (decl.Type.Desugar().IsPrimitiveType(out primitive))
{ {
Context.Return.Write("({0})", typedef.Declaration.Name); Context.Return.Write("({0})", typedef.Declaration.Name);
} }

2
src/Generator/Generators/CLI/CLITypePrinter.cs

@ -131,7 +131,7 @@ namespace Cxxi.Generators.CLI
} }
PrimitiveType primitive; PrimitiveType primitive;
if (pointee.IsPrimitiveType(out primitive, walkTypedefs: true)) if (pointee.Desugar().IsPrimitiveType(out primitive))
{ {
return "System::IntPtr"; return "System::IntPtr";
} }

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

@ -68,7 +68,7 @@ namespace Cxxi.Generators.CSharp
{ {
var pointee = pointer.Pointee; var pointee = pointer.Pointee;
if (pointee.IsPrimitiveType(PrimitiveType.Void, walkTypedefs: true)) if (pointee.Desugar().IsPrimitiveType(PrimitiveType.Void))
{ {
Context.Return.Write("new IntPtr({0})", Context.ReturnVarName); Context.Return.Write("new IntPtr({0})", Context.ReturnVarName);
return true; return true;
@ -82,7 +82,7 @@ namespace Cxxi.Generators.CSharp
} }
PrimitiveType primitive; PrimitiveType primitive;
if (pointee.IsPrimitiveType(out primitive, walkTypedefs: true)) if (pointee.Desugar().IsPrimitiveType(out primitive))
{ {
Context.Return.Write("new IntPtr({0})", Context.ReturnVarName); Context.Return.Write("new IntPtr({0})", Context.ReturnVarName);
return true; return true;
@ -273,11 +273,9 @@ namespace Cxxi.Generators.CSharp
{ {
var pointee = pointer.Pointee; var pointee = pointer.Pointee;
var isVoidPtr = pointee.IsPrimitiveType(PrimitiveType.Void, var isVoidPtr = pointee.Desugar().IsPrimitiveType(PrimitiveType.Void);
walkTypedefs: true);
var isUInt8Ptr = pointee.IsPrimitiveType(PrimitiveType.UInt8, var isUInt8Ptr = pointee.Desugar().IsPrimitiveType(PrimitiveType.UInt8);
walkTypedefs: true);
if (isVoidPtr || isUInt8Ptr) if (isVoidPtr || isUInt8Ptr)
{ {
@ -373,7 +371,7 @@ namespace Cxxi.Generators.CSharp
} }
PrimitiveType primitive; PrimitiveType primitive;
if (decl.Type.IsPrimitiveType(out primitive, walkTypedefs: true)) if (decl.Type.Desugar().IsPrimitiveType(out primitive))
{ {
Context.Return.Write("({0})", typedef.Declaration.Name); Context.Return.Write("({0})", typedef.Declaration.Name);
} }

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

@ -109,8 +109,8 @@ namespace Cxxi.Generators.CSharp
var isManagedContext = ContextKind == CSharpTypePrinterContextKind.Managed; var isManagedContext = ContextKind == CSharpTypePrinterContextKind.Managed;
if (pointee.IsPrimitiveType(PrimitiveType.Void, walkTypedefs: true) || if (pointee.Desugar().IsPrimitiveType(PrimitiveType.Void) ||
pointee.IsPrimitiveType(PrimitiveType.UInt8, walkTypedefs: true)) pointee.Desugar().IsPrimitiveType(PrimitiveType.UInt8))
{ {
return isManagedContext ? "string" : "System.IntPtr"; return isManagedContext ? "string" : "System.IntPtr";
} }

Loading…
Cancel
Save