Skip to content

Commit

Permalink
Showing 15 changed files with 64 additions and 64 deletions.
Original file line number Diff line number Diff line change
@@ -395,7 +395,7 @@ public Object deleteNull(VirtualFrame frame, DynamicObject hash, Object key, Not
public Object deleteNull(VirtualFrame frame, DynamicObject hash, Object key, DynamicObject block) {
assert HashOperations.verifyStore(getContext(), hash);

return yieldNode.dispatch(frame, (DynamicObject) block, key);
return yieldNode.dispatch(frame, block, key);
}

@Specialization(guards = {"isPackedHash(hash)", "!isCompareByIdentity(hash)"})
Original file line number Diff line number Diff line change
@@ -82,8 +82,8 @@ public Object executeDispatch(
VirtualFrame frame,
Object receiverObject,
Object methodName,
Object blockObject,
Object argumentsObjects) {
DynamicObject blockObject,
Object[] argumentsObjects) {
if (!guard(methodName, receiverObject)) {
return next.executeDispatch(
frame,
@@ -103,7 +103,7 @@ public Object executeDispatch(
frame,
receiverObject,
methodName,
(DynamicObject) blockObject,
blockObject,
argumentsObjects,
"class modified");
}
@@ -127,7 +127,7 @@ public Object executeDispatch(
frame,
receiverObject,
methodName,
(DynamicObject) blockObject,
blockObject,
argumentsObjects,
"class modified");
}
Original file line number Diff line number Diff line change
@@ -71,8 +71,8 @@ public Object executeDispatch(
VirtualFrame frame,
Object receiverObject,
Object methodName,
Object blockObject,
Object argumentsObjects) {
DynamicObject blockObject,
Object[] argumentsObjects) {
if (!guard(methodName, receiverObject)) {
return next.executeDispatch(
frame,
@@ -91,7 +91,7 @@ public Object executeDispatch(
frame,
receiverObject,
methodName,
(DynamicObject) blockObject,
blockObject,
argumentsObjects,
"class modified");
}
Original file line number Diff line number Diff line change
@@ -78,8 +78,8 @@ public Object executeDispatch(
VirtualFrame frame,
Object receiverObject,
Object methodName,
Object blockObject,
Object argumentsObjects) {
DynamicObject blockObject,
Object[] argumentsObjects) {
if (!guard(methodName, receiverObject)) {
return next.executeDispatch(
frame,
@@ -98,7 +98,7 @@ public Object executeDispatch(
frame,
receiverObject,
methodName,
(DynamicObject) blockObject,
blockObject,
argumentsObjects,
"class modified");
}
@@ -107,10 +107,9 @@ public Object executeDispatch(
case CALL_METHOD:
// When calling #method_missing we need to prepend the symbol

final Object[] argumentsObjectsArray = (Object[]) argumentsObjects;
final Object[] modifiedArgumentsObjects = new Object[1 + argumentsObjectsArray.length];
final Object[] modifiedArgumentsObjects = new Object[1 + argumentsObjects.length];
modifiedArgumentsObjects[0] = getCachedNameAsSymbol();
ArrayUtils.arraycopy(argumentsObjectsArray, 0, modifiedArgumentsObjects, 1, argumentsObjectsArray.length);
ArrayUtils.arraycopy(argumentsObjects, 0, modifiedArgumentsObjects, 1, argumentsObjects.length);

return call(callNode, frame, method, receiverObject, blockObject, modifiedArgumentsObjects);

Original file line number Diff line number Diff line change
@@ -50,8 +50,8 @@ public Object executeDispatch(
VirtualFrame frame,
Object receiverObject,
Object methodName,
Object blockObject,
Object argumentsObjects) {
DynamicObject blockObject,
Object[] argumentsObjects) {
if (!guard(methodName, receiverObject)) {
return next.executeDispatch(
frame,
@@ -70,7 +70,7 @@ public Object executeDispatch(
frame,
receiverObject,
methodName,
(DynamicObject) blockObject,
blockObject,
argumentsObjects,
"class modified");
}
Original file line number Diff line number Diff line change
@@ -15,6 +15,7 @@
import com.oracle.truffle.api.nodes.DirectCallNode;
import com.oracle.truffle.api.nodes.InvalidAssumptionException;
import com.oracle.truffle.api.object.DynamicObject;

import org.jruby.truffle.nodes.RubyGuards;
import org.jruby.truffle.runtime.RubyContext;
import org.jruby.truffle.runtime.layouts.Layouts;
@@ -58,8 +59,8 @@ public Object executeDispatch(
VirtualFrame frame,
Object receiverObject,
Object methodName,
Object blockObject,
Object argumentsObjects) {
DynamicObject blockObject,
Object[] argumentsObjects) {
if (!guard(methodName, receiverObject)) {
return next.executeDispatch(
frame,
@@ -78,7 +79,7 @@ public Object executeDispatch(
frame,
receiverObject,
methodName,
(DynamicObject) blockObject,
blockObject,
argumentsObjects,
"class modified");
}
Original file line number Diff line number Diff line change
@@ -80,14 +80,14 @@ protected DynamicObject getCachedNameAsSymbol() {
return cachedNameAsSymbol;
}

protected static Object call(DirectCallNode callNode, VirtualFrame frame, InternalMethod method, Object receiver, Object block, Object arguments) {
protected static Object call(DirectCallNode callNode, VirtualFrame frame, InternalMethod method, Object receiver, DynamicObject block, Object[] arguments) {
return callNode.call(
frame,
RubyArguments.pack(
method,
method.getDeclarationFrame(),
receiver,
(DynamicObject) block,
(Object[]) arguments));
block,
arguments));
}
}
Original file line number Diff line number Diff line change
@@ -13,9 +13,11 @@
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.interop.TruffleObject;
import com.oracle.truffle.api.nodes.ExplodeLoop;
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.source.SourceSection;
import com.oracle.truffle.interop.messages.*;
import com.oracle.truffle.interop.node.ForeignObjectAccessNode;

import org.jruby.truffle.nodes.RubyNode;
import org.jruby.truffle.nodes.interop.RubyToIndexLabelNode;
import org.jruby.truffle.nodes.interop.RubyToIndexLabelNodeGen;
@@ -73,8 +75,8 @@ public Object executeDispatch(
VirtualFrame frame,
Object receiverObject,
Object methodName,
Object blockObject,
Object argumentsObjects) {
DynamicObject blockObject,
Object[] argumentsObjects) {
if (receiverObject instanceof TruffleObject) {
return doDispatch(frame, (TruffleObject) receiverObject, argumentsObjects);
} else {
@@ -88,8 +90,7 @@ public Object executeDispatch(
}


private Object doDispatch(VirtualFrame frame, TruffleObject receiverObject, Object argumentsObjects) {
Object[] arguments = (Object[]) argumentsObjects;
private Object doDispatch(VirtualFrame frame, TruffleObject receiverObject, Object[] arguments) {
if (arguments.length != arity) {
CompilerDirectives.transferToInterpreter();
throw new IllegalStateException();
Original file line number Diff line number Diff line change
@@ -18,6 +18,7 @@
import com.oracle.truffle.interop.messages.Read;
import com.oracle.truffle.interop.messages.Receiver;
import com.oracle.truffle.interop.node.ForeignObjectAccessNode;

import org.jruby.truffle.runtime.RubyContext;
import org.jruby.truffle.runtime.array.ArrayUtils;

@@ -47,13 +48,12 @@ public Object executeDispatch(
VirtualFrame frame,
Object receiverObject,
Object methodName,
Object blockObject,
Object argumentsObjects) {
DynamicObject blockObject,
Object[] argumentsObjects) {
if (receiverObject instanceof DynamicObject) {
Object[] arguments = (Object[]) argumentsObjects;
if (arguments.length == numberOfArguments) {
Object[] args = new Object[arguments.length + 2];
ArrayUtils.arraycopy(arguments, 0, args, 2, arguments.length);
if (argumentsObjects.length == numberOfArguments) {
Object[] args = new Object[argumentsObjects.length + 2];
ArrayUtils.arraycopy(argumentsObjects, 0, args, 2, argumentsObjects.length);
args[0] = cachedName;
args[1] = language;
return access.executeForeign(frame, language, args);
Original file line number Diff line number Diff line change
@@ -73,8 +73,8 @@ public Object executeDispatch(
VirtualFrame frame,
Object receiverObject,
Object methodName,
Object blockObject,
Object argumentsObjects) {
DynamicObject blockObject,
Object[] argumentsObjects) {
if (!guard(methodName, receiverObject)) {
return next.executeDispatch(
frame,
@@ -93,7 +93,7 @@ public Object executeDispatch(
frame,
receiverObject,
methodName,
(DynamicObject) blockObject,
blockObject,
argumentsObjects,
"class modified");
}
Original file line number Diff line number Diff line change
@@ -15,6 +15,7 @@
import com.oracle.truffle.api.nodes.DirectCallNode;
import com.oracle.truffle.api.nodes.InvalidAssumptionException;
import com.oracle.truffle.api.object.DynamicObject;

import org.jruby.truffle.runtime.RubyContext;
import org.jruby.truffle.runtime.layouts.Layouts;
import org.jruby.truffle.runtime.methods.InternalMethod;
@@ -62,8 +63,8 @@ public Object executeDispatch(
VirtualFrame frame,
Object receiverObject,
Object methodName,
Object blockObject,
Object argumentsObjects) {
DynamicObject blockObject,
Object[] argumentsObjects) {
if (!guard(methodName, receiverObject)) {
return next.executeDispatch(
frame,
@@ -82,7 +83,7 @@ public Object executeDispatch(
frame,
receiverObject,
methodName,
(DynamicObject) blockObject,
blockObject,
argumentsObjects,
"class modified");
}
Original file line number Diff line number Diff line change
@@ -11,6 +11,8 @@

import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.api.object.DynamicObject;

import org.jruby.truffle.runtime.RubyContext;

public class DispatchHeadNode extends Node {
@@ -38,8 +40,8 @@ public Object dispatch(
VirtualFrame frame,
Object receiverObject,
Object methodName,
Object blockObject,
Object argumentsObjects) {
DynamicObject blockObject,
Object[] argumentsObjects) {
return first.executeDispatch(
frame,
receiverObject,
Original file line number Diff line number Diff line change
@@ -13,6 +13,7 @@
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeUtil;
import com.oracle.truffle.api.object.DynamicObject;

import org.jruby.truffle.nodes.RubyGuards;
import org.jruby.truffle.nodes.RubyNode;
import org.jruby.truffle.runtime.ModuleOperations;
@@ -45,8 +46,8 @@ public abstract Object executeDispatch(
VirtualFrame frame,
Object receiverObject,
Object methodName,
Object blockObject,
Object argumentsObjects);
DynamicObject blockObject,
Object[] argumentsObjects);

@TruffleBoundary
protected InternalMethod lookup(
@@ -92,7 +93,7 @@ protected Object resetAndDispatch(
Object receiverObject,
Object methodName,
DynamicObject blockObject,
Object argumentsObjects,
Object[] argumentsObjects,
String reason) {
final DispatchHeadNode head = getHeadNode();
head.reset(reason);
Original file line number Diff line number Diff line change
@@ -60,8 +60,8 @@ public Object executeDispatch(
VirtualFrame frame,
Object receiverObject,
Object name,
Object blockObject,
Object argumentsObjects) {
DynamicObject blockObject,
Object[] argumentsObjects) {
final DispatchAction dispatchAction = getDispatchAction();

final DynamicObject callerClass = ignoreVisibility ? null : metaClassNode.executeMetaClass(frame, RubyArguments.getSelf(frame.getArguments()));
@@ -97,13 +97,11 @@ public Object executeDispatch(
}

if (dispatchAction == DispatchAction.CALL_METHOD) {
final Object[] argumentsObjectsArray = (Object[]) argumentsObjects;

final Object[] modifiedArgumentsObjects = new Object[1 + argumentsObjectsArray.length];
final Object[] modifiedArgumentsObjects = new Object[1 + argumentsObjects.length];

modifiedArgumentsObjects[0] = toSymbolNode.executeRubySymbol(frame, name);

ArrayUtils.arraycopy(argumentsObjectsArray, 0, modifiedArgumentsObjects, 1, argumentsObjectsArray.length);
ArrayUtils.arraycopy(argumentsObjects, 0, modifiedArgumentsObjects, 1, argumentsObjects.length);

return call(frame, missingMethod, receiverObject, blockObject, modifiedArgumentsObjects);
} else if (dispatchAction == DispatchAction.RESPOND_TO_METHOD) {
@@ -113,16 +111,16 @@ public Object executeDispatch(
}
}

private Object call(VirtualFrame frame, InternalMethod method, Object receiverObject, Object blockObject, Object argumentsObjects) {
private Object call(VirtualFrame frame, InternalMethod method, Object receiverObject, DynamicObject blockObject, Object[] argumentsObjects) {
return indirectCallNode.call(
frame,
method.getCallTarget(),
RubyArguments.pack(
method,
method.getDeclarationFrame(),
receiverObject,
(DynamicObject) blockObject,
(Object[]) argumentsObjects));
blockObject,
argumentsObjects));
}

}
Original file line number Diff line number Diff line change
@@ -63,8 +63,8 @@ public Object executeDispatch(
final VirtualFrame frame,
final Object receiverObject,
final Object methodName,
Object blockObject,
final Object argumentsObjects) {
DynamicObject blockObject,
final Object[] argumentsObjects) {
CompilerDirectives.transferToInterpreterAndInvalidate();

final DispatchNode dispatch = atomic(new Callable<DispatchNode>() {
@@ -93,8 +93,7 @@ public DispatchNode call() throws Exception {
depth++;
if (receiverObject instanceof DynamicObject) {
newDispathNode = doDynamicObject(frame, first, receiverObject, methodName, argumentsObjects);
}
else if (RubyGuards.isForeignObject(receiverObject)) {
} else if (RubyGuards.isForeignObject(receiverObject)) {
newDispathNode = createForeign(argumentsObjects, first, methodName);
} else {
newDispathNode = doUnboxedObject(frame, first, receiverObject, methodName);
@@ -109,9 +108,8 @@ else if (RubyGuards.isForeignObject(receiverObject)) {
return dispatch.executeDispatch(frame, receiverObject, methodName, blockObject, argumentsObjects);
}

private DispatchNode createForeign(Object argumentsObjects, DispatchNode first, Object methodName) {
Object[] args = (Object[]) argumentsObjects;
return new CachedForeignDispatchNode(getContext(), first, methodName, args.length);
private DispatchNode createForeign(Object[] argumentsObjects, DispatchNode first, Object methodName) {
return new CachedForeignDispatchNode(getContext(), first, methodName, argumentsObjects.length);
}

private DispatchNode doUnboxedObject(
@@ -170,7 +168,7 @@ private DispatchNode doDynamicObject(
DispatchNode first,
Object receiverObject,
Object methodName,
Object argumentsObjects) {
Object[] argumentsObjects) {
final DynamicObject callerClass;

if (ignoreVisibility) {
@@ -217,16 +215,15 @@ private String toString(Object methodName) {
}
}

private DispatchNode tryMultilanguage(VirtualFrame frame, DispatchNode first, Object methodName, Object argumentsObjects) {
private DispatchNode tryMultilanguage(VirtualFrame frame, DispatchNode first, Object methodName, Object[] argumentsObjects) {
if (getContext().getMultilanguageObject() != null) {
CompilerAsserts.neverPartOfCompilation();
TruffleObject multilanguageObject = getContext().getMultilanguageObject();
ForeignObjectAccessNode readLanguage = ForeignObjectAccessNode.getAccess(Read.create(Receiver.create(), Argument.create()));
TruffleObject language = (TruffleObject) readLanguage.executeForeign(frame, multilanguageObject, methodName);
Object[] arguments = (Object[]) argumentsObjects;
if (language != null) {
// EXECUTE(READ(...),...) on language
return new CachedForeignGlobalDispatchNode(getContext(), first, methodName, language, arguments.length);
return new CachedForeignGlobalDispatchNode(getContext(), first, methodName, language, argumentsObjects.length);
}
}
return null;

0 comments on commit d5d1f22

Please sign in to comment.