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); } }
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); }
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); }
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); } }