Browse Source

Updated xamlil

xamlil-debug-info
Nikita Tsukanov 7 years ago
parent
commit
6bf7ebd721
  1. 19
      src/Markup/Avalonia.Markup.Xaml/XamlIl/AvaloniaXamlIlRuntimeCompiler.cs
  2. 20
      src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/AvaloniaXamlIlCompiler.cs
  3. 2
      src/Markup/Avalonia.Markup.Xaml/XamlIl/xamlil.github

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

@ -113,8 +113,10 @@ namespace Avalonia.Markup.Xaml.XamlIl
InitializeSre();
var asm = localAssembly == null ? null : _sreTypeSystem.GetAssembly(localAssembly);
var contextType = _sreBuilder.DefineType("XamlIlContext");
var compiler = new AvaloniaXamlIlCompiler(new XamlIlTransformerConfiguration(_sreTypeSystem, asm,
_sreMappings, _sreXmlns, AvaloniaXamlIlLanguage.CustomValueConverter));
_sreMappings, _sreXmlns, AvaloniaXamlIlLanguage.CustomValueConverter),
_sreTypeSystem.CreateTypeBuilder(contextType));
var tb = _sreBuilder.DefineType("Builder_" + Guid.NewGuid().ToString("N") + "_" + uri);
IXamlIlType overrideType = null;
@ -208,14 +210,19 @@ namespace Avalonia.Markup.Xaml.XamlIl
var def = new TypeDefinition("XamlIlLoader", safeUri,
TypeAttributes.Class | TypeAttributes.Public, asm.MainModule.TypeSystem.Object);
var contextDef = new TypeDefinition("XamlIlLoader", safeUri + "_XamlIlContext",
TypeAttributes.Class | TypeAttributes.Public, asm.MainModule.TypeSystem.Object);
asm.MainModule.Types.Add(def);
var tb = _cecilTypeSystem.CreateTypeBuilder(def);
asm.MainModule.Types.Add(contextDef);
var tb = _cecilTypeSystem.CreateTypeBuilder(def);
var compiler = new AvaloniaXamlIlCompiler(new XamlIlTransformerConfiguration(_cecilTypeSystem,
localAssembly == null ? null : _cecilTypeSystem.FindAssembly(localAssembly.GetName().Name),
_cecilMappings, XamlIlXmlnsMappings.Resolve(_cecilTypeSystem, _cecilMappings),
AvaloniaXamlIlLanguage.CustomValueConverter));
localAssembly == null ? null : _cecilTypeSystem.FindAssembly(localAssembly.GetName().Name),
_cecilMappings, XamlIlXmlnsMappings.Resolve(_cecilTypeSystem, _cecilMappings),
AvaloniaXamlIlLanguage.CustomValueConverter),
_cecilTypeSystem.CreateTypeBuilder(contextDef));
compiler.ParseAndCompile(xaml, uri.ToString(), tb, overrideType);
var asmPath = Path.Combine(_cecilEmitDir, safeUri + ".dll");
using(var f = File.Create(asmPath))

20
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/AvaloniaXamlIlCompiler.cs

@ -10,9 +10,10 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions
{
public class AvaloniaXamlIlCompiler : XamlIlCompiler
{
public AvaloniaXamlIlCompiler(XamlIlTransformerConfiguration configuration) : base(configuration, true)
private readonly IXamlIlType _contextType;
private AvaloniaXamlIlCompiler(XamlIlTransformerConfiguration configuration) : base(configuration, true)
{
// Before everything else
Transformers.Insert(0, new XNameTransformer());
@ -39,6 +40,19 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions
}
public AvaloniaXamlIlCompiler(XamlIlTransformerConfiguration configuration,
IXamlIlTypeBuilder contextTypeBuilder) : this(configuration)
{
_contextType = CreateContextType(contextTypeBuilder);
}
public AvaloniaXamlIlCompiler(XamlIlTransformerConfiguration configuration,
IXamlIlType contextType) : this(configuration)
{
_contextType = contextType;
}
public const string PopulateName = "__AvaloniaXamlIlPopulate";
public const string BuildName = "__AvaloniaXamlIlBuild";
@ -60,7 +74,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions
}
Transform(parsed);
Compile(parsed, tb, PopulateName, BuildName,
Compile(parsed, tb, _contextType, PopulateName, BuildName,
"__AvaloniaXamlIlContext", "__AvaloniaXamlIlNsInfo", baseUri);
}

2
src/Markup/Avalonia.Markup.Xaml/XamlIl/xamlil.github

@ -1 +1 @@
Subproject commit 49e1a7afca6c1daee91e6faf6530a37c9a99dc83
Subproject commit c9f6ffedbc27cadbd6f393b1a142bbf2e6eaf78f
Loading…
Cancel
Save