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 13 years ago
parent
commit
1962751cb8
  1. 2
      src/AST/Class.cs
  2. 5
      src/Generator/Generators/CSharp/CSharpMarshal.cs
  3. 11
      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
} }
} }
public Class OriginalClass { get; set; }
public bool IsValueType public bool IsValueType
{ {
get { return Type == ClassType.ValueType || IsUnion; } get { return Type == ClassType.ValueType || IsUnion; }

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

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

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

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

6
src/Generator/Passes/MultipleInheritancePass.cs

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

Loading…
Cancel
Save