private static IDisposable EmitMarker( this IXamlILEmitter emitter, string startMethodName, string endMethodName = null, params string[] parameters) { var markers = emitter.TypeSystem.FindType("Avalonia.Markup.Xaml.HotReload.XamlMarkers"); if (markers == null) { return(EmptyDisposable.Instance); } var startMarker = markers.FindMethod(m => m.Name == startMethodName); foreach (string parameter in parameters) { emitter.Emit(OpCodes.Ldstr, parameter); } emitter.EmitCall(startMarker); if (endMethodName != null) { var endMarker = markers.FindMethod(m => m.Name == endMethodName); return(new ActionDisposable(() => emitter.EmitCall(endMarker))); } return(EmptyDisposable.Instance); }
public void EmitWithArguments( XamlEmitContextWithLocals <IXamlILEmitter, XamlILNodeEmitResult> context, IXamlILEmitter emitter, IReadOnlyList <IXamlAstValueNode> arguments) { emitter.EmitCall(_getter); for (var i = 0; i < arguments.Count; ++i) { context.Emit(arguments[i], emitter, Parameters[i]); } emitter.EmitCall(_adder, true); }
public XamlILNodeEmitResult Emit(XamlEmitContext <IXamlILEmitter, XamlILNodeEmitResult> context, IXamlILEmitter codeGen) { codeGen.Ldstr(_color); codeGen.EmitCall(_method); return(XamlILNodeEmitResult.Type(0, Type.GetClrType())); }
protected override void DoEmit(XamlEmitContext <IXamlILEmitter, XamlILNodeEmitResult> context, IXamlILEmitter codeGen) { if (_selectors.Count == 0) { throw new XamlLoadException("Invalid selector count", this); } if (_selectors.Count == 1) { _selectors[0].Emit(context, codeGen); return; } var listType = context.Configuration.TypeSystem.FindType("System.Collections.Generic.List`1") .MakeGenericType(base.Type.GetClrType()); var add = listType.FindMethod("Add", context.Configuration.WellKnownTypes.Void, false, Type.GetClrType()); codeGen .Newobj(listType.FindConstructor()); foreach (var s in _selectors) { codeGen.Dup(); context.Emit(s, codeGen, Type.GetClrType()); codeGen.EmitCall(add, true); } EmitCall(context, codeGen, m => m.Name == "Or" && m.Parameters.Count == 1 && m.Parameters[0].Name.StartsWith("IReadOnlyList")); }
public void Emit(XamlEmitContext <IXamlILEmitter, XamlILNodeEmitResult> context, IXamlILEmitter codeGen) { context.Configuration.GetExtra <XamlIlClrPropertyInfoEmitter>() .Emit(context, codeGen, _property); codeGen.EmitCall(context.GetAvaloniaTypes() .PropertyPathBuilder.FindMethod(m => m.Name == "Property")); }
public void Emit(IXamlILEmitter emitter) { var locals = new Stack <XamlLocalsPool.PooledLocal>(); // Save all "setter" parameters for (var c = Parameters.Count - 1; c >= 0; c--) { var loc = emitter.LocalsPool.GetLocal(Parameters[c]); locals.Push(loc); emitter.Stloc(loc.Local); } emitter.EmitCall(_getter); while (locals.Count > 0) { using (var loc = locals.Pop()) emitter.Ldloc(loc.Local); } emitter.EmitCall(_adder, true); }
public override void Emit(IXamlILEmitter emitter) { using (var bloc = emitter.LocalsPool.GetLocal(Types.IBinding)) emitter .Stloc(bloc.Local) .Ldsfld(AvaloniaProperty) .Ldloc(bloc.Local) // TODO: provide anchor? .Ldnull(); emitter.EmitCall(Types.AvaloniaObjectBindMethod, true); }
public XamlILNodeEmitResult Emit(XamlEmitContext <IXamlILEmitter, XamlILNodeEmitResult> context, IXamlILEmitter codeGen) { codeGen.Newobj(_constructor); codeGen .Dup() .Ldc_I4(_values.Count) .EmitCall(_listSetCapacityMethod); foreach (var value in _values) { codeGen.Dup(); context.Emit(value, codeGen, _elementType); codeGen.EmitCall(_listAddMethod); } return(XamlILNodeEmitResult.Type(0, Type.GetClrType())); }
public void Emit(XamlEmitContext <IXamlILEmitter, XamlILNodeEmitResult> context, IXamlILEmitter codeGen) => codeGen.EmitCall( context.GetAvaloniaTypes() .PropertyPathBuilder.FindMethod(m => m.Name == "ChildTraversal"));
private void EmitSetStyledPropertyValue(IXamlILEmitter emitter) { var method = Types.AvaloniaObjectSetStyledPropertyValue.MakeGenericMethod(new[] { Parameters[1] }); emitter.EmitCall(method, true); }