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)); .First(c => c.Parameters.Count == 1));
var runtimeHelpers = typeSystem.GetType("Avalonia.Markup.Xaml.XamlIl.Runtime.XamlIlRuntimeHelpers"); var runtimeHelpers = typeSystem.GetType("Avalonia.Markup.Xaml.XamlIl.Runtime.XamlIlRuntimeHelpers");
var getRootServiceProvider = asm.MainModule.ImportReference( var rootServiceProviderField = asm.MainModule.ImportReference(
typeSystem.GetTypeReference(runtimeHelpers).Resolve().Methods typeSystem.GetTypeReference(runtimeHelpers).Resolve().Fields
.First(x => x.Name == "GetRootServiceProviderV1")); .First(x => x.Name == "RootServiceProviderV1"));
var loaderDispatcherDef = new TypeDefinition("CompiledAvaloniaXaml", "!XamlLoader", var loaderDispatcherDef = new TypeDefinition("CompiledAvaloniaXaml", "!XamlLoader",
TypeAttributes.Class, asm.MainModule.TypeSystem.Object); TypeAttributes.Class, asm.MainModule.TypeSystem.Object);
@ -162,7 +162,7 @@ namespace Avalonia.Build.Tasks
MethodAttributes.Static | MethodAttributes.Private, asm.MainModule.TypeSystem.Void); MethodAttributes.Static | MethodAttributes.Private, asm.MainModule.TypeSystem.Void);
trampoline.Parameters.Add(new ParameterDefinition(classTypeDefinition)); trampoline.Parameters.Add(new ParameterDefinition(classTypeDefinition));
classTypeDefinition.Methods.Add(trampoline); 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.Ldarg_0));
trampoline.Body.Instructions.Add(Instruction.Create(OpCodes.Call, compiledPopulateMethod)); trampoline.Body.Instructions.Add(Instruction.Create(OpCodes.Call, compiledPopulateMethod));
trampoline.Body.Instructions.Add(Instruction.Create(OpCodes.Ret)); trampoline.Body.Instructions.Add(Instruction.Create(OpCodes.Ret));
@ -247,7 +247,7 @@ namespace Avalonia.Build.Tasks
i.Add(Instruction.Create(OpCodes.Newobj, parameterlessConstructor)); i.Add(Instruction.Create(OpCodes.Newobj, parameterlessConstructor));
else else
{ {
i.Add(Instruction.Create(OpCodes.Call, getRootServiceProvider)); i.Add(Instruction.Create(OpCodes.Ldsfld, rootServiceProviderField));
i.Add(Instruction.Create(OpCodes.Call, compiledBuildMethod)); 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>>( var createCb = Expression.Lambda<Func<IServiceProvider, object>>(
Expression.Convert(Expression.Call( Expression.Convert(Expression.Call(
created.GetMethod(AvaloniaXamlIlCompiler.BuildName), isp), typeof(object)), isp).Compile(); created.GetMethod(AvaloniaXamlIlCompiler.BuildName), isp), typeof(object)), isp).Compile();
return createCb(XamlIlRuntimeHelpers.GetRootServiceProviderV1()); return createCb(XamlIlRuntimeHelpers.RootServiceProviderV1);
} }
else else
{ {
@ -152,7 +152,7 @@ namespace Avalonia.Markup.Xaml.XamlIl
var populateCb = Expression.Lambda<Action<IServiceProvider, object>>( var populateCb = Expression.Lambda<Action<IServiceProvider, object>>(
Expression.Call(populate, isp, Expression.Convert(epar, populate.GetParameters()[1].ParameterType)), Expression.Call(populate, isp, Expression.Convert(epar, populate.GetParameters()[1].ParameterType)),
isp, epar).Compile(); isp, epar).Compile();
populateCb(XamlIlRuntimeHelpers.GetRootServiceProviderV1(), rootInstance); populateCb(XamlIlRuntimeHelpers.RootServiceProviderV1, rootInstance);
return 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() public static readonly IServiceProvider RootServiceProviderV1 = new RootServiceProvider();
{
return new RootServiceProvider();
}
class RootServiceProvider : IServiceProvider, IAvaloniaXamlIlParentStackProvider class RootServiceProvider : IServiceProvider, IAvaloniaXamlIlParentStackProvider
{ {

Loading…
Cancel
Save