Browse Source

Fixed step into

pull/2322/head
Nikita Tsukanov 7 years ago
parent
commit
4b9a9cd3a1
  1. 10
      src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs
  2. 4
      src/Markup/Avalonia.Markup.Xaml/XamlIl/AvaloniaXamlIlRuntimeCompiler.cs
  3. 5
      src/Markup/Avalonia.Markup.Xaml/XamlIl/Runtime/XamlIlRuntimeHelpers.cs

10
src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs

@ -74,9 +74,9 @@ namespace Avalonia.Build.Tasks
.First(c => c.Parameters.Count == 1));
var runtimeHelpers = typeSystem.GetType("Avalonia.Markup.Xaml.XamlIl.Runtime.XamlIlRuntimeHelpers");
var getRootServiceProvider = asm.MainModule.ImportReference(
typeSystem.GetTypeReference(runtimeHelpers).Resolve().Methods
.First(x => x.Name == "GetRootServiceProviderV1"));
var rootServiceProviderField = asm.MainModule.ImportReference(
typeSystem.GetTypeReference(runtimeHelpers).Resolve().Fields
.First(x => x.Name == "RootServiceProviderV1"));
var loaderDispatcherDef = new TypeDefinition("CompiledAvaloniaXaml", "!XamlLoader",
TypeAttributes.Class, asm.MainModule.TypeSystem.Object);
@ -162,7 +162,7 @@ namespace Avalonia.Build.Tasks
MethodAttributes.Static | MethodAttributes.Private, asm.MainModule.TypeSystem.Void);
trampoline.Parameters.Add(new ParameterDefinition(classTypeDefinition));
classTypeDefinition.Methods.Add(trampoline);
trampoline.Body.Instructions.Add(Instruction.Create(OpCodes.Call, getRootServiceProvider));
trampoline.Body.Instructions.Add(Instruction.Create(OpCodes.Ldsfld, rootServiceProviderField));
trampoline.Body.Instructions.Add(Instruction.Create(OpCodes.Ldarg_0));
trampoline.Body.Instructions.Add(Instruction.Create(OpCodes.Call, compiledPopulateMethod));
trampoline.Body.Instructions.Add(Instruction.Create(OpCodes.Ret));
@ -247,7 +247,7 @@ namespace Avalonia.Build.Tasks
i.Add(Instruction.Create(OpCodes.Newobj, parameterlessConstructor));
else
{
i.Add(Instruction.Create(OpCodes.Call, getRootServiceProvider));
i.Add(Instruction.Create(OpCodes.Ldsfld, rootServiceProviderField));
i.Add(Instruction.Create(OpCodes.Call, compiledBuildMethod));
}

4
src/Markup/Avalonia.Markup.Xaml/XamlIl/AvaloniaXamlIlRuntimeCompiler.cs

@ -142,7 +142,7 @@ namespace Avalonia.Markup.Xaml.XamlIl
var createCb = Expression.Lambda<Func<IServiceProvider, object>>(
Expression.Convert(Expression.Call(
created.GetMethod(AvaloniaXamlIlCompiler.BuildName), isp), typeof(object)), isp).Compile();
return createCb(XamlIlRuntimeHelpers.GetRootServiceProviderV1());
return createCb(XamlIlRuntimeHelpers.RootServiceProviderV1);
}
else
{
@ -152,7 +152,7 @@ namespace Avalonia.Markup.Xaml.XamlIl
var populateCb = Expression.Lambda<Action<IServiceProvider, object>>(
Expression.Call(populate, isp, Expression.Convert(epar, populate.GetParameters()[1].ParameterType)),
isp, epar).Compile();
populateCb(XamlIlRuntimeHelpers.GetRootServiceProviderV1(), rootInstance);
populateCb(XamlIlRuntimeHelpers.RootServiceProviderV1, rootInstance);
return rootInstance;
}
}

5
src/Markup/Avalonia.Markup.Xaml/XamlIl/Runtime/XamlIlRuntimeHelpers.cs

@ -125,10 +125,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.Runtime
}
}
public static IServiceProvider GetRootServiceProviderV1()
{
return new RootServiceProvider();
}
public static readonly IServiceProvider RootServiceProviderV1 = new RootServiceProvider();
class RootServiceProvider : IServiceProvider, IAvaloniaXamlIlParentStackProvider
{

Loading…
Cancel
Save