Browse Source

Added an off by default option for generating abstract implementations because the MS ABI branch does not always work.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/53/head
Dimitar Dobrev 12 years ago
parent
commit
19cb1f5470
  1. 4
      src/Generator/Driver.cs
  2. 7
      src/Generator/Generators/CSharp/CSharpMarshal.cs
  3. 13
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs

4
src/Generator/Driver.cs

@ -148,7 +148,8 @@ namespace CppSharp @@ -148,7 +148,8 @@ namespace CppSharp
TranslationUnitPasses.AddPass(new CheckIgnoredDeclsPass());
TranslationUnitPasses.AddPass(new CheckFlagEnumsPass());
TranslationUnitPasses.AddPass(new CheckDuplicatedNamesPass());
TranslationUnitPasses.AddPass(new GenerateAbstractImplementationsPass());
if (Options.GenerateAbstractImpls)
TranslationUnitPasses.AddPass(new GenerateAbstractImplementationsPass());
}
public void ProcessCode()
@ -262,6 +263,7 @@ namespace CppSharp @@ -262,6 +263,7 @@ namespace CppSharp
public bool GenerateFunctionTemplates;
public bool GeneratePartialClasses;
public bool GenerateVirtualTables;
public bool GenerateAbstractImpls;
public bool GenerateInternalImports;
public string IncludePrefix;
public bool WriteOnlyWhenChanged;

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

@ -216,7 +216,8 @@ namespace CppSharp.Generators.CSharp @@ -216,7 +216,8 @@ namespace CppSharp.Generators.CSharp
instance = copy;
}
if (@class.IsRefType && !@class.IsAbstract)
if (@class.IsRefType &&
(!Context.Driver.Options.GenerateAbstractImpls || !@class.IsAbstract))
{
var instanceName = Generator.GeneratedIdentifier("instance");
if (VarSuffix > 0)
@ -253,7 +254,9 @@ namespace CppSharp.Generators.CSharp @@ -253,7 +254,9 @@ namespace CppSharp.Generators.CSharp
}
Context.Return.Write("new {0}({1})",
QualifiedIdentifier(@class) + (@class.IsAbstract ? "Internal" : ""),
QualifiedIdentifier(@class) +
(Context.Driver.Options.GenerateAbstractImpls && @class.IsAbstract ?
"Internal" : ""),
instance);
return true;

13
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -626,7 +626,8 @@ namespace CppSharp.Generators.CSharp @@ -626,7 +626,8 @@ namespace CppSharp.Generators.CSharp
Write(Helpers.GetAccess(@class));
Write("unsafe ");
if (@class.IsAbstract)
if (Driver.Options.GenerateAbstractImpls &&
@class.IsAbstract)
Write("abstract ");
if (Options.GeneratePartialClasses)
@ -1483,9 +1484,11 @@ namespace CppSharp.Generators.CSharp @@ -1483,9 +1484,11 @@ namespace CppSharp.Generators.CSharp
PushBlock(CSharpBlockKind.Method);
GenerateDeclarationCommon(method);
Write(@class.IsAbstract && method.IsConstructor ? "protected " : "public ");
Write(Driver.Options.GenerateAbstractImpls &&
@class.IsAbstract && method.IsConstructor ? "protected " : "public ");
if (method.IsVirtual && !method.IsOverride && !method.IsPure)
if (method.IsVirtual && !method.IsOverride &&
(!Driver.Options.GenerateAbstractImpls || !method.IsPure))
Write("virtual ");
var isBuiltinOperator = method.IsOperator &&
@ -1497,7 +1500,7 @@ namespace CppSharp.Generators.CSharp @@ -1497,7 +1500,7 @@ namespace CppSharp.Generators.CSharp
if (method.IsOverride)
Write("override ");
if (method.IsPure)
if (Driver.Options.GenerateAbstractImpls && method.IsPure)
Write("abstract ");
var functionName = GetFunctionIdentifier(method);
@ -1511,7 +1514,7 @@ namespace CppSharp.Generators.CSharp @@ -1511,7 +1514,7 @@ namespace CppSharp.Generators.CSharp
Write(")");
if (method.IsPure)
if (Driver.Options.GenerateAbstractImpls && method.IsPure)
{
Write(";");
PopBlock(NewLineKind.BeforeNextBlock);

Loading…
Cancel
Save