Ejemplo n.º 1
0
 internal override void MakeGetExpression(PythonBinder/*!*/ binder, Expression/*!*/ codeContext, DynamicMetaObject instance, DynamicMetaObject/*!*/ owner, ConditionalBuilder/*!*/ builder) {
     if (Getter.Length != 0 && !Getter[0].IsPublic) {
         // fallback to runtime call
         base.MakeGetExpression(binder, codeContext, instance, owner, builder);
     } else if (NeedToReturnProperty(instance, Getter)) {
         builder.FinishCondition(AstUtils.Constant(this));
     } else if (Getter[0].ContainsGenericParameters) {
         builder.FinishCondition(
             DefaultBinder.MakeError(
                 binder.MakeContainsGenericParametersError(
                     MemberTracker.FromMemberInfo(_info)
                 ),
                 typeof(object)
             ).Expression
         );
     } else if (instance != null) {
         builder.FinishCondition(
             AstUtils.Convert(
                 binder.MakeCallExpression(
                     new PythonOverloadResolverFactory(binder, codeContext),
                     Getter[0],
                     instance
                 ).Expression,
                 typeof(object)
             )
         );
     } else {
         builder.FinishCondition(
             AstUtils.Convert(
                 binder.MakeCallExpression(
                     new PythonOverloadResolverFactory(binder, codeContext),
                     Getter[0]
                 ).Expression,
                 typeof(object)
             )
         );                
     }
 }
Ejemplo n.º 2
0
        internal override Expression/*!*/ MakeGetExpression(PythonBinder/*!*/ binder, Expression/*!*/ codeContext, Expression instance, Expression/*!*/ owner, Expression/*!*/ error) {
            if (Getter.Length != 0 && !Getter[0].IsPublic) {
                // fallback to runtime call
                return base.MakeGetExpression(binder, codeContext, instance, owner, error);
            } else if (NeedToReturnProperty(instance, Getter)) {
                return AstUtils.Constant(this);
            } else if (Getter[0].ContainsGenericParameters) {
                return DefaultBinder.MakeError(
                    binder.MakeContainsGenericParametersError(
                        MemberTracker.FromMemberInfo(_info)
                    )
                );
            }

            Expression res;
            if (instance != null) {
                res = binder.MakeCallExpression(
                    codeContext,
                    Getter[0],
                    instance
                );
            } else {
                res = binder.MakeCallExpression(
                    codeContext,
                    Getter[0]
                );
            }
            Debug.Assert(res != null);
            return res;
        }