MegaBites-AI/Windows-powershell
0308
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 