Skip to content

Commit 28b1e62

Browse files
committed
Handle foreign objects much like #method_missing
* Which means returning MISSING if RETURN_MISSING is used. RETURN_MISSING seems never used on foreign objects, except for defined?(recv.foo(*args)) where it would not work for a foreign object anyway.
1 parent d035d4c commit 28b1e62

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

src/main/java/org/truffleruby/language/dispatch/DispatchNode.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,15 @@ public Object execute(VirtualFrame frame, Object receiver, String methodName, Ru
127127
final InternalMethod method = methodLookup.execute(frame, metaclass, methodName, config);
128128

129129
if (methodMissing.profile(method == null || method.isUndefined())) {
130-
if (isForeignCall.profile(metaclass == getContext().getCoreLibrary().truffleInteropForeignClass)) {
131-
return callForeign(receiver, methodName, block, arguments);
132-
}
133-
134130
switch (config.missingBehavior) {
135131
case RETURN_MISSING:
136132
return MISSING;
137133
case CALL_METHOD_MISSING:
138-
return callMethodMissing(frame, receiver, methodName, block, arguments);
134+
if (isForeignCall.profile(metaclass == getContext().getCoreLibrary().truffleInteropForeignClass)) {
135+
return callForeign(receiver, methodName, block, arguments);
136+
} else {
137+
return callMethodMissing(frame, receiver, methodName, block, arguments);
138+
}
139139
}
140140
}
141141

0 commit comments

Comments
 (0)