Exemple #1
0
        private bool MakeGetMemberRule(OldGetMemberAction action, CodeContext context, RuleBuilder rule)
        {
            object value;

            if (TryGetValue(action.Name, out value))
            {
                Debug.Assert(value is MemberTracker);
                MemberTracker memValue = (MemberTracker)value;

                rule.MakeTest(typeof(NamespaceTracker));
                rule.AddTest(
                    Expression.Equal(
                        Expression.Property(
                            Expression.Convert(rule.Parameters[0], typeof(NamespaceTracker)),
                            typeof(NamespaceTracker).GetProperty("Id")
                            ),
                        Expression.Constant(Id)
                        )
                    );


                Expression target = context.LanguageContext.Binder.ReturnMemberTracker(memValue.DeclaringType, memValue);

                rule.Target = rule.MakeReturn(context.LanguageContext.Binder, target);
                return(true);
            }
            return(false);
        }
        private readonly RuleBuilder _rule;                         // the rule we're building and returning

        public DoOperationBinderHelper(CodeContext context, OldDoOperationAction action, object[] args, RuleBuilder rule)
            : base(context, action)
        {
            _args  = args;
            _types = CompilerHelpers.GetTypes(args);
            _rule  = rule;
            _rule.MakeTest(_types);
        }
Exemple #3
0
        // This can produce a IsCallable rule that returns the immutable constant isCallable.
        // Beware that objects can have a mutable callable property. Eg, in Python, assign or delete the __call__ attribute.
        public static bool MakeIsCallableRule(CodeContext context, object self, bool isCallable, RuleBuilder rule) {
            rule.MakeTest(CompilerHelpers.GetType(self));
            rule.Target =
                rule.MakeReturn(
                    context.LanguageContext.Binder,
                    Ast.Constant(isCallable)
                );

            return true;
        }
Exemple #4
0
        // This can produce a IsCallable rule that returns the immutable constant isCallable.
        // Beware that objects can have a mutable callable property. Eg, in Python, assign or delete the __call__ attribute.
        public static bool MakeIsCallableRule(CodeContext context, object self, bool isCallable, RuleBuilder rule)
        {
            rule.MakeTest(CompilerHelpers.GetType(self));
            rule.Target =
                rule.MakeReturn(
                    context.LanguageContext.Binder,
                    Ast.Constant(isCallable)
                    );

            return(true);
        }
        private bool MakeGetMemberRule(OldGetMemberAction action, CodeContext context, RuleBuilder rule) {
            object value;
            if (TryGetValue(action.Name, out value)) {
                Debug.Assert(value is MemberTracker);
                MemberTracker memValue = (MemberTracker)value;

                rule.MakeTest(typeof(NamespaceTracker));
                rule.AddTest(
                    Expression.Equal(
                        Expression.Property(
                            Expression.Convert(rule.Parameters[0], typeof(NamespaceTracker)),
                            typeof(NamespaceTracker).GetProperty("Id")
                        ),
                        AstUtils.Constant(Id)
                    )
                );


                Expression target = context.LanguageContext.Binder.ReturnMemberTracker(memValue.DeclaringType, memValue);

                rule.Target = rule.MakeReturn(context.LanguageContext.Binder, target);
                return true;
            }
            return false;
        }