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); }
protected MessageSendBinder(DynamicBindingGuru dynamicBindingGuru, MessageReceiverKind receiverKind, BehavioralObject selfReceiverClass, ESSymbol selector) : this(dynamicBindingGuru, receiverKind, selector) { this.selfReceiverClass = selfReceiverClass; }
protected MessageSendBinder(DynamicBindingGuru dynamicBindingGuru, MessageReceiverKind receiverKind, ESSymbol selector) { this.dynamicBindingGuru = dynamicBindingGuru; this.receiverKind = receiverKind; this.selector = selector; }
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); } }