public static DynamicExpression GetMember(ActionBinder binder, string name, GetMemberBindingFlags getMemberFlags, Type result, params Expression[] arguments)
        {
            ContractUtils.RequiresNotNull(arguments, "arguments");
            ContractUtils.Requires(arguments.Length > 0, "arguments");

            return(Expression.Dynamic(OldGetMemberAction.Make(binder, name, getMemberFlags), result, arguments));
        }
Exemple #2
0
        public PythonBinder(ScriptDomainManager manager, PythonContext/*!*/ pythonContext, CodeContext context)
            : base(manager) {
            ContractUtils.RequiresNotNull(pythonContext, "pythonContext");

            _context = pythonContext;
            if (context != null) {
                context.LanguageContext.DomainManager.AssemblyLoaded += new EventHandler<AssemblyLoadedEventArgs>(DomainManager_AssemblyLoaded);

                foreach (Assembly asm in pythonContext.DomainManager.GetLoadedAssemblyList()) {
                    DomainManager_AssemblyLoaded(this, new AssemblyLoadedEventArgs(asm));
                }
            }

            EmptyGetMemberAction = OldGetMemberAction.Make(this, String.Empty);
        }
Exemple #3
0
 public GetMemberBinderHelper(CodeContext context, OldGetMemberAction action, object[] args) : base(context, action, args)
 {
     throw new NotImplementedException();
 }
        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;
        }