Browse Source

CppTypePrinter now takes a BindingContext for further usage in type maps handling.

pull/1316/head
João Matos 6 years ago committed by João Matos
parent
commit
55a31b05bf
  1. 6
      src/CppParser/Bootstrap/Bootstrap.cs
  2. 16
      src/Generator.Tests/AST/TestAST.cs
  3. 2
      src/Generator/Generators/C/CCodeGenerator.cs
  4. 2
      src/Generator/Generators/C/CppGenerator.cs
  5. 15
      src/Generator/Generators/C/CppMarshal.cs
  6. 3
      src/Generator/Generators/C/CppSources.cs
  7. 8
      src/Generator/Generators/C/CppTypePrinter.cs
  8. 2
      src/Generator/Generators/CLI/CLIHeaders.cs
  9. 10
      src/Generator/Generators/CLI/CLIMarshal.cs
  10. 10
      src/Generator/Generators/CLI/CLISources.cs
  11. 8
      src/Generator/Generators/CLI/CLITypePrinter.cs
  12. 2
      src/Generator/Generators/CSharp/CSharpMarshal.cs
  13. 2
      src/Generator/Generators/CSharp/CSharpSourcesExtensions.cs
  14. 2
      src/Generator/Passes/CheckIgnoredDecls.cs
  15. 12
      src/Generator/Passes/SymbolsCodeGenerator.cs
  16. 2
      src/Generator/Types/Std/Stdlib.cs
  17. 4
      src/Generator/Types/TypeMapDatabase.cs

6
src/CppParser/Bootstrap/Bootstrap.cs

@ -116,6 +116,9 @@ namespace CppSharp
exprCxxUnit.Visit(exprSubclassVisitor); exprCxxUnit.Visit(exprSubclassVisitor);
ExprClasses = exprSubclassVisitor.Classes; ExprClasses = exprSubclassVisitor.Classes;
CodeGeneratorHelpers.CppTypePrinter = new CppTypePrinter(driver.Context)
{ ScopeKind = TypePrintScopeKind.Local };
GenerateStmt(driver.Context); GenerateStmt(driver.Context);
GenerateExpr(driver.Context); GenerateExpr(driver.Context);
} }
@ -1492,8 +1495,7 @@ namespace CppSharp
static class CodeGeneratorHelpers static class CodeGeneratorHelpers
{ {
internal static CppTypePrinter CppTypePrinter = internal static CppTypePrinter CppTypePrinter;
new CppTypePrinter { ScopeKind = TypePrintScopeKind.Local };
public static bool IsAbstractStmt(Class @class) => IsAbstractStmt(@class.Name); public static bool IsAbstractStmt(Class @class) => IsAbstractStmt(@class.Name);

16
src/Generator.Tests/AST/TestAST.cs

@ -2,6 +2,7 @@ using System;
using System.Linq; using System.Linq;
using CppSharp.AST; using CppSharp.AST;
using CppSharp.AST.Extensions; using CppSharp.AST.Extensions;
using CppSharp.Generators;
using CppSharp.Generators.C; using CppSharp.Generators.C;
using CppSharp.Generators.CSharp; using CppSharp.Generators.CSharp;
using CppSharp.Passes; using CppSharp.Passes;
@ -12,9 +13,14 @@ namespace CppSharp.Generator.Tests.AST
[TestFixture] [TestFixture]
public class TestAST : ASTTestFixture public class TestAST : ASTTestFixture
{ {
private BindingContext Context;
[OneTimeSetUp] [OneTimeSetUp]
public void Init() public void Init()
{ {
Context = new BindingContext(new DriverOptions());
Context.TypeMaps = new Types.TypeMapDatabase(Context);
CppSharp.AST.Type.TypePrinterDelegate = type => CppSharp.AST.Type.TypePrinterDelegate = type =>
{ {
PrimitiveType primitiveType; PrimitiveType primitiveType;
@ -473,7 +479,7 @@ namespace CppSharp.Generator.Tests.AST
[Test] [Test]
public void TestPrintingConstPointerWithConstType() public void TestPrintingConstPointerWithConstType()
{ {
var cppTypePrinter = new CppTypePrinter { ScopeKind = TypePrintScopeKind.Qualified }; var cppTypePrinter = new CppTypePrinter(Context) { ScopeKind = TypePrintScopeKind.Qualified };
var builtin = new BuiltinType(PrimitiveType.Char); var builtin = new BuiltinType(PrimitiveType.Char);
var pointee = new QualifiedType(builtin, new TypeQualifiers { IsConst = true }); var pointee = new QualifiedType(builtin, new TypeQualifiers { IsConst = true });
var pointer = new QualifiedType(new PointerType(pointee), new TypeQualifiers { IsConst = true }); var pointer = new QualifiedType(new PointerType(pointee), new TypeQualifiers { IsConst = true });
@ -485,7 +491,7 @@ namespace CppSharp.Generator.Tests.AST
public void TestPrintingSpecializationWithConstValue() public void TestPrintingSpecializationWithConstValue()
{ {
var template = AstContext.FindDecl<ClassTemplate>("TestSpecializationArguments").First(); var template = AstContext.FindDecl<ClassTemplate>("TestSpecializationArguments").First();
var cppTypePrinter = new CppTypePrinter { ScopeKind = TypePrintScopeKind.Qualified }; var cppTypePrinter = new CppTypePrinter(Context) { ScopeKind = TypePrintScopeKind.Qualified };
Assert.That(template.Specializations.Last().Visit(cppTypePrinter).Type, Assert.That(template.Specializations.Last().Visit(cppTypePrinter).Type,
Is.EqualTo("TestSpecializationArguments<const TestASTEnumItemByName>")); Is.EqualTo("TestSpecializationArguments<const TestASTEnumItemByName>"));
} }
@ -537,7 +543,7 @@ namespace CppSharp.Generator.Tests.AST
[Test] [Test]
public void TestVolatile() public void TestVolatile()
{ {
var cppTypePrinter = new CppTypePrinter { ScopeKind = TypePrintScopeKind.Qualified }; var cppTypePrinter = new CppTypePrinter(Context) { ScopeKind = TypePrintScopeKind.Qualified };
var builtin = new BuiltinType(PrimitiveType.Char); var builtin = new BuiltinType(PrimitiveType.Char);
var pointee = new QualifiedType(builtin, new TypeQualifiers { IsConst = true, IsVolatile = true }); var pointee = new QualifiedType(builtin, new TypeQualifiers { IsConst = true, IsVolatile = true });
var type = pointee.Visit(cppTypePrinter).Type; var type = pointee.Visit(cppTypePrinter).Type;
@ -555,7 +561,7 @@ namespace CppSharp.Generator.Tests.AST
public void TestPrintNestedInSpecialization() public void TestPrintNestedInSpecialization()
{ {
var template = AstContext.FindDecl<ClassTemplate>("TestTemplateClass").First(); var template = AstContext.FindDecl<ClassTemplate>("TestTemplateClass").First();
var cppTypePrinter = new CppTypePrinter { ScopeKind = TypePrintScopeKind.Qualified }; var cppTypePrinter = new CppTypePrinter(Context) { ScopeKind = TypePrintScopeKind.Qualified };
Assert.That(template.Specializations[3].Classes.First().Visit(cppTypePrinter).Type, Assert.That(template.Specializations[3].Classes.First().Visit(cppTypePrinter).Type,
Is.EqualTo("TestTemplateClass<Math::Complex>::NestedInTemplate")); Is.EqualTo("TestTemplateClass<Math::Complex>::NestedInTemplate"));
} }
@ -564,7 +570,7 @@ namespace CppSharp.Generator.Tests.AST
public void TestPrintQualifiedSpecialization() public void TestPrintQualifiedSpecialization()
{ {
var functionWithSpecializationArg = AstContext.FindFunction("functionWithSpecializationArg").First(); var functionWithSpecializationArg = AstContext.FindFunction("functionWithSpecializationArg").First();
var cppTypePrinter = new CppTypePrinter { ScopeKind = TypePrintScopeKind.Qualified }; var cppTypePrinter = new CppTypePrinter(Context) { ScopeKind = TypePrintScopeKind.Qualified };
Assert.That(functionWithSpecializationArg.Parameters[0].Visit(cppTypePrinter).Type, Assert.That(functionWithSpecializationArg.Parameters[0].Visit(cppTypePrinter).Type,
Is.EqualTo("const TestTemplateClass<int>")); Is.EqualTo("const TestTemplateClass<int>"));
} }

2
src/Generator/Generators/C/CCodeGenerator.cs

@ -32,7 +32,7 @@ namespace CppSharp.Generators.C
: base(context, units) : base(context, units)
{ {
VisitOptions.VisitPropertyAccessors = true; VisitOptions.VisitPropertyAccessors = true;
typePrinter = new CppTypePrinter(); typePrinter = new CppTypePrinter(context);
} }
public abstract override string FileExtension { get; } public abstract override string FileExtension { get; }

2
src/Generator/Generators/C/CppGenerator.cs

@ -14,7 +14,7 @@ namespace CppSharp.Generators.Cpp
public CppGenerator(BindingContext context) : base(context) public CppGenerator(BindingContext context) : base(context)
{ {
typePrinter = new CppTypePrinter(); typePrinter = new CppTypePrinter(Context);
} }
public override List<CodeGenerator> Generate(IEnumerable<TranslationUnit> units) public override List<CodeGenerator> Generate(IEnumerable<TranslationUnit> units)

15
src/Generator/Generators/C/CppMarshal.cs

@ -77,7 +77,8 @@ namespace CppSharp.Generators.Cpp
if (pointer.GetFinalQualifiedPointee().Qualifiers.IsConst != if (pointer.GetFinalQualifiedPointee().Qualifiers.IsConst !=
Context.ReturnType.Qualifiers.IsConst) Context.ReturnType.Qualifiers.IsConst)
{ {
var nativeTypePrinter = new CppTypePrinter { PrintTypeQualifiers = false }; var nativeTypePrinter = new CppTypePrinter(Context.Context)
{ PrintTypeQualifiers = false };
var returnType = Context.ReturnType.Type.Desugar(); var returnType = Context.ReturnType.Type.Desugar();
var constlessPointer = new PointerType() var constlessPointer = new PointerType()
{ {
@ -98,7 +99,7 @@ namespace CppSharp.Generators.Cpp
Modifier = pointer.Modifier, Modifier = pointer.Modifier,
QualifiedPointee = new QualifiedType(pointee) QualifiedPointee = new QualifiedType(pointee)
}; };
var nativeTypePrinter = new CppTypePrinter(); var nativeTypePrinter = new CppTypePrinter(Context.Context);
var nativeTypeName = desugaredPointer.Visit(nativeTypePrinter, quals); var nativeTypeName = desugaredPointer.Visit(nativeTypePrinter, quals);
Context.Return.Write("reinterpret_cast<{0}>({1})", nativeTypeName, Context.Return.Write("reinterpret_cast<{0}>({1})", nativeTypeName,
returnVarName); returnVarName);
@ -300,7 +301,7 @@ namespace CppSharp.Generators.Cpp
public override bool VisitEnumDecl(Enumeration @enum) public override bool VisitEnumDecl(Enumeration @enum)
{ {
var typePrinter = new CppTypePrinter(); var typePrinter = new CppTypePrinter(Context.Context);
var typeName = typePrinter.VisitDeclaration(@enum); var typeName = typePrinter.VisitDeclaration(@enum);
Context.Return.Write($"({typeName}){Context.ReturnVarName}"); Context.Return.Write($"({typeName}){Context.ReturnVarName}");
@ -393,7 +394,7 @@ namespace CppSharp.Generators.Cpp
if (pointee is FunctionType) if (pointee is FunctionType)
{ {
var cppTypePrinter = new CppTypePrinter(); var cppTypePrinter = new CppTypePrinter(Context.Context);
var cppTypeName = pointer.Visit(cppTypePrinter, quals); var cppTypeName = pointer.Visit(cppTypePrinter, quals);
return VisitDelegateType(cppTypeName); return VisitDelegateType(cppTypeName);
@ -422,7 +423,7 @@ namespace CppSharp.Generators.Cpp
var finalPointee = pointer.GetFinalPointee(); var finalPointee = pointer.GetFinalPointee();
if (finalPointee.IsPrimitiveType()) if (finalPointee.IsPrimitiveType())
{ {
var cppTypePrinter = new CppTypePrinter(); var cppTypePrinter = new CppTypePrinter(Context.Context);
var cppTypeName = pointer.Visit(cppTypePrinter, quals); var cppTypeName = pointer.Visit(cppTypePrinter, quals);
Context.Return.Write($"({cppTypeName})"); Context.Return.Write($"({cppTypeName})");
@ -485,14 +486,14 @@ namespace CppSharp.Generators.Cpp
FunctionType func; FunctionType func;
if (decl.Type.IsPointerTo(out func)) if (decl.Type.IsPointerTo(out func))
{ {
var typePrinter = new CppTypePrinter(Context.Context);
// Use the original typedef name if available, otherwise just use the function pointer type // Use the original typedef name if available, otherwise just use the function pointer type
string cppTypeName; string cppTypeName;
if (!decl.IsSynthetized) if (!decl.IsSynthetized)
cppTypeName = "::" + typedef.Declaration.QualifiedOriginalName; cppTypeName = "::" + typedef.Declaration.QualifiedOriginalName;
else else
{ {
var cppTypePrinter = new CppTypePrinter(); cppTypeName = decl.Type.Visit(typePrinter, quals);
cppTypeName = decl.Type.Visit(cppTypePrinter, quals);
} }
VisitDelegateType(cppTypeName); VisitDelegateType(cppTypeName);

3
src/Generator/Generators/C/CppSources.cs

@ -591,8 +591,7 @@ namespace CppSharp.Generators.Cpp
if (isRef) if (isRef)
{ {
var typePrinter = new CppTypePrinter(); var type = paramType.Visit(CTypePrinter);
var type = paramType.Visit(typePrinter);
if (param.IsInOut) if (param.IsInOut)
{ {

8
src/Generator/Generators/C/CppTypePrinter.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using CppSharp.AST; using CppSharp.AST;
using CppSharp.AST.Extensions; using CppSharp.AST.Extensions;
using CppSharp.Types;
namespace CppSharp.Generators.C namespace CppSharp.Generators.C
{ {
@ -21,14 +22,19 @@ namespace CppSharp.Generators.C
public bool PrintTypeModifiers { get; set; } public bool PrintTypeModifiers { get; set; }
public bool PrintVariableArrayAsPointers { get; set; } public bool PrintVariableArrayAsPointers { get; set; }
public CppTypePrinter() : base(TypePrinterContextKind.Managed) public CppTypePrinter(BindingContext context) : base(TypePrinterContextKind.Managed)
{ {
Context = context;
PrintFlavorKind = CppTypePrintFlavorKind.Cpp; PrintFlavorKind = CppTypePrintFlavorKind.Cpp;
ScopeKind = TypePrintScopeKind.GlobalQualified; ScopeKind = TypePrintScopeKind.GlobalQualified;
PrintTypeQualifiers = true; PrintTypeQualifiers = true;
PrintTypeModifiers = true; PrintTypeModifiers = true;
} }
public BindingContext Context { get; private set; }
public TypeMapDatabase TypeMapDatabase => Context.TypeMaps;
public DriverOptions Options => Context.Options;
public bool ResolveTypedefs { get; set; } public bool ResolveTypedefs { get; set; }
public override TypePrinterResult VisitTagType(TagType tag, TypeQualifiers quals) public override TypePrinterResult VisitTagType(TagType tag, TypeQualifiers quals)

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

@ -465,7 +465,7 @@ namespace CppSharp.Generators.CLI
{ {
if (!@event.IsGenerated) continue; if (!@event.IsGenerated) continue;
var cppTypePrinter = new CppTypePrinter(); var cppTypePrinter = new CppTypePrinter(Context);
var cppArgs = cppTypePrinter.VisitParameters(@event.Parameters, hasNames: true); var cppArgs = cppTypePrinter.VisitParameters(@event.Parameters, hasNames: true);
WriteLine("private:"); WriteLine("private:");

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

@ -119,7 +119,7 @@ namespace CppSharp.Generators.CLI
if (pointer.GetFinalQualifiedPointee().Qualifiers.IsConst != if (pointer.GetFinalQualifiedPointee().Qualifiers.IsConst !=
Context.ReturnType.Qualifiers.IsConst) Context.ReturnType.Qualifiers.IsConst)
{ {
var nativeTypePrinter = new CppTypePrinter { PrintTypeQualifiers = false }; var nativeTypePrinter = new CppTypePrinter(Context.Context) { PrintTypeQualifiers = false };
var returnType = Context.ReturnType.Type.Desugar(); var returnType = Context.ReturnType.Type.Desugar();
var constlessPointer = new PointerType() var constlessPointer = new PointerType()
{ {
@ -139,7 +139,7 @@ namespace CppSharp.Generators.CLI
Modifier = pointer.Modifier, Modifier = pointer.Modifier,
QualifiedPointee = new QualifiedType(pointee) QualifiedPointee = new QualifiedType(pointee)
}; };
var nativeTypePrinter = new CppTypePrinter(); var nativeTypePrinter = new CppTypePrinter(Context.Context);
var nativeTypeName = desugaredPointer.Visit(nativeTypePrinter, quals); var nativeTypeName = desugaredPointer.Visit(nativeTypePrinter, quals);
Context.Return.Write("reinterpret_cast<{0}>({1})", nativeTypeName, Context.Return.Write("reinterpret_cast<{0}>({1})", nativeTypeName,
returnVarName); returnVarName);
@ -504,7 +504,7 @@ namespace CppSharp.Generators.CLI
if (pointee is FunctionType) if (pointee is FunctionType)
{ {
var cppTypePrinter = new CppTypePrinter(); var cppTypePrinter = new CppTypePrinter(Context.Context);
var cppTypeName = pointer.Visit(cppTypePrinter, quals); var cppTypeName = pointer.Visit(cppTypePrinter, quals);
return VisitDelegateType(cppTypeName); return VisitDelegateType(cppTypeName);
@ -533,7 +533,7 @@ namespace CppSharp.Generators.CLI
var finalPointee = pointer.GetFinalPointee(); var finalPointee = pointer.GetFinalPointee();
if (finalPointee.IsPrimitiveType()) if (finalPointee.IsPrimitiveType())
{ {
var cppTypePrinter = new CppTypePrinter(); var cppTypePrinter = new CppTypePrinter(Context.Context);
var cppTypeName = pointer.Visit(cppTypePrinter, quals); var cppTypeName = pointer.Visit(cppTypePrinter, quals);
Context.Return.Write("({0})", cppTypeName); Context.Return.Write("({0})", cppTypeName);
@ -602,7 +602,7 @@ namespace CppSharp.Generators.CLI
cppTypeName = "::" + typedef.Declaration.QualifiedOriginalName; cppTypeName = "::" + typedef.Declaration.QualifiedOriginalName;
else else
{ {
var cppTypePrinter = new CppTypePrinter(); var cppTypePrinter = new CppTypePrinter(Context.Context);
cppTypeName = decl.Type.Visit(cppTypePrinter, quals); cppTypeName = decl.Type.Visit(cppTypePrinter, quals);
} }

10
src/Generator/Generators/CLI/CLISources.cs

@ -528,7 +528,7 @@ namespace CppSharp.Generators.CLI
WriteLine("if (!{0}Instance)", delegateName); WriteLine("if (!{0}Instance)", delegateName);
WriteOpenBraceAndIndent(); WriteOpenBraceAndIndent();
var typePrinter = new CppTypePrinter(); var typePrinter = new CppTypePrinter(Context);
var args = typePrinter.VisitParameters(@event.Parameters, hasNames: false); var args = typePrinter.VisitParameters(@event.Parameters, hasNames: false);
WriteLine("{0}Instance = gcnew {0}(this, &{1}::_{2}Raise);", WriteLine("{0}Instance = gcnew {0}(this, &{1}::_{2}Raise);",
@ -578,7 +578,7 @@ namespace CppSharp.Generators.CLI
private void GenerateEventRaiseWrapper(Event @event, Class @class) private void GenerateEventRaiseWrapper(Event @event, Class @class)
{ {
var typePrinter = new CppTypePrinter(); var typePrinter = new CppTypePrinter(Context);
var args = typePrinter.VisitParameters(@event.Parameters, hasNames: true); var args = typePrinter.VisitParameters(@event.Parameters, hasNames: true);
WriteLine("void {0}::_{1}Raise({2})", QualifiedIdentifier(@class), WriteLine("void {0}::_{1}Raise({2})", QualifiedIdentifier(@class),
@ -716,7 +716,7 @@ namespace CppSharp.Generators.CLI
// We cast the value to the base clas type since otherwise there // We cast the value to the base clas type since otherwise there
// could be ambiguous call to overloaded constructors. // could be ambiguous call to overloaded constructors.
var cppTypePrinter = new CppTypePrinter(); var cppTypePrinter = new CppTypePrinter(Context);
var nativeTypeName = baseClass.Visit(cppTypePrinter); var nativeTypeName = baseClass.Visit(cppTypePrinter);
Write("({0}*)", nativeTypeName); Write("({0}*)", nativeTypeName);
@ -968,7 +968,7 @@ namespace CppSharp.Generators.CLI
function.OperatorKind == CXXOperatorKind.ExplicitConversion) function.OperatorKind == CXXOperatorKind.ExplicitConversion)
{ {
var method = function as Method; var method = function as Method;
var typePrinter = new CppTypePrinter(); var typePrinter = new CppTypePrinter(Context);
var typeName = method.ConversionType.Visit(typePrinter); var typeName = method.ConversionType.Visit(typePrinter);
WriteLine("({0}) {1};", typeName, @params[0].Name); WriteLine("({0}) {1};", typeName, @params[0].Name);
} }
@ -1179,7 +1179,7 @@ namespace CppSharp.Generators.CLI
if (isRef) if (isRef)
{ {
var typePrinter = new CppTypePrinter(); var typePrinter = new CppTypePrinter(Context);
var type = paramType.Visit(typePrinter); var type = paramType.Visit(typePrinter);
if (param.IsInOut) if (param.IsInOut)

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

@ -11,14 +11,8 @@ namespace CppSharp.Generators.CLI
{ {
public class CLITypePrinter : CppTypePrinter public class CLITypePrinter : CppTypePrinter
{ {
public BindingContext Context { get; private set; } public CLITypePrinter(BindingContext context) : base(context)
public DriverOptions Options { get { return Context.Options; } }
public TypeMapDatabase TypeMapDatabase { get { return Context.TypeMaps; } }
public CLITypePrinter(BindingContext context)
{ {
Context = context;
} }
public override TypePrinterResult VisitTagType(TagType tag, TypeQualifiers quals) public override TypePrinterResult VisitTagType(TagType tag, TypeQualifiers quals)

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

@ -588,7 +588,7 @@ namespace CppSharp.Generators.CSharp
var local = Generator.GeneratedIdentifier($@"{ var local = Generator.GeneratedIdentifier($@"{
param.Name}{Context.ParameterIndex}"); param.Name}{Context.ParameterIndex}");
string cast = isVoid ? $@"({pointee.Visit( string cast = isVoid ? $@"({pointee.Visit(
new CppTypePrinter { PrintTypeQualifiers = false })}) " : string.Empty; new CppTypePrinter(Context.Context) { PrintTypeQualifiers = false })}) " : string.Empty;
Context.Before.WriteLine($"var {local} = {cast}{Context.Return};"); Context.Before.WriteLine($"var {local} = {cast}{Context.Return};");
Context.Return.StringBuilder.Clear(); Context.Return.StringBuilder.Clear();
Context.Return.Write(local); Context.Return.Write(local);

2
src/Generator/Generators/CSharp/CSharpSourcesExtensions.cs

@ -124,7 +124,7 @@ namespace CppSharp.Generators.CSharp
var names = new List<string> { mapped.OriginalName }; var names = new List<string> { mapped.OriginalName };
foreach (TypePrintScopeKind kind in Enum.GetValues(typeof(TypePrintScopeKind))) foreach (TypePrintScopeKind kind in Enum.GetValues(typeof(TypePrintScopeKind)))
{ {
var cppTypePrinter = new CppTypePrinter { ScopeKind = kind }; var cppTypePrinter = new CppTypePrinter(context) { ScopeKind = kind };
names.Add(mapped.Visit(cppTypePrinter)); names.Add(mapped.Visit(cppTypePrinter));
} }
foreach (var name in names.Where(context.TypeMaps.TypeMaps.ContainsKey)) foreach (var name in names.Where(context.TypeMaps.TypeMaps.ContainsKey))

2
src/Generator/Passes/CheckIgnoredDecls.cs

@ -116,7 +116,7 @@ namespace CppSharp.Passes
var @class = (Class)field.Namespace; var @class = (Class)field.Namespace;
var cppTypePrinter = new CppTypePrinter(); var cppTypePrinter = new CppTypePrinter(Context);
var typeName = field.Type.Visit(cppTypePrinter); var typeName = field.Type.Visit(cppTypePrinter);
Diagnostics.Debug("Field '{0}::{1}' was ignored due to {2} type '{3}'", Diagnostics.Debug("Field '{0}::{1}' was ignored due to {2} type '{3}'",

12
src/Generator/Passes/SymbolsCodeGenerator.cs

@ -16,6 +16,11 @@ namespace CppSharp.Passes
public SymbolsCodeGenerator(BindingContext context, IEnumerable<TranslationUnit> units) public SymbolsCodeGenerator(BindingContext context, IEnumerable<TranslationUnit> units)
: base(context, units) : base(context, units)
{ {
cppTypePrinter = new CppTypePrinter(Context)
{
ScopeKind = TypePrintScopeKind.Qualified,
ResolveTypedefs = true
};
} }
public override void Process() public override void Process()
@ -349,11 +354,8 @@ namespace CppSharp.Passes
return parentsOpen; return parentsOpen;
} }
private CppTypePrinter cppTypePrinter = new CppTypePrinter private CppTypePrinter cppTypePrinter;
{
ScopeKind = TypePrintScopeKind.Qualified,
ResolveTypedefs = true
};
private int functionCount; private int functionCount;
} }
} }

2
src/Generator/Types/Std/Stdlib.cs

@ -502,7 +502,7 @@ namespace CppSharp.Types.Std
var tmpVarName = "_tmp" + entryString; var tmpVarName = "_tmp" + entryString;
var cppTypePrinter = new CppTypePrinter(); var cppTypePrinter = new CppTypePrinter(Context);
var nativeType = type.Type.Visit(cppTypePrinter); var nativeType = type.Type.Visit(cppTypePrinter);
ctx.Before.WriteLine("auto {0} = std::vector<{1}>();", ctx.Before.WriteLine("auto {0} = std::vector<{1}>();",

4
src/Generator/Types/TypeMapDatabase.cs

@ -11,9 +11,11 @@ namespace CppSharp.Types
public class TypeMapDatabase : ITypeMapDatabase public class TypeMapDatabase : ITypeMapDatabase
{ {
public IDictionary<string, TypeMap> TypeMaps { get; set; } public IDictionary<string, TypeMap> TypeMaps { get; set; }
private readonly BindingContext Context;
public TypeMapDatabase(BindingContext bindingContext) public TypeMapDatabase(BindingContext bindingContext)
{ {
Context = bindingContext;
TypeMaps = new Dictionary<string, TypeMap>(); TypeMaps = new Dictionary<string, TypeMap>();
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{ {
@ -87,7 +89,7 @@ namespace CppSharp.Types
bool printExtra = desugared.IsPrimitiveType() || bool printExtra = desugared.IsPrimitiveType() ||
(desugared.GetFinalPointee() ?? desugared).Desugar().IsPrimitiveType(); (desugared.GetFinalPointee() ?? desugared).Desugar().IsPrimitiveType();
var typePrinter = new CppTypePrinter var typePrinter = new CppTypePrinter(Context)
{ {
PrintTypeQualifiers = printExtra, PrintTypeQualifiers = printExtra,
PrintTypeModifiers = printExtra, PrintTypeModifiers = printExtra,

Loading…
Cancel
Save