示例#1
0
        internal static object InvokeAdaptedSetMember(object obj, string methodName, object[] args, object valueToSet)
        {
            TypeTable        typeTable;
            ExecutionContext executionContextFromTLS = LocalPipeline.GetExecutionContextFromTLS();
            object           obj1 = obj;

            if (executionContextFromTLS != null)
            {
                typeTable = executionContextFromTLS.TypeTable;
            }
            else
            {
                typeTable = null;
            }
            PSObject.AdapterSet     mappedAdapter           = PSObject.GetMappedAdapter(obj1, typeTable);
            PSParameterizedProperty pSParameterizedProperty = mappedAdapter.OriginalAdapter.BaseGetMember <PSParameterizedProperty>(obj, methodName);

            if (pSParameterizedProperty == null && mappedAdapter.DotNetAdapter != null)
            {
                pSParameterizedProperty = mappedAdapter.DotNetAdapter.BaseGetMember <PSParameterizedProperty>(obj, methodName);
            }
            if (pSParameterizedProperty == null)
            {
                object[] typeFullName = new object[2];
                typeFullName[0] = ParserOps.GetTypeFullName(obj);
                typeFullName[1] = methodName;
                throw InterpreterError.NewInterpreterException(methodName, typeof(RuntimeException), null, "MethodNotFound", ParserStrings.MethodNotFound, typeFullName);
            }
            else
            {
                pSParameterizedProperty.InvokeSet(valueToSet, args);
                return(valueToSet);
            }
        }
示例#2
0
        internal static object GetAdaptedValue(object obj, string member)
        {
            ExecutionContext executionContextFromTLS = LocalPipeline.GetExecutionContextFromTLS();
            PSMemberInfo     memberInfo = null;

            if ((executionContextFromTLS != null) && (executionContextFromTLS.TypeTable != null))
            {
                ConsolidatedString typeNames = PSObject.GetTypeNames(obj);
                memberInfo = executionContextFromTLS.TypeTable.GetMembers <PSMemberInfo>(typeNames)[member];
                if (memberInfo != null)
                {
                    memberInfo = CloneMemberInfo(memberInfo, obj);
                }
            }
            PSObject.AdapterSet mappedAdapter = PSObject.GetMappedAdapter(obj, (executionContextFromTLS != null) ? executionContextFromTLS.TypeTable : null);
            if (memberInfo == null)
            {
                memberInfo = mappedAdapter.OriginalAdapter.BaseGetMember <PSMemberInfo>(obj, member);
            }
            if ((memberInfo == null) && (mappedAdapter.DotNetAdapter != null))
            {
                memberInfo = mappedAdapter.DotNetAdapter.BaseGetMember <PSMemberInfo>(obj, member);
            }
            if (memberInfo != null)
            {
                return(memberInfo.Value);
            }
            if ((executionContextFromTLS != null) && executionContextFromTLS.IsStrictVersion(2))
            {
                throw new PropertyNotFoundException("PropertyNotFoundStrict", null, ParserStrings.PropertyNotFoundStrict, new object[] { LanguagePrimitives.ConvertTo <string>(member) });
            }
            return(null);
        }
示例#3
0
        internal static object SetAdaptedValue(object obj, string member, object value)
        {
            object obj2;

            try
            {
                ExecutionContext executionContextFromTLS = LocalPipeline.GetExecutionContextFromTLS();
                PSMemberInfo     memberInfo = null;
                if ((executionContextFromTLS != null) && (executionContextFromTLS.TypeTable != null))
                {
                    ConsolidatedString typeNames = PSObject.GetTypeNames(obj);
                    memberInfo = executionContextFromTLS.TypeTable.GetMembers <PSMemberInfo>(typeNames)[member];
                    if (memberInfo != null)
                    {
                        memberInfo = PSGetMemberBinder.CloneMemberInfo(memberInfo, obj);
                    }
                }
                PSObject.AdapterSet mappedAdapter = PSObject.GetMappedAdapter(obj, (executionContextFromTLS != null) ? executionContextFromTLS.TypeTable : null);
                if (memberInfo == null)
                {
                    memberInfo = mappedAdapter.OriginalAdapter.BaseGetMember <PSMemberInfo>(obj, member);
                }
                if ((memberInfo == null) && (mappedAdapter.DotNetAdapter != null))
                {
                    memberInfo = mappedAdapter.DotNetAdapter.BaseGetMember <PSMemberInfo>(obj, member);
                }
                if (memberInfo == null)
                {
                    throw InterpreterError.NewInterpreterException(null, typeof(RuntimeException), null, "PropertyAssignmentException", ParserStrings.PropertyNotFound, new object[] { member });
                }
                memberInfo.Value = value;
                obj2             = value;
            }
            catch (SetValueException)
            {
                throw;
            }
            catch (Exception exception)
            {
                ExceptionHandlingOps.ConvertToMethodInvocationException(exception, typeof(SetValueInvocationException), member, 0, null);
                throw;
            }
            return(obj2);
        }
示例#4
0
 internal PSMemberInfo GetPSMemberInfo(DynamicMetaObject target, out BindingRestrictions restrictions, out bool canOptimize, out Type aliasConversionType, HashSet <string> aliases = null, List <BindingRestrictions> aliasRestrictions = null)
 {
     lock (this)
     {
         aliasConversionType = null;
         if (this._static)
         {
             restrictions = typeof(Type).IsAssignableFrom(target.LimitType) ? BindingRestrictions.GetInstanceRestriction(target.Expression, target.Value) : target.PSGetTypeRestriction();
             restrictions = restrictions.Merge(BinderUtils.GetVersionCheck(this, this._version));
             canOptimize  = true;
             return(PSObject.GetStaticCLRMember(target.Value, base.Name));
         }
         canOptimize = false;
         PSMemberInfo       info  = null;
         ConsolidatedString types = null;
         ExecutionContext   executionContextFromTLS = LocalPipeline.GetExecutionContextFromTLS();
         TypeTable          typeTable = (executionContextFromTLS != null) ? executionContextFromTLS.TypeTable : null;
         if (this._hasTypeTableMember)
         {
             types = PSObject.GetTypeNames(target.Value);
             if (typeTable != null)
             {
                 info = typeTable.GetMembers <PSMemberInfo>(types)[base.Name];
                 if (info != null)
                 {
                     canOptimize = true;
                 }
             }
         }
         object obj2 = PSObject.Base(target.Value);
         PSObject.AdapterSet mappedAdapter = PSObject.GetMappedAdapter(obj2, typeTable);
         if (info == null)
         {
             canOptimize = mappedAdapter.OriginalAdapter.SiteBinderCanOptimize;
             if (canOptimize)
             {
                 info = mappedAdapter.OriginalAdapter.BaseGetMember <PSMemberInfo>(obj2, base.Name);
             }
         }
         if (((info == null) && canOptimize) && (mappedAdapter.DotNetAdapter != null))
         {
             info = mappedAdapter.DotNetAdapter.BaseGetMember <PSMemberInfo>(obj2, base.Name);
         }
         restrictions = BinderUtils.GetVersionCheck(this, this._version);
         PSAliasProperty alias = info as PSAliasProperty;
         if (alias != null)
         {
             aliasConversionType = alias.ConversionType;
             if (aliasRestrictions == null)
             {
                 aliasRestrictions = new List <BindingRestrictions>();
             }
             info = ResolveAlias(alias, target, aliases, aliasRestrictions);
             if (info == null)
             {
                 canOptimize = false;
             }
             else
             {
                 foreach (BindingRestrictions restrictions2 in aliasRestrictions)
                 {
                     restrictions = restrictions.Merge(restrictions2);
                 }
             }
         }
         if (this._hasInstanceMember)
         {
             restrictions = restrictions.Merge(this.NotInstanceMember(target));
         }
         restrictions = restrictions.Merge(target.PSGetTypeRestriction());
         if (this._hasTypeTableMember)
         {
             restrictions = restrictions.Merge(BindingRestrictions.GetInstanceRestriction(Expression.Call(CachedReflectionInfo.PSGetMemberBinder_GetTypeTableFromTLS, new Expression[0]), typeTable));
             restrictions = restrictions.Merge(BindingRestrictions.GetExpressionRestriction(Expression.Call(CachedReflectionInfo.PSGetMemberBinder_IsTypeNameSame, target.Expression.Cast(typeof(object)), Expression.Constant(types.Key))));
         }
         return(info);
     }
 }