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()));
        }
Esempio n. 4
0
        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);
            }
Esempio n. 7
0
 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);
 }
Esempio n. 8
0
        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"));
Esempio n. 10
0
            private void EmitSetStyledPropertyValue(IXamlILEmitter emitter)
            {
                var method = Types.AvaloniaObjectSetStyledPropertyValue.MakeGenericMethod(new[] { Parameters[1] });

                emitter.EmitCall(method, true);
            }