|
|
|
@ -165,8 +165,7 @@ namespace CppSharp.Generators.CLI
@@ -165,8 +165,7 @@ namespace CppSharp.Generators.CLI
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach (var property in @class.Properties) |
|
|
|
|
GenerateProperty(property); |
|
|
|
|
GenerateClassProperties(@class, @class); |
|
|
|
|
|
|
|
|
|
foreach (var @event in @class.Events) |
|
|
|
|
{ |
|
|
|
@ -192,6 +191,22 @@ namespace CppSharp.Generators.CLI
@@ -192,6 +191,22 @@ namespace CppSharp.Generators.CLI
|
|
|
|
|
PopBlock(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void GenerateClassProperties(Class @class, Class realOwner, |
|
|
|
|
bool onlyFieldProperties = false) |
|
|
|
|
{ |
|
|
|
|
if (@class.IsValueType) |
|
|
|
|
{ |
|
|
|
|
foreach (var @base in @class.Bases.Where(b => b.IsClass && !b.Class.Ignore)) |
|
|
|
|
{ |
|
|
|
|
GenerateClassProperties(@base.Class, realOwner, true); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach (var property in @class.Properties.Where( |
|
|
|
|
p => !p.Ignore && (!onlyFieldProperties || p.Field != null))) |
|
|
|
|
GenerateProperty(property, realOwner); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void GenerateFunctionTemplate(FunctionTemplate template) |
|
|
|
|
{ |
|
|
|
|
var printer = TypePrinter; |
|
|
|
@ -236,7 +251,7 @@ namespace CppSharp.Generators.CLI
@@ -236,7 +251,7 @@ namespace CppSharp.Generators.CLI
|
|
|
|
|
printer.Context = oldCtx; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void GenerateProperty(Property property) |
|
|
|
|
private void GenerateProperty(Property property, Class realOwner) |
|
|
|
|
{ |
|
|
|
|
if (property.Ignore) return; |
|
|
|
|
|
|
|
|
@ -246,21 +261,21 @@ namespace CppSharp.Generators.CLI
@@ -246,21 +261,21 @@ namespace CppSharp.Generators.CLI
|
|
|
|
|
if (property.Field != null) |
|
|
|
|
{ |
|
|
|
|
if (property.HasGetter) |
|
|
|
|
GeneratePropertyGetter(property.Field, @class, property.Name, |
|
|
|
|
GeneratePropertyGetter(property.Field, realOwner, property.Name, |
|
|
|
|
property.Type); |
|
|
|
|
|
|
|
|
|
if (property.HasSetter) |
|
|
|
|
GeneratePropertySetter(property.Field, @class, property.Name, |
|
|
|
|
GeneratePropertySetter(property.Field, realOwner, property.Name, |
|
|
|
|
property.Type); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
if (property.HasGetter) |
|
|
|
|
GeneratePropertyGetter(property.GetMethod, @class, property.Name, |
|
|
|
|
GeneratePropertyGetter(property.GetMethod, realOwner, property.Name, |
|
|
|
|
property.Type); |
|
|
|
|
|
|
|
|
|
if (property.HasSetter) |
|
|
|
|
GeneratePropertySetter(property.SetMethod, @class, property.Name, |
|
|
|
|
GeneratePropertySetter(property.SetMethod, realOwner, property.Name, |
|
|
|
|
property.Type); |
|
|
|
|
} |
|
|
|
|
PopBlock(); |
|
|
|
@ -285,6 +300,13 @@ namespace CppSharp.Generators.CLI
@@ -285,6 +300,13 @@ namespace CppSharp.Generators.CLI
|
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
if (@class.IsValueType && decl is Field) |
|
|
|
|
{ |
|
|
|
|
WriteLine("{0} = value;", decl.Name); |
|
|
|
|
WriteCloseBraceIndent(); |
|
|
|
|
NewLine(); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
var param = new Parameter |
|
|
|
|
{ |
|
|
|
|
Name = "value", |
|
|
|
@ -335,6 +357,13 @@ namespace CppSharp.Generators.CLI
@@ -335,6 +357,13 @@ namespace CppSharp.Generators.CLI
|
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
if (@class.IsValueType && decl is Field) |
|
|
|
|
{ |
|
|
|
|
WriteLine("return {0};", decl.Name); |
|
|
|
|
WriteCloseBraceIndent(); |
|
|
|
|
NewLine(); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
string variable; |
|
|
|
|
if (decl is Variable) |
|
|
|
|
variable = string.Format("::{0}::{1}", |
|
|
|
@ -526,27 +555,28 @@ namespace CppSharp.Generators.CLI
@@ -526,27 +555,28 @@ namespace CppSharp.Generators.CLI
|
|
|
|
|
GenerateStructMarshaling(baseClass, nativeVar); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach (var field in @class.Fields) |
|
|
|
|
foreach (var property in @class.Properties) |
|
|
|
|
{ |
|
|
|
|
if (ASTUtils.CheckIgnoreField(field)) continue; |
|
|
|
|
if (property.Ignore || property.Field == null) continue; |
|
|
|
|
|
|
|
|
|
var nativeField = string.Format("{0}{1}", |
|
|
|
|
nativeVar, field.OriginalName); |
|
|
|
|
nativeVar, property.Field.OriginalName); |
|
|
|
|
|
|
|
|
|
var ctx = new MarshalContext(Driver) |
|
|
|
|
{ |
|
|
|
|
ArgName = field.Name, |
|
|
|
|
ArgName = property.Name, |
|
|
|
|
ReturnVarName = nativeField, |
|
|
|
|
ReturnType = field.QualifiedType |
|
|
|
|
ReturnType = property.QualifiedType |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
var marshal = new CLIMarshalNativeToManagedPrinter(ctx); |
|
|
|
|
field.Visit(marshal); |
|
|
|
|
property.Visit(marshal); |
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(marshal.Context.SupportBefore)) |
|
|
|
|
Write(marshal.Context.SupportBefore); |
|
|
|
|
|
|
|
|
|
WriteLine("{0} = {1};", field.Name, marshal.Context.Return); |
|
|
|
|
WriteLine("{0} = {1};", |
|
|
|
|
Generator.GeneratedIdentifier(property.Field.OriginalName), marshal.Context.Return); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -665,10 +695,10 @@ namespace CppSharp.Generators.CLI
@@ -665,10 +695,10 @@ namespace CppSharp.Generators.CLI
|
|
|
|
|
WriteLine("::{0} _native({1});", @class.QualifiedOriginalName, |
|
|
|
|
string.Join(", ", names)); |
|
|
|
|
|
|
|
|
|
GenerateValueTypeConstructorCallFields(@class); |
|
|
|
|
GenerateValueTypeConstructorCallProperties(@class); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void GenerateValueTypeConstructorCallFields(Class @class) |
|
|
|
|
private void GenerateValueTypeConstructorCallProperties(Class @class) |
|
|
|
|
{ |
|
|
|
|
foreach (var @base in @class.Bases) |
|
|
|
|
{ |
|
|
|
@ -676,28 +706,28 @@ namespace CppSharp.Generators.CLI
@@ -676,28 +706,28 @@ namespace CppSharp.Generators.CLI
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
var baseClass = @base.Class; |
|
|
|
|
GenerateValueTypeConstructorCallFields(baseClass); |
|
|
|
|
GenerateValueTypeConstructorCallProperties(baseClass); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach (var field in @class.Fields) |
|
|
|
|
foreach (var property in @class.Properties) |
|
|
|
|
{ |
|
|
|
|
if (ASTUtils.CheckIgnoreField(field)) continue; |
|
|
|
|
if (property.Ignore || property.Field == null) continue; |
|
|
|
|
|
|
|
|
|
var varName = string.Format("_native.{0}", field.OriginalName); |
|
|
|
|
var varName = string.Format("_native.{0}", property.Field.OriginalName); |
|
|
|
|
|
|
|
|
|
var ctx = new MarshalContext(Driver) |
|
|
|
|
{ |
|
|
|
|
ReturnVarName = varName, |
|
|
|
|
ReturnType = field.QualifiedType |
|
|
|
|
ReturnType = property.QualifiedType |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
var marshal = new CLIMarshalNativeToManagedPrinter(ctx); |
|
|
|
|
field.Visit(marshal); |
|
|
|
|
property.Visit(marshal); |
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(marshal.Context.SupportBefore)) |
|
|
|
|
Write(marshal.Context.SupportBefore); |
|
|
|
|
|
|
|
|
|
WriteLine("this->{0} = {1};", field.Name, marshal.Context.Return); |
|
|
|
|
WriteLine("this->{0} = {1};", property.Name, marshal.Context.Return); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -749,7 +779,7 @@ namespace CppSharp.Generators.CLI
@@ -749,7 +779,7 @@ namespace CppSharp.Generators.CLI
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
var marshal = new CLIMarshalManagedToNativePrinter(ctx); |
|
|
|
|
marshal.MarshalValueClassFields(@class, valueMarshalName); |
|
|
|
|
marshal.MarshalValueClassProperties(@class, valueMarshalName); |
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(marshal.Context.SupportBefore)) |
|
|
|
|
Write(marshal.Context.SupportBefore); |
|
|
|
|