public CecilEmitter(IXamlTypeSystem typeSystem, MethodDefinition method) { _method = method; _body = method.Body; TypeSystem = typeSystem; LocalsPool = new XamlLocalsPool(t => this.DefineLocal(t)); }
private CompilerTestBase(IXamlTypeSystem typeSystem) { _typeSystem = typeSystem; Configuration = new TransformerConfiguration(typeSystem, typeSystem.FindAssembly("XamlParserTests"), new XamlLanguageTypeMappings(typeSystem) { XmlnsAttributes = { typeSystem.GetType("XamlParserTests.XmlnsDefinitionAttribute"), }, ContentAttributes = { typeSystem.GetType("XamlParserTests.ContentAttribute") }, UsableDuringInitializationAttributes = { typeSystem.GetType("XamlParserTests.UsableDuringInitializationAttribute") }, DeferredContentPropertyAttributes = { typeSystem.GetType("XamlParserTests.DeferredContentAttribute") }, RootObjectProvider = typeSystem.GetType("XamlParserTests.ITestRootObjectProvider"), UriContextProvider = typeSystem.GetType("XamlParserTests.ITestUriContext"), ProvideValueTarget = typeSystem.GetType("XamlParserTests.ITestProvideValueTarget"), ParentStackProvider = typeSystem.GetType("XamlX.Runtime.IXamlParentStackProviderV1"), XmlNamespaceInfoProvider = typeSystem.GetType("XamlX.Runtime.IXamlXmlNamespaceInfoProviderV1") } ); }
IXamlType EmitTypeDescriptorContextStub(IXamlTypeSystem typeSystem, IXamlTypeBuilder <IXamlILEmitter> builder, XamlLanguageTypeMappings mappings) { if (mappings.TypeDescriptorContext == null) { return(null); } var tdc = mappings.TypeDescriptorContext; var tdcPrefix = tdc.Namespace + "." + tdc.Name + "."; builder.AddInterfaceImplementation(mappings.TypeDescriptorContext); void PropertyStub(string name) => ImplementInterfacePropertyGetter(builder, tdc, name).Generator.Ldnull().Ret(); PropertyStub("Container"); PropertyStub("Instance"); PropertyStub("PropertyDescriptor"); void MethodStub(string name) { var original = tdc.FindMethod(m => m.Name == name); builder.DefineMethod(original.ReturnType, original.Parameters, tdcPrefix + name, false, false, true, original) .Generator .Emit(OpCodes.Newobj, typeSystem.FindType("System.NotSupportedException").FindConstructor(new List <IXamlType>())) .Emit(OpCodes.Throw); } MethodStub("OnComponentChanging"); MethodStub("OnComponentChanged"); return(mappings.TypeDescriptorContext); }
public static IXamlType GetType(this IXamlTypeSystem sys, string type) { var f = sys.FindType(type); if (f == null) { throw new XamlTypeSystemException("Unable to resolve type " + type); } return(f); }
public XamlLanguageTypeMappings(IXamlTypeSystem typeSystem) { ServiceProvider = typeSystem.GetType("System.IServiceProvider"); TypeDescriptorContext = typeSystem.GetType("System.ComponentModel.ITypeDescriptorContext"); SupportInitialize = typeSystem.GetType("System.ComponentModel.ISupportInitialize"); var tconv = typeSystem.GetType("System.ComponentModel.TypeConverterAttribute"); if (tconv != null) { TypeConverterAttributes.Add(tconv); } }
public AvaloniaXamlIlCompilerConfiguration(IXamlTypeSystem typeSystem, IXamlAssembly defaultAssembly, XamlLanguageTypeMappings typeMappings, XamlXmlnsMappings xmlnsMappings, XamlValueConverter customValueConverter, XamlIlClrPropertyInfoEmitter clrPropertyEmitter, XamlIlPropertyInfoAccessorFactoryEmitter accessorFactoryEmitter) : base(typeSystem, defaultAssembly, typeMappings, xmlnsMappings, customValueConverter) { ClrPropertyEmitter = clrPropertyEmitter; AccessorFactoryEmitter = accessorFactoryEmitter; AddExtra(ClrPropertyEmitter); AddExtra(AccessorFactoryEmitter); }
private void EmitPushPopParent(IXamlTypeBuilder <IXamlILEmitter> builder, IXamlTypeSystem ts) { var @void = ts.GetType("System.Void"); var so = ts.GetType("System.Object"); var objectListType = ts.GetType("System.Collections.Generic.List`1") .MakeGenericType(new[] { so }); var pushParentGenerator = builder.DefineMethod(@void, new[] { so }, XamlRuntimeContextDefintion.PushParentMethodName, true, false, false) .Generator; pushParentGenerator.LdThisFld(ParentListField) .Ldarg(1) .EmitCall(objectListType.FindMethod("Add", @void, false, so)); if (PropertyTargetObject != null) { pushParentGenerator.Ldarg_0() .Ldarg(1) .Stfld(PropertyTargetObject) .Ret(); } var pop = builder.DefineMethod(@void, new IXamlType[0], XamlRuntimeContextDefintion.PopParentMethodName, true, false, false) .Generator; var idx = pop.DefineLocal(ts.GetType("System.Int32")); pop // var idx = _parents.Count - 1; .LdThisFld(ParentListField) .EmitCall(objectListType.FindMethod(m => m.Name == "get_Count")) .Ldc_I4(1).Emit(OpCodes.Sub).Stloc(idx); // this.PropertyTargetObject = _parents[idx]; if (PropertyTargetObject != null) { pop .Ldarg_0() .LdThisFld(ParentListField) .Ldloc(idx) .EmitCall(objectListType.FindMethod(m => m.Name == "get_Item")) .Stfld(PropertyTargetObject); } // _parents.RemoveAt(idx); pop .LdThisFld(ParentListField) .Ldloc(idx).EmitCall(objectListType.FindMethod(m => m.Name == "RemoveAt")) .Ret(); }
private static void EmitNameScopeField(XamlLanguageTypeMappings mappings, IXamlTypeSystem typeSystem, IXamlTypeBuilder <IXamlILEmitter> typebuilder, IXamlILEmitter constructor) { var nameScopeType = typeSystem.FindType("Avalonia.Controls.INameScope"); var field = typebuilder.DefineField(nameScopeType, ContextNameScopeFieldName, true, false); constructor .Ldarg_0() .Ldarg(1) .Ldtype(nameScopeType) .EmitCall(mappings.ServiceProvider.GetMethod(new FindMethodMethodSignature("GetService", typeSystem.FindType("System.Object"), typeSystem.FindType("System.Type")))) .Stfld(field); }
public XamlTypeWellKnownTypes(IXamlTypeSystem typeSystem) { Void = typeSystem.GetType("System.Void"); String = typeSystem.GetType("System.String"); Object = typeSystem.GetType("System.Object"); Boolean = typeSystem.GetType("System.Boolean"); Double = typeSystem.GetType("System.Double"); CultureInfo = typeSystem.GetType("System.Globalization.CultureInfo"); IFormatProvider = typeSystem.GetType("System.IFormatProvider"); IList = typeSystem.GetType("System.Collections.IList"); IEnumerable = typeSystem.GetType("System.Collections.IEnumerable"); IListOfT = typeSystem.GetType("System.Collections.Generic.IList`1"); IEnumerableT = typeSystem.GetType("System.Collections.Generic.IEnumerable`1"); NullableT = typeSystem.GetType("System.Nullable`1"); Delegate = typeSystem.GetType("System.Delegate"); }
public static TransformerConfiguration Configure(IXamlTypeSystem typeSystem) { return(new TransformerConfiguration(typeSystem, typeSystem.FindAssembly("Benchmarks"), new XamlLanguageTypeMappings(typeSystem) { XmlnsAttributes = { typeSystem.GetType("Portable.Xaml.Markup.XmlnsDefinitionAttribute"), }, ContentAttributes = { typeSystem.GetType("Benchmarks.ContentAttribute") }, RootObjectProvider = typeSystem.GetType("Portable.Xaml.IRootObjectProvider"), ParentStackProvider = typeSystem.GetType("XamlX.Runtime.IXamlParentStackProviderV1") })); }
public AttributeResolver(IXamlTypeSystem typeSystem, XamlLanguageTypeMappings mappings) { _typeConverterAttribute = mappings.TypeConverterAttributes.First(); void AddType(IXamlType type, IXamlType conv) => _converters.Add(new KeyValuePair <IXamlType, IXamlType>(type, conv)); void Add(string type, string conv) => AddType(typeSystem.GetType(type), typeSystem.GetType(conv)); Add("Avalonia.Media.IImage", "Avalonia.Markup.Xaml.Converters.BitmapTypeConverter"); Add("Avalonia.Media.Imaging.IBitmap", "Avalonia.Markup.Xaml.Converters.BitmapTypeConverter"); var ilist = typeSystem.GetType("System.Collections.Generic.IList`1"); AddType(ilist.MakeGenericType(typeSystem.GetType("Avalonia.Point")), typeSystem.GetType("Avalonia.Markup.Xaml.Converters.PointsListTypeConverter")); Add("Avalonia.Controls.WindowIcon", "Avalonia.Markup.Xaml.Converters.IconTypeConverter"); Add("System.Globalization.CultureInfo", "System.ComponentModel.CultureInfoConverter"); Add("System.Uri", "Avalonia.Markup.Xaml.Converters.AvaloniaUriTypeConverter"); Add("System.TimeSpan", "Avalonia.Markup.Xaml.Converters.TimeSpanTypeConverter"); Add("Avalonia.Media.FontFamily", "Avalonia.Markup.Xaml.Converters.FontFamilyTypeConverter"); _avaloniaList = typeSystem.GetType("Avalonia.Collections.AvaloniaList`1"); _avaloniaListConverter = typeSystem.GetType("Avalonia.Collections.AvaloniaListConverter`1"); }
public static (XamlLanguageTypeMappings language, XamlLanguageEmitMappings <IXamlILEmitter, XamlILNodeEmitResult> emit) Configure(IXamlTypeSystem typeSystem) { var runtimeHelpers = typeSystem.GetType("Avalonia.Markup.Xaml.XamlIl.Runtime.XamlIlRuntimeHelpers"); var assignBindingAttribute = typeSystem.GetType("Avalonia.Data.AssignBindingAttribute"); var bindingType = typeSystem.GetType("Avalonia.Data.IBinding"); var rv = new XamlLanguageTypeMappings(typeSystem) { SupportInitialize = typeSystem.GetType("System.ComponentModel.ISupportInitialize"), XmlnsAttributes = { typeSystem.GetType("Avalonia.Metadata.XmlnsDefinitionAttribute"), }, ContentAttributes = { typeSystem.GetType("Avalonia.Metadata.ContentAttribute") }, ProvideValueTarget = typeSystem.GetType("Avalonia.Markup.Xaml.IProvideValueTarget"), RootObjectProvider = typeSystem.GetType("Avalonia.Markup.Xaml.IRootObjectProvider"), RootObjectProviderIntermediateRootPropertyName = "IntermediateRootObject", UriContextProvider = typeSystem.GetType("Avalonia.Markup.Xaml.IUriContext"), ParentStackProvider = typeSystem.GetType("Avalonia.Markup.Xaml.XamlIl.Runtime.IAvaloniaXamlIlParentStackProvider"), XmlNamespaceInfoProvider = typeSystem.GetType("Avalonia.Markup.Xaml.XamlIl.Runtime.IAvaloniaXamlIlXmlNamespaceInfoProvider"), DeferredContentPropertyAttributes = { typeSystem.GetType("Avalonia.Metadata.TemplateContentAttribute") }, DeferredContentExecutorCustomization = runtimeHelpers.FindMethod(m => m.Name == "DeferredTransformationFactoryV1"), UsableDuringInitializationAttributes = { typeSystem.GetType("Avalonia.Metadata.UsableDuringInitializationAttribute"), }, InnerServiceProviderFactoryMethod = runtimeHelpers.FindMethod(m => m.Name == "CreateInnerServiceProviderV1"), }; rv.CustomAttributeResolver = new AttributeResolver(typeSystem, rv); var emit = new XamlLanguageEmitMappings <IXamlILEmitter, XamlILNodeEmitResult> { ProvideValueTargetPropertyEmitter = XamlIlAvaloniaPropertyHelper.EmitProvideValueTarget, ContextTypeBuilderCallback = (b, c) => EmitNameScopeField(rv, typeSystem, b, c) }; return(rv, emit); }
public IlGen(SreTypeSystem system, ILGenerator ilg) { TypeSystem = system; _ilg = ilg; LocalsPool = new XamlLocalsPool(t => this.DefineLocal(t)); }
public InitializeComponentCodeGenerator(IXamlTypeSystem types) { _diagnosticsAreConnected = types.FindAssembly("Avalonia.Diagnostics") != null; }
private XamlILContextDefinition(IXamlTypeBuilder <IXamlILEmitter> parentBuilder, IXamlTypeSystem typeSystem, XamlLanguageTypeMappings mappings, XamlLanguageEmitMappings <IXamlILEmitter, XamlILNodeEmitResult> emitMappings) { var so = typeSystem.GetType("System.Object"); var builder = parentBuilder.DefineSubType(so, "Context", true); builder.DefineGenericParameters(new[] { new KeyValuePair <string, XamlGenericParameterConstraint>("TTarget", new XamlGenericParameterConstraint { IsClass = true }) }); var rootObjectField = builder.DefineField(builder.GenericParameters[0], "RootObject", true, false); var intermediateRootObjectField = builder.DefineField(so, XamlRuntimeContextDefintion.IntermediateRootObjectFieldName, true, false); _parentServiceProviderField = builder.DefineField(mappings.ServiceProvider, "_sp", false, false); if (mappings.InnerServiceProviderFactoryMethod != null) { _innerServiceProviderField = builder.DefineField(mappings.ServiceProvider, "_innerSp", false, false); } var staticProvidersField = builder.DefineField(typeSystem.GetType("System.Object").MakeArrayType(1), "_staticProviders", false, false); var systemType = typeSystem.GetType("System.Type"); var systemUri = typeSystem.GetType("System.Uri"); var systemString = typeSystem.GetType("System.String"); var getServiceInterfaceMethod = mappings.ServiceProvider.FindMethod("GetService", so, false, systemType); var ownServices = new List <IXamlType>(); var ctorCallbacks = new List <Action <IXamlILEmitter> >(); if (mappings.RootObjectProvider != null) { builder.AddInterfaceImplementation(mappings.RootObjectProvider); var rootGen = ImplementInterfacePropertyGetter(builder, mappings.RootObjectProvider, XamlRuntimeContextDefintion.RootObjectFieldName) .Generator; var tryParent = rootGen.DefineLabel(); var fail = rootGen.DefineLabel(); var parentRootProvider = rootGen.DefineLocal(mappings.RootObjectProvider); rootGen // if(RootObject!=null) return RootObject; .LdThisFld(rootObjectField) .Box(rootObjectField.FieldType) .Brfalse(tryParent) .LdThisFld(rootObjectField) .Box(rootObjectField.FieldType) .Ret() // if(_sp == null) goto fail; .MarkLabel(tryParent) .LdThisFld(_parentServiceProviderField) .Brfalse(fail) // parentProv = (IRootObjectProvider)_sp.GetService(typeof(IRootObjectProvider)); .LdThisFld(_parentServiceProviderField) .Ldtype(mappings.RootObjectProvider) .EmitCall(getServiceInterfaceMethod) .Castclass(mappings.RootObjectProvider) .Stloc(parentRootProvider) // if(parentProv == null) goto fail; .Ldloc(parentRootProvider) .Brfalse(fail) // return parentProv.Root; .Ldloc(parentRootProvider) .EmitCall(mappings.RootObjectProvider.FindMethod(m => m.Name == "get_RootObject")) .Ret() // fail: .MarkLabel(fail) .Ldnull() .Ret(); if (mappings.RootObjectProviderIntermediateRootPropertyName != null) { ImplementInterfacePropertyGetter(builder, mappings.RootObjectProvider, mappings.RootObjectProviderIntermediateRootPropertyName) .Generator .LdThisFld(intermediateRootObjectField) .Ret(); } ownServices.Add(mappings.RootObjectProvider); } if (mappings.ParentStackProvider != null) { builder.AddInterfaceImplementation(mappings.ParentStackProvider); var objectListType = typeSystem.GetType("System.Collections.Generic.List`1") .MakeGenericType(new[] { typeSystem.GetType("System.Object") }); ParentListField = builder.DefineField(objectListType, XamlRuntimeContextDefintion.ParentListFieldName, true, false); var enumerator = EmitParentEnumerable(typeSystem, parentBuilder, mappings); CreateCallbacks.Add(enumerator.createCallback); var parentStackEnumerableField = builder.DefineField( typeSystem.GetType("System.Collections.Generic.IEnumerable`1").MakeGenericType(new[] { so }), "_parentStackEnumerable", false, false); ImplementInterfacePropertyGetter(builder, mappings.ParentStackProvider, "Parents") .Generator.LdThisFld(parentStackEnumerableField).Ret(); ctorCallbacks.Add(g => g .Emit(OpCodes.Ldarg_0) .Emit(OpCodes.Newobj, objectListType.FindConstructor(new List <IXamlType>())) .Emit(OpCodes.Stfld, ParentListField) .Emit(OpCodes.Ldarg_0) .LdThisFld(ParentListField) .LdThisFld(_parentServiceProviderField) .Emit(OpCodes.Newobj, enumerator.ctor) .Emit(OpCodes.Stfld, parentStackEnumerableField)); ownServices.Add(mappings.ParentStackProvider); } ownServices.Add(EmitTypeDescriptorContextStub(typeSystem, builder, mappings)); if (mappings.ProvideValueTarget != null) { builder.AddInterfaceImplementation(mappings.ProvideValueTarget); PropertyTargetObject = builder.DefineField(so, XamlRuntimeContextDefintion.ProvideTargetObjectName, true, false); PropertyTargetProperty = builder.DefineField(so, XamlRuntimeContextDefintion.ProvideTargetPropertyName, true, false); ImplementInterfacePropertyGetter(builder, mappings.ProvideValueTarget, "TargetObject") .Generator.LdThisFld(PropertyTargetObject).Ret(); ImplementInterfacePropertyGetter(builder, mappings.ProvideValueTarget, "TargetProperty") .Generator.LdThisFld(PropertyTargetProperty).Ret(); ownServices.Add(mappings.ProvideValueTarget); } IXamlField baseUriField = null; if (mappings.UriContextProvider != null) { baseUriField = builder.DefineField(systemUri, "_baseUri", false, false); builder.AddInterfaceImplementation(mappings.UriContextProvider); var getter = builder.DefineMethod(systemUri, new IXamlType[0], "get_BaseUri", true, false, true); var setter = builder.DefineMethod(typeSystem.GetType("System.Void"), new[] { systemUri }, "set_BaseUri", true, false, true); getter.Generator .LdThisFld(baseUriField) .Ret(); setter.Generator .Ldarg_0() .Ldarg(1) .Stfld(baseUriField) .Ret(); builder.DefineProperty(systemUri, "BaseUri", setter, getter); ownServices.Add(mappings.UriContextProvider); } builder.AddInterfaceImplementation(mappings.ServiceProvider); var getServiceMethod = builder.DefineMethod(so, new[] { systemType }, "GetService", true, false, true); ownServices = ownServices.Where(s => s != null).ToList(); if (_innerServiceProviderField != null) { var next = getServiceMethod.Generator.DefineLabel(); var innerResult = getServiceMethod.Generator.DefineLocal(so); getServiceMethod.Generator //if(_inner == null) goto next; .LdThisFld(_innerServiceProviderField) .Brfalse(next) // var innerRes = _inner.GetService(type); .LdThisFld(_innerServiceProviderField) .Ldarg(1) .EmitCall(getServiceInterfaceMethod) .Stloc(innerResult) // if(innerRes == null) goto next; .Ldloc(innerResult) .Brfalse(next) // return innerRes .Ldloc(innerResult) .Ret() .MarkLabel(next); } var compare = systemType.FindMethod("Equals", typeSystem.GetType("System.Boolean"), false, systemType); var isAssignableFrom = systemType.FindMethod("IsAssignableFrom", typeSystem.GetType("System.Boolean"), false, systemType); var fromHandle = systemType.Methods.First(m => m.Name == "GetTypeFromHandle"); var getTypeFromObject = so.Methods.First(m => m.Name == "GetType" && m.Parameters.Count == 0); if (ownServices.Count != 0) { for (var c = 0; c < ownServices.Count; c++) { var next = getServiceMethod.Generator.DefineLabel(); getServiceMethod.Generator .Emit(OpCodes.Ldtoken, ownServices[c]) .EmitCall(fromHandle) .Emit(OpCodes.Ldarg_1) .Emit(OpCodes.Callvirt, compare) .Emit(OpCodes.Brfalse, next) .Emit(OpCodes.Ldarg_0) .Emit(OpCodes.Ret) .MarkLabel(next); } } var staticProviderIndex = getServiceMethod.Generator.DefineLocal(typeSystem.GetType("System.Int32")); var staticProviderNext = getServiceMethod.Generator.DefineLabel(); var staticProviderFailed = getServiceMethod.Generator.DefineLabel(); var staticProviderEnd = getServiceMethod.Generator.DefineLabel(); var staticProviderElement = getServiceMethod.Generator.DefineLocal(so); getServiceMethod.Generator //start: if(_staticProviders == null) goto: end .LdThisFld(staticProvidersField) .Brfalse(staticProviderEnd) // var c = 0 .Ldc_I4(0) .Stloc(staticProviderIndex) // next: .MarkLabel(staticProviderNext) // if(c >= _staticProviders.Length) goto: end .Ldloc(staticProviderIndex) .LdThisFld(staticProvidersField) .Ldlen() .Bge(staticProviderEnd) // var obj = _staticProviders[c] .LdThisFld(staticProvidersField) .Ldloc(staticProviderIndex) .Ldelem_ref() // dup .Stloc(staticProviderElement) .Ldarg(1) .Ldloc(staticProviderElement) // if(obj.GetType().Equals(arg1)) return obj; else goto failed; .EmitCall(getTypeFromObject) .EmitCall(isAssignableFrom) .Brfalse(staticProviderFailed) .Ldloc(staticProviderElement) .Ret() // failed: .MarkLabel(staticProviderFailed) // c++ .Ldloc(staticProviderIndex) .Ldc_I4(1) .Add() .Stloc(staticProviderIndex) // goto: start .Br(staticProviderNext) // end: .MarkLabel(staticProviderEnd); var noParentProvider = getServiceMethod.Generator.DefineLabel(); getServiceMethod.Generator .LdThisFld(_parentServiceProviderField) .Brfalse(noParentProvider) .LdThisFld(_parentServiceProviderField) .Ldarg(1) .EmitCall(getServiceInterfaceMethod) .Emit(OpCodes.Ret) .MarkLabel(noParentProvider) .Ldnull() .Ret(); var ctor = builder.DefineConstructor(false, mappings.ServiceProvider, staticProvidersField.FieldType, systemString); ctor.Generator .Emit(OpCodes.Ldarg_0) .Emit(OpCodes.Call, so.Constructors.First()) .Emit(OpCodes.Ldarg_0) .Emit(OpCodes.Ldarg_1) .Emit(OpCodes.Stfld, _parentServiceProviderField) .Emit(OpCodes.Ldarg_0) .Emit(OpCodes.Ldarg_2) .Emit(OpCodes.Stfld, staticProvidersField); if (baseUriField != null) { var noUri = ctor.Generator.DefineLabel(); ctor.Generator .Emit(OpCodes.Ldarg_3) .Brfalse(noUri) .Emit(OpCodes.Ldarg_0) .Emit(OpCodes.Ldarg_3) .Newobj(systemUri.FindConstructor(new List <IXamlType> { typeSystem.GetType("System.String") })) .Emit(OpCodes.Stfld, baseUriField) .MarkLabel(noUri); } foreach (var feature in ctorCallbacks) { feature(ctor.Generator); } emitMappings.ContextTypeBuilderCallback?.Invoke(builder, ctor.Generator); // We are calling this last to ensure that our own services are ready if (_innerServiceProviderField != null) { ctor.Generator // _innerSp = InnerServiceProviderFactory(this) .Ldarg_0() .Ldarg_0() .EmitCall(mappings.InnerServiceProviderFactoryMethod) .Stfld(_innerServiceProviderField); } ctor.Generator.Emit(OpCodes.Ret); Constructor = ctor; CreateCallbacks.Add(() => { parentBuilder.CreateType(); }); if (ParentListField != null) { EmitPushPopParent(builder, typeSystem); } CreateAllTypes(); ContextType = builder.CreateType(); }
public static IXamlType GenerateContextClass(IXamlTypeBuilder <IXamlILEmitter> builder, IXamlTypeSystem typeSystem, XamlLanguageTypeMappings mappings, XamlLanguageEmitMappings <IXamlILEmitter, XamlILNodeEmitResult> emitMappings) { return(new XamlILContextDefinition(builder, typeSystem, mappings, emitMappings).ContextType); }