Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes308downloads
ComMetaObject.cs67 linesDownload Raw Back to ComInterop
1// Licensed to the .NET Foundation under one or more agreements.2// The .NET Foundation licenses this file to you under the MIT license.3 4using System.Dynamic;5using System.Linq.Expressions;6 7namespace System.Management.Automation.ComInterop8{9    // Note: we only need to support the operations used by ComBinder10    internal class ComMetaObject : DynamicMetaObject11    {12        internal ComMetaObject(Expression expression, BindingRestrictions restrictions, object arg)13            : base(expression, restrictions, arg)14        {15        }16 17        public override DynamicMetaObject BindInvokeMember(InvokeMemberBinder binder, DynamicMetaObject[] args)18        {19            Requires.NotNull(binder);20            return binder.Defer(args.AddFirst(WrapSelf()));21        }22 23        public override DynamicMetaObject BindInvoke(InvokeBinder binder, DynamicMetaObject[] args)24        {25            Requires.NotNull(binder);26            return binder.Defer(args.AddFirst(WrapSelf()));27        }28 29        public override DynamicMetaObject BindGetMember(GetMemberBinder binder)30        {31            Requires.NotNull(binder);32            return binder.Defer(WrapSelf());33        }34 35        public override DynamicMetaObject BindSetMember(SetMemberBinder binder, DynamicMetaObject value)36        {37            Requires.NotNull(binder);38            return binder.Defer(WrapSelf(), value);39        }40 41        public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes)42        {43            Requires.NotNull(binder);44            return binder.Defer(WrapSelf(), indexes);45        }46 47        public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value)48        {49            Requires.NotNull(binder);50            return binder.Defer(WrapSelf(), indexes.AddLast(value));51        }52 53        private DynamicMetaObject WrapSelf()54        {55            return new DynamicMetaObject(56                ComObject.RcwToComObject(Expression),57                BindingRestrictions.GetExpressionRestriction(58                    Expression.Call(59                        typeof(ComBinder).GetMethod(nameof(ComBinder.IsComObject), System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public),60                        Helpers.Convert(Expression, typeof(object))61                    )62                )63            );64        }65    }66}67