Browse Source

Stored the original class in its interface replacement used with multiple inheritance.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/68/head
Dimitar Dobrev 12 years ago
parent
commit
1962751cb8
  1. 2
      src/AST/Class.cs
  2. 5
      src/Generator/Generators/CSharp/CSharpMarshal.cs
  3. 13
      src/Generator/Generators/CSharp/CSharpTypePrinter.cs
  4. 6
      src/Generator/Passes/MultipleInheritancePass.cs

2
src/AST/Class.cs

@ -141,6 +141,8 @@ namespace CppSharp.AST @@ -141,6 +141,8 @@ namespace CppSharp.AST
}
}
public Class OriginalClass { get; set; }
public bool IsValueType
{
get { return Type == ClassType.ValueType || IsUnion; }

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

@ -541,9 +541,8 @@ namespace CppSharp.Generators.CSharp @@ -541,9 +541,8 @@ namespace CppSharp.Generators.CSharp
return;
}
var qualifiedIdentifier = CSharpMarshalNativeToManagedPrinter.QualifiedIdentifier(@class);
if (@class.IsInterface)
qualifiedIdentifier = qualifiedIdentifier.Substring(1);
var qualifiedIdentifier = CSharpMarshalNativeToManagedPrinter.QualifiedIdentifier(
@class.OriginalClass ?? @class);
Context.Return.Write("*({0}.Internal*){1}.{2}", qualifiedIdentifier,
Helpers.SafeIdentifier(Context.Parameter.Name), Helpers.InstanceIdentifier);
}

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

@ -349,16 +349,11 @@ namespace CppSharp.Generators.CSharp @@ -349,16 +349,11 @@ namespace CppSharp.Generators.CSharp
public CSharpTypePrinterResult VisitClassDecl(Class @class)
{
var nestedName = GetNestedQualifiedName(@class);
if (ContextKind == CSharpTypePrinterContextKind.Native)
{
if (@class.IsInterface)
nestedName = nestedName.Substring(1);
return string.Format("{0}.Internal", nestedName);
}
return nestedName;
return string.Format("{0}.Internal",
GetNestedQualifiedName(@class.OriginalClass ?? @class));
return GetNestedQualifiedName(@class);
}
public CSharpTypePrinterResult VisitFieldDecl(Field field)

6
src/Generator/Passes/MultipleInheritancePass.cs

@ -39,8 +39,7 @@ namespace CppSharp.Passes @@ -39,8 +39,7 @@ namespace CppSharp.Passes
if (@base.CompleteDeclaration != null)
@base = (Class) @base.CompleteDeclaration;
var name = "I" + @base.Name;
var @interface = (this.interfaces.ContainsKey(@base)
? this.interfaces[@base]
var @interface = (interfaces.ContainsKey(@base) ? interfaces[@base]
: @base.Namespace.Classes.FirstOrDefault(c => c.Name == name)) ??
GetNewInterface(@class, name, @base, addMembers);
return @interface;
@ -53,7 +52,8 @@ namespace CppSharp.Passes @@ -53,7 +52,8 @@ namespace CppSharp.Passes
Name = name,
Namespace = @base.Namespace,
Access = @base.Access,
IsInterface = true
IsInterface = true,
OriginalClass = @base
};
@interface.Bases.AddRange(
from b in @base.Bases

Loading…
Cancel
Save