示例#1
0
            public MessageSendBinder canonicalBinderFor(MessageReceiverKind receiverKind, BehavioralObject selfReceiverClass, ESSymbol selector)
            {
                Dictionary <ESSymbol, MessageSendBinder> registry = null;
                MessageSendBinder binder;

                if (selfReceiverClass == null)
                {
                    selfReceiverClass = UnknownClass;
                }
                switch (receiverKind)
                {
                case MessageReceiverKind.Self:
                    /*
                     * if (!traitSelfReceiverRegistry.TryGetValue(selfReceiverClass, out registry)) {
                     *      registry = new Dictionary<ESSymbol, MessageSendBinder>();
                     *      traitSelfReceiverRegistry[selfReceiverClass] = registry;
                     * }
                     * if (!registry.TryGetValue(selector, out binder)) {
                     *      binder = new MessageSendBinder(DynamicBindingGuru, receiverKind, selfReceiverClass, selector);
                     *      registry[selector] = binder;
                     * }
                     * return binder;
                     */
                    registry = selfReceiverRegistry;
                    break;

                case MessageReceiverKind.General:
                    registry = generalReceiverRegistry;
                    break;

                case MessageReceiverKind.Super:
                    registry = superReceiverRegistry;
                    break;

                case MessageReceiverKind.ThisContext:
                    registry = thisContextReceiverRegistry;
                    break;
                }
                if (!registry.TryGetValue(selector, out binder))
                {
                    binder             = new MessageSendBinder(DynamicBindingGuru, receiverKind, selector);
                    registry[selector] = binder;
                }
                return(binder);
            }
示例#2
0
 protected MessageSendBinder(DynamicBindingGuru dynamicBindingGuru, MessageReceiverKind receiverKind, BehavioralObject selfReceiverClass, ESSymbol selector)
     : this(dynamicBindingGuru, receiverKind, selector)
 {
     this.selfReceiverClass = selfReceiverClass;
 }
示例#3
0
 protected MessageSendBinder(DynamicBindingGuru dynamicBindingGuru, MessageReceiverKind receiverKind, ESSymbol selector)
 {
     this.dynamicBindingGuru = dynamicBindingGuru;
     this.receiverKind       = receiverKind;
     this.selector           = selector;
 }
示例#4
0
        public ConstantExpression messageSendCallSiteConstantFor(MessageReceiverKind receiverKind, BehavioralObject selfReceiverClass, ESSymbol messageSelector)
        {
            switch (receiverKind)
            {
            case MessageReceiverKind.General:
                logMessageSent(messageSelector);
                break;

            case MessageReceiverKind.Self:
                logMessageSentToSelf(messageSelector);
                break;

            case MessageReceiverKind.Super:
                logMessageSentToSuper(messageSelector);
                break;

            case MessageReceiverKind.ThisContext:
                logMessageSentToThisContext(messageSelector);
                break;
            }
            var binder = MessageSendBinderRegistry.canonicalBinderFor(receiverKind, selfReceiverClass, messageSelector);

            switch (messageSelector.NumArgs)
            {
            case 0:
                return(Expression.Constant(CallSite <Functor2 <Object, CallSite, Object> > .Create(binder)));

            case 1:
                return(Expression.Constant(CallSite <Functor3 <Object, CallSite, Object, Object> > .Create(binder)));

            case 2:
                return(Expression.Constant(CallSite <Functor4 <Object, CallSite, Object, Object, Object> > .Create(binder)));

            case 3:
                return(Expression.Constant(CallSite <Functor5 <Object, CallSite, Object, Object, Object, Object> > .Create(binder)));

            case 4:
                return(Expression.Constant(CallSite <Functor6 <Object, CallSite, Object, Object, Object, Object, Object> > .Create(binder)));

            case 5:
                return(Expression.Constant(CallSite <Functor7 <Object, CallSite, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 6:
                return(Expression.Constant(CallSite <Functor8 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 7:
                return(Expression.Constant(CallSite <Functor9 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 8:
                return(Expression.Constant(CallSite <Functor10 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 9:
                return(Expression.Constant(CallSite <Functor11 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 10:
                return(Expression.Constant(CallSite <Functor12 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 11:
                return(Expression.Constant(CallSite <Functor13 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 12:
                return(Expression.Constant(CallSite <Functor14 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 13:
                return(Expression.Constant(CallSite <Functor15 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 14:
                return(Expression.Constant(CallSite <Functor16 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 15:
                return(Expression.Constant(CallSite <Functor17 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 16:
                return(Expression.Constant(CallSite <Functor18 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 17:
                return(Expression.Constant(CallSite <Functor19 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 18:
                return(Expression.Constant(CallSite <Functor20 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 19:
                return(Expression.Constant(CallSite <Functor21 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 20:
                return(Expression.Constant(CallSite <Functor22 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 21:
                return(Expression.Constant(CallSite <Functor23 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 22:
                return(Expression.Constant(CallSite <Functor24 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 23:
                return(Expression.Constant(CallSite <Functor25 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 24:
                return(Expression.Constant(CallSite <Functor26 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 25:
                return(Expression.Constant(CallSite <Functor27 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 26:
                return(Expression.Constant(CallSite <Functor28 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 27:
                return(Expression.Constant(CallSite <Functor29 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 28:
                return(Expression.Constant(CallSite <Functor30 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 29:
                return(Expression.Constant(CallSite <Functor31 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 30:
                return(Expression.Constant(CallSite <Functor32 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 31:
                return(Expression.Constant(CallSite <Functor33 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            case 32:
                return(Expression.Constant(CallSite <Functor34 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder)));

            default:
                return(null);
            }
        }