Skip to content

Commit 3859044

Browse files
committed
Call #method_missing if #singleton_method_added is undefined
* Fixes #2258 * Use a DispatchNode for RubyContext#send.
1 parent ddc6eef commit 3859044

File tree

1 file changed

+2
-27
lines changed

1 file changed

+2
-27
lines changed

src/main/java/org/truffleruby/RubyContext.java

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@
4545
import org.truffleruby.core.hash.ReHashable;
4646
import org.truffleruby.core.inlined.CoreMethods;
4747
import org.truffleruby.core.kernel.AtExitManager;
48-
import org.truffleruby.core.kernel.KernelNodes;
4948
import org.truffleruby.core.kernel.TraceManager;
50-
import org.truffleruby.core.module.ModuleOperations;
5149
import org.truffleruby.core.module.RubyModule;
5250
import org.truffleruby.core.objectspace.ObjectSpaceManager;
5351
import org.truffleruby.core.proc.ProcOperations;
@@ -63,16 +61,13 @@
6361
import org.truffleruby.language.CallStackManager;
6462
import org.truffleruby.core.string.ImmutableRubyString;
6563
import org.truffleruby.language.LexicalScope;
66-
import org.truffleruby.language.Nil;
6764
import org.truffleruby.language.RubyBaseNode;
6865
import org.truffleruby.language.SafepointManager;
69-
import org.truffleruby.language.arguments.RubyArguments;
7066
import org.truffleruby.language.backtrace.BacktraceFormatter;
7167
import org.truffleruby.language.control.RaiseException;
68+
import org.truffleruby.language.dispatch.DispatchNode;
7269
import org.truffleruby.language.loader.CodeLoader;
7370
import org.truffleruby.language.loader.FeatureLoader;
74-
import org.truffleruby.language.methods.InternalMethod;
75-
import org.truffleruby.language.objects.MetaClassNode;
7671
import org.truffleruby.language.objects.shared.SharedObjects;
7772
import org.truffleruby.options.LanguageOptions;
7873
import org.truffleruby.options.Options;
@@ -435,27 +430,7 @@ private TruffleNFIPlatform createNativePlatform() {
435430

436431
@TruffleBoundary
437432
public static Object send(Object receiver, String methodName, Object... arguments) {
438-
final InternalMethod method = ModuleOperations
439-
.lookupMethodUncached(MetaClassNode.getUncached().execute(receiver), methodName, null);
440-
if (method == null || method.isUndefined()) {
441-
final RubyContext context = RubyLanguage.getCurrentContext();
442-
final String message = String.format(
443-
"undefined method `%s' for %s when using RubyContext#send() which ignores #method_missing",
444-
methodName,
445-
KernelNodes.ToSNode.uncachedBasicToS(receiver));
446-
throw new RaiseException(
447-
context,
448-
context.getCoreExceptions().noMethodError(
449-
message,
450-
receiver,
451-
methodName,
452-
arguments,
453-
EncapsulatingNodeReference.getCurrent().get()));
454-
}
455-
456-
return IndirectCallNode.getUncached().call(
457-
method.getCallTarget(),
458-
RubyArguments.pack(null, null, method, null, receiver, Nil.INSTANCE, arguments));
433+
return DispatchNode.getUncached().call(receiver, methodName, arguments);
459434
}
460435

461436
@TruffleBoundary

0 commit comments

Comments
 (0)