public static IRubyObject invokeSelf(InvokeSite site, ThreadContext context, IRubyObject self, IRubyObject arg0, IRubyObject arg1, Block block) throws Throwable {
// TODO: literal block wrapper for break, etc
RubyClass selfClass = self.getMetaClass();
String methodName = site.name;
SwitchPoint switchPoint = (SwitchPoint)selfClass.getInvalidator().getData();
CacheEntry entry = selfClass.searchWithCache(methodName);
DynamicMethod method = entry.method;
if (methodMissing(entry, CallType.FUNCTIONAL, methodName, self)) {
return callMethodMissing(entry, CallType.FUNCTIONAL, context, self, methodName, arg0, arg1);
}