internal override Expression/*!*/ MakeGetExpression(PythonBinder/*!*/ binder, Expression/*!*/ codeContext, Expression instance, Expression/*!*/ owner, Expression/*!*/ error) { if (!_info.IsPublic || _info.DeclaringType.ContainsGenericParameters) { // fallback to reflection return base.MakeGetExpression(binder, codeContext, instance, owner, error); } if (instance == null) { if (_info.IsStatic) { return Ast.Field(null, _info); } else { return AstUtils.Constant(this); } } else { return Ast.Field( binder.ConvertExpression( instance, _info.DeclaringType, ConversionResultKind.ExplicitCast, codeContext ), _info ); } }
internal override void MakeGetExpression(PythonBinder/*!*/ binder, Expression/*!*/ codeContext, DynamicMetaObject instance, DynamicMetaObject/*!*/ owner, ConditionalBuilder/*!*/ builder) { if (!_info.IsPublic || _info.DeclaringType.ContainsGenericParameters) { // fallback to reflection base.MakeGetExpression(binder, codeContext, instance, owner, builder); } else if (instance == null) { if (_info.IsStatic) { builder.FinishCondition(AstUtils.Convert(Ast.Field(null, _info), typeof(object))); } else { builder.FinishCondition(Ast.Constant(this)); } } else { builder.FinishCondition( AstUtils.Convert( Ast.Field( binder.ConvertExpression( instance.Expression, _info.DeclaringType, ConversionResultKind.ExplicitCast, new PythonOverloadResolverFactory(binder, codeContext) ), _info ), typeof(object) ) ); } }