|
|
|
@ -59,14 +59,17 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions |
|
|
|
|
|
|
|
var field = _builder.DefineField(types.IPropertyInfo, name + "!Field", false, true); |
|
|
|
|
|
|
|
void Load(IXamlMethod m, IXamlILEmitter cg) |
|
|
|
void Load(IXamlMethod m, IXamlILEmitter cg, bool passThis) |
|
|
|
{ |
|
|
|
cg |
|
|
|
.Ldarg_0(); |
|
|
|
if (m.DeclaringType.IsValueType) |
|
|
|
cg.Unbox(m.DeclaringType); |
|
|
|
else |
|
|
|
cg.Castclass(m.DeclaringType); |
|
|
|
if (passThis) |
|
|
|
{ |
|
|
|
cg |
|
|
|
.Ldarg_0(); |
|
|
|
if (m.DeclaringType.IsValueType) |
|
|
|
cg.Unbox(m.DeclaringType); |
|
|
|
else |
|
|
|
cg.Castclass(m.DeclaringType); |
|
|
|
} |
|
|
|
|
|
|
|
foreach (var indexerArg in indexerArguments) |
|
|
|
{ |
|
|
|
@ -80,7 +83,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions |
|
|
|
new[] {types.XamlIlTypes.Object}, name + "!Getter", false, true, false); |
|
|
|
if (getter != null) |
|
|
|
{ |
|
|
|
Load(property.Getter, getter.Generator); |
|
|
|
Load(property.Getter, getter.Generator, !property.Getter.IsStatic); |
|
|
|
|
|
|
|
getter.Generator.EmitCall(property.Getter); |
|
|
|
if (property.Getter.ReturnType.IsValueType) |
|
|
|
@ -95,7 +98,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions |
|
|
|
name + "!Setter", false, true, false); |
|
|
|
if (setter != null) |
|
|
|
{ |
|
|
|
Load(property.Setter, setter.Generator); |
|
|
|
Load(property.Setter, setter.Generator, !property.Getter.IsStatic); |
|
|
|
|
|
|
|
setter.Generator.Ldarg(1); |
|
|
|
if (property.Setter.Parameters[0].IsValueType) |
|
|
|
|