|
|
@ -817,15 +817,17 @@ namespace CppSharp.Generators.CSharp |
|
|
|
param.Name = "&" + param.Name; |
|
|
|
param.Name = "&" + param.Name; |
|
|
|
|
|
|
|
|
|
|
|
var parameters = new List<Parameter> { param }; |
|
|
|
var parameters = new List<Parameter> { param }; |
|
|
|
|
|
|
|
var @void = new QualifiedType(new BuiltinType(PrimitiveType.Void)); |
|
|
|
if (property.SetMethod.SynthKind == FunctionSynthKind.AbstractImplCall) |
|
|
|
if (property.SetMethod.SynthKind == FunctionSynthKind.AbstractImplCall) |
|
|
|
GenerateVirtualPropertyCall(property.SetMethod, @class.BaseClass, |
|
|
|
GenerateVirtualPropertyCall(property.SetMethod, @class.BaseClass, |
|
|
|
property, parameters); |
|
|
|
property, parameters, @void); |
|
|
|
else if (property.SetMethod.IsVirtual) |
|
|
|
else if (property.SetMethod.IsVirtual) |
|
|
|
GenerateVirtualPropertyCall(property.SetMethod, @class, property, parameters); |
|
|
|
GenerateVirtualPropertyCall(property.SetMethod, @class, |
|
|
|
|
|
|
|
property, parameters, @void); |
|
|
|
else if (property.SetMethod.OperatorKind == CXXOperatorKind.Subscript) |
|
|
|
else if (property.SetMethod.OperatorKind == CXXOperatorKind.Subscript) |
|
|
|
GenerateIndexerSetter(property.SetMethod); |
|
|
|
GenerateIndexerSetter(property.SetMethod); |
|
|
|
else |
|
|
|
else |
|
|
|
GenerateInternalFunctionCall(property.SetMethod, parameters); |
|
|
|
GenerateInternalFunctionCall(property.SetMethod, parameters, @void); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void GenerateFieldSetter(Field field, Class @class) |
|
|
|
private void GenerateFieldSetter(Field field, Class @class) |
|
|
@ -1597,20 +1599,29 @@ namespace CppSharp.Generators.CSharp |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var hasReturn = !method.OriginalReturnType.Type.IsPrimitiveType(PrimitiveType.Void); |
|
|
|
bool isVoid = method.OriginalReturnType.Type.Desugar().IsPrimitiveType( |
|
|
|
|
|
|
|
PrimitiveType.Void); |
|
|
|
|
|
|
|
var property = ((Class) method.Namespace).Properties.Find( |
|
|
|
|
|
|
|
p => p.GetMethod == method || p.SetMethod == method); |
|
|
|
|
|
|
|
bool isSetter = property != null && property.SetMethod == method; |
|
|
|
|
|
|
|
var hasReturn = !isVoid && !isSetter; |
|
|
|
|
|
|
|
|
|
|
|
if (hasReturn) |
|
|
|
if (hasReturn) |
|
|
|
Write("var {0} = ", Helpers.ReturnIdentifier); |
|
|
|
Write($"var {Helpers.ReturnIdentifier} = "); |
|
|
|
|
|
|
|
|
|
|
|
if (method.IsGenerated) |
|
|
|
Write($"{Helpers.TargetIdentifier}."); |
|
|
|
|
|
|
|
string marshalsCode = string.Join(", ", marshals); |
|
|
|
|
|
|
|
if (property == null) |
|
|
|
{ |
|
|
|
{ |
|
|
|
WriteLine("{0}.{1}({2});", Helpers.TargetIdentifier, |
|
|
|
Write($"{method.Name}({marshalsCode})"); |
|
|
|
method.Name, string.Join(", ", marshals)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
InvokeProperty(method, marshals); |
|
|
|
Write($"{property.Name}"); |
|
|
|
|
|
|
|
if (isSetter) |
|
|
|
|
|
|
|
Write($" = {marshalsCode}"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
WriteLine(";"); |
|
|
|
|
|
|
|
|
|
|
|
if (hasReturn) |
|
|
|
if (hasReturn) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -1649,27 +1660,13 @@ namespace CppSharp.Generators.CSharp |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!isVoid && isSetter) |
|
|
|
|
|
|
|
WriteLine("return false;"); |
|
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < numBlocks; ++i) |
|
|
|
for (var i = 0; i < numBlocks; ++i) |
|
|
|
WriteCloseBraceIndent(); |
|
|
|
WriteCloseBraceIndent(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void InvokeProperty(Declaration method, IEnumerable<string> marshals) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
var property = ((Class) method.Namespace).Properties.FirstOrDefault( |
|
|
|
|
|
|
|
p => p.GetMethod == method); |
|
|
|
|
|
|
|
if (property == null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
property = ((Class) method.Namespace).Properties.First( |
|
|
|
|
|
|
|
p => p.SetMethod == method); |
|
|
|
|
|
|
|
WriteLine("{0}.{1} = {2};", Helpers.TargetIdentifier, property.Name, |
|
|
|
|
|
|
|
string.Join(", ", marshals)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
WriteLine("{0}.{1};", Helpers.TargetIdentifier, property.Name); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void GenerateVTableMethodDelegates(Class @class, Method method) |
|
|
|
private void GenerateVTableMethodDelegates(Class @class, Method method) |
|
|
|
{ |
|
|
|
{ |
|
|
|
PushBlock(BlockKind.VTableDelegate); |
|
|
|
PushBlock(BlockKind.VTableDelegate); |
|
|
|