Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jruby/jruby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: c2aed0220f07
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: cd3a8b8d6d31
Choose a head ref
  • 11 commits
  • 22 files changed
  • 1 contributor

Commits on May 14, 2016

  1. 3
    Copy the full SHA
    2c07e6a View commit details
  2. Copy the full SHA
    d78bec9 View commit details
  3. Copy the full SHA
    07530db View commit details
  4. Copy the full SHA
    e4d6027 View commit details
  5. Copy the full SHA
    38fc752 View commit details
  6. [Truffle] Missing insert!

    chrisseaton committed May 14, 2016
    Copy the full SHA
    9e09032 View commit details
  7. Copy the full SHA
    c935bbb View commit details
  8. Copy the full SHA
    1a503f5 View commit details
  9. Copy the full SHA
    9921450 View commit details
  10. Copy the full SHA
    f101255 View commit details
  11. Copy the full SHA
    cd3a8b8 View commit details
Showing with 97 additions and 131 deletions.
  1. +1 −1 truffle/src/main/java/org/jruby/truffle/builtins/PrimitiveManager.java
  2. +1 −4 truffle/src/main/java/org/jruby/truffle/core/{rubinius → }/VMPrimitiveNodes.java
  3. +3 −5 truffle/src/main/java/org/jruby/truffle/core/binding/BindingNodes.java
  4. +6 −6 truffle/src/main/java/org/jruby/truffle/core/kernel/KernelNodes.java
  5. +1 −1 truffle/src/main/java/org/jruby/truffle/core/method/MethodNodes.java
  6. +1 −1 truffle/src/main/java/org/jruby/truffle/core/module/ModuleNodes.java
  7. +1 −1 truffle/src/main/java/org/jruby/truffle/core/proc/ProcNodes.java
  8. +1 −1 truffle/src/main/java/org/jruby/truffle/core/rubinius/RubiniusLastStringWriteNode.java
  9. +2 −2 truffle/src/main/java/org/jruby/truffle/language/CallStackManager.java
  10. +1 −1 truffle/src/main/java/org/jruby/truffle/language/arguments/ReadUserKeywordsHashNode.java
  11. +38 −82 truffle/src/main/java/org/jruby/truffle/language/arguments/RubyArguments.java
  12. +1 −1 truffle/src/main/java/org/jruby/truffle/language/dispatch/DispatchNode.java
  13. +1 −1 truffle/src/main/java/org/jruby/truffle/language/dispatch/RubyCallNode.java
  14. +1 −1 truffle/src/main/java/org/jruby/truffle/language/dispatch/UnresolvedDispatchNode.java
  15. +3 −1 truffle/src/main/java/org/jruby/truffle/language/methods/AddMethodNode.java
  16. +3 −3 truffle/src/main/java/org/jruby/truffle/language/methods/DeclarationContext.java
  17. +1 −2 truffle/src/main/java/org/jruby/truffle/language/methods/InternalMethod.java
  18. +22 −7 truffle/src/main/java/org/jruby/truffle/language/methods/SymbolProcNode.java
  19. +2 −2 truffle/src/main/java/org/jruby/truffle/language/objects/AllocateObjectNode.java
  20. +3 −4 truffle/src/main/java/org/jruby/truffle/language/objects/ObjectGraph.java
  21. +2 −2 truffle/src/main/java/org/jruby/truffle/language/parser/jruby/TranslatorDriver.java
  22. +2 −2 truffle/src/main/java/org/jruby/truffle/tools/simpleshell/SimpleShell.java
Original file line number Diff line number Diff line change
@@ -31,7 +31,7 @@
import org.jruby.truffle.core.rubinius.StatPrimitiveNodesFactory;
import org.jruby.truffle.core.rubinius.UndefinedPrimitiveNodes;
import org.jruby.truffle.core.rubinius.UndefinedPrimitiveNodesFactory;
import org.jruby.truffle.core.rubinius.VMPrimitiveNodesFactory;
import org.jruby.truffle.core.VMPrimitiveNodesFactory;
import org.jruby.truffle.core.rubinius.WeakRefPrimitiveNodesFactory;
import org.jruby.truffle.core.string.StringNodesFactory;
import org.jruby.truffle.core.symbol.SymbolNodesFactory;
Original file line number Diff line number Diff line change
@@ -35,7 +35,7 @@
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.jruby.truffle.core.rubinius;
package org.jruby.truffle.core;

import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
@@ -88,9 +88,6 @@
import static jnr.constants.platform.Errno.EINTR;
import static jnr.constants.platform.WaitFlags.WNOHANG;

/**
* Rubinius primitives associated with the VM.
*/
public abstract class VMPrimitiveNodes {

@Primitive(name = "vm_catch", needsSelf = false)
Original file line number Diff line number Diff line change
@@ -45,10 +45,8 @@
public abstract class BindingNodes {

public static DynamicObject createBinding(RubyContext context, MaterializedFrame frame) {
final Object[] arguments = frame.getArguments();

final MaterializedFrame bindingFrame = Truffle.getRuntime().createMaterializedFrame(
RubyArguments.pack(frame, null, RubyArguments.getMethod(arguments), RubyArguments.getDeclarationContext(arguments), null, RubyArguments.getSelf(arguments), RubyArguments.getBlock(arguments), RubyArguments.getArguments(arguments)),
RubyArguments.pack(frame, null, RubyArguments.getMethod(frame), RubyArguments.getDeclarationContext(frame), null, RubyArguments.getSelf(frame), RubyArguments.getBlock(frame), RubyArguments.getArguments(frame)),
newFrameDescriptor(context));

return Layouts.BINDING.createBinding(context.getCoreLibrary().getBindingFactory(), bindingFrame);
@@ -66,7 +64,7 @@ public static FrameDescriptor getFrameDescriptor(DynamicObject binding) {

public static MaterializedFrame getDeclarationFrame(DynamicObject binding) {
assert RubyGuards.isRubyBinding(binding);
return RubyArguments.getDeclarationFrame(Layouts.BINDING.getFrame(binding).getArguments());
return RubyArguments.getDeclarationFrame(Layouts.BINDING.getFrame(binding));
}

protected static class FrameSlotAndDepth {
@@ -329,7 +327,7 @@ public abstract static class ReceiverNode extends UnaryCoreMethodNode {

@Specialization
public Object receiver(DynamicObject binding) {
return RubyArguments.getSelf(Layouts.BINDING.getFrame(binding).getArguments());
return RubyArguments.getSelf(Layouts.BINDING.getFrame(binding));
}
}

Original file line number Diff line number Diff line change
@@ -316,13 +316,13 @@ public abstract static class BlockGivenNode extends CoreMethodArrayArgumentsNode
@Specialization
public boolean blockGiven(MaterializedFrame callerFrame,
@Cached("createBinaryProfile()") ConditionProfile blockProfile) {
return blockProfile.profile(RubyArguments.getBlock(callerFrame.getArguments()) != null);
return blockProfile.profile(RubyArguments.getBlock(callerFrame) != null);
}

@TruffleBoundary
@Specialization
public boolean blockGiven(NotProvided noCallerFrame) {
return RubyArguments.getBlock(Truffle.getRuntime().getCallerFrame().getFrame(FrameInstance.FrameAccess.READ_ONLY, false).getArguments()) != null;
return RubyArguments.getBlock(Truffle.getRuntime().getCallerFrame().getFrame(FrameInstance.FrameAccess.READ_ONLY, false)) != null;
}

}
@@ -556,11 +556,11 @@ public Object evalNoBindingCached(
final InternalMethod method = new InternalMethod(
cachedRootNode.getRootNode().getSharedMethodInfo(),
cachedRootNode.getRootNode().getSharedMethodInfo().getName(),
RubyArguments.getMethod(parentFrame.getArguments()).getDeclaringModule(),
RubyArguments.getMethod(parentFrame).getDeclaringModule(),
Visibility.PUBLIC,
cachedCallTarget);

return callNode.call(frame, RubyArguments.pack(parentFrame, null, method, RubyArguments.getDeclarationContext(parentFrame.getArguments()), null, callerSelf, null, new Object[]{}));
return callNode.call(frame, RubyArguments.pack(parentFrame, null, method, RubyArguments.getDeclarationContext(parentFrame), null, callerSelf, null, new Object[]{}));
}

@Specialization(guards = {
@@ -570,7 +570,7 @@ public Object evalNoBindingUncached(VirtualFrame frame, DynamicObject source, No
NotProvided filename, NotProvided lineNumber, @Cached("create()") IndirectCallNode callNode) {
final DynamicObject binding = getCallerBinding(frame);
final MaterializedFrame topFrame = Layouts.BINDING.getFrame(binding);
RubyArguments.setSelf(topFrame.getArguments(), RubyArguments.getSelf(frame));
RubyArguments.setSelf(topFrame, RubyArguments.getSelf(frame));
final CodeLoader.DeferredCall deferredCall = doEvalX(source, binding, "(eval)", 1, true);
return deferredCall.call(frame, callNode);

@@ -1144,7 +1144,7 @@ public abstract static class LambdaNode extends CoreMethodArrayArgumentsNode {
@Specialization
public DynamicObject lambda(NotProvided block) {
final Frame parentFrame = getContext().getCallStack().getCallerFrameIgnoringSend().getFrame(FrameAccess.READ_ONLY, true);
final DynamicObject parentBlock = RubyArguments.getBlock(parentFrame.getArguments());
final DynamicObject parentBlock = RubyArguments.getBlock(parentFrame);

if (parentBlock == null) {
CompilerDirectives.transferToInterpreter();
Original file line number Diff line number Diff line change
@@ -248,7 +248,7 @@ public SetReceiverNode(RubyContext context, SourceSection sourceSection, Object

@Override
public Object execute(VirtualFrame frame) {
RubyArguments.setSelf(frame.getArguments(), receiver);
RubyArguments.setSelf(frame, receiver);
return methodCallNode.call(frame, frame.getArguments());
}

Original file line number Diff line number Diff line change
@@ -1078,7 +1078,7 @@ public CallMethodWithProcBody(RubyContext context, SourceSection sourceSection,

@Override
public Object execute(VirtualFrame frame) {
RubyArguments.setDeclarationFrame(frame.getArguments(), declarationFrame);
RubyArguments.setDeclarationFrame(frame, declarationFrame);
return procBody.execute(frame);
}

Original file line number Diff line number Diff line change
@@ -68,7 +68,7 @@ public DynamicObject proc(VirtualFrame frame, DynamicObject procClass, Object[]
final Frame parentFrame = getContext().getCallStack().getCallerFrameIgnoringSend()
.getFrame(FrameAccess.READ_ONLY, true);

final DynamicObject parentBlock = RubyArguments.getBlock(parentFrame.getArguments());
final DynamicObject parentBlock = RubyArguments.getBlock(parentFrame);

if (parentBlock == null) {
throw new RaiseException(coreExceptions().argumentErrorProcWithoutBlock(this));
Original file line number Diff line number Diff line change
@@ -41,7 +41,7 @@ public Object lastStringWrite(Object value) {
FrameSlot slot = callerFrame.getFrameDescriptor().findFrameSlot("$_");

while (slot == null) {
callerFrame = RubyArguments.getDeclarationFrame(callerFrame.getArguments());
callerFrame = RubyArguments.getDeclarationFrame(callerFrame);

if (callerFrame == null) {
break;
Original file line number Diff line number Diff line change
@@ -94,7 +94,7 @@ public Node visitFrame(FrameInstance frameInstance) {
}

private InternalMethod getMethod(FrameInstance frame) {
return RubyArguments.getMethod(frame.getFrame(FrameInstance.FrameAccess.READ_ONLY, true).getArguments());
return RubyArguments.getMethod(frame.getFrame(FrameInstance.FrameAccess.READ_ONLY, true));
}

public Backtrace getBacktrace(Node currentNode, Throwable javaThrowable) {
@@ -140,7 +140,7 @@ public Backtrace getBacktrace(Node currentNode,

if (omit == 0 && currentNode != null && Truffle.getRuntime().getCurrentFrame() != null) {
final InternalMethod method = RubyArguments.tryGetMethod(Truffle.getRuntime().getCurrentFrame()
.getFrame(FrameInstance.FrameAccess.READ_ONLY, true).getArguments());
.getFrame(FrameInstance.FrameAccess.READ_ONLY, true));

activations.add(new Activation(currentNode, method));
}
Original file line number Diff line number Diff line change
@@ -59,7 +59,7 @@ public Object execute(VirtualFrame frame) {
final Object converted = callToHashNode.call(frame, lastArgument, "to_hash", null);

if (RubyGuards.isRubyHash(converted)) {
RubyArguments.setArgument(frame.getArguments(), argumentCount - 1, converted);
RubyArguments.setArgument(frame, argumentCount - 1, converted);
return converted;
}
}
Original file line number Diff line number Diff line change
@@ -64,103 +64,59 @@ public static Object[] pack(
return packed;
}

// Getters on Object[]

public static MaterializedFrame getDeclarationFrame(Object[] arguments) {
return (MaterializedFrame) arguments[ArgumentIndicies.DECLARATION_FRAME.ordinal()];
}

public static MaterializedFrame getCallerFrame(Object[] arguments) {
return (MaterializedFrame) arguments[ArgumentIndicies.CALLER_FRAME.ordinal()];
}

public static InternalMethod getMethod(Object[] arguments) {
return (InternalMethod) arguments[ArgumentIndicies.METHOD.ordinal()];
}

public static DeclarationContext getDeclarationContext(Object[] arguments) {
return (DeclarationContext) arguments[ArgumentIndicies.DECLARATION_CONTEXT.ordinal()];
}

public static FrameOnStackMarker getFrameOnStackMarker(Object[] arguments) {
return (FrameOnStackMarker) arguments[ArgumentIndicies.FRAME_ON_STACK_MARKER.ordinal()];
}

public static Object getSelf(Object[] arguments) {
return arguments[ArgumentIndicies.SELF.ordinal()];
}

public static DynamicObject getBlock(Object[] arguments) {
return (DynamicObject) arguments[ArgumentIndicies.BLOCK.ordinal()];
}

public static int getArgumentsCount(Object[] arguments) {
return arguments.length - RUNTIME_ARGUMENT_COUNT;
}

public static Object getArgument(Object[] arguments, int index) {
return arguments[RUNTIME_ARGUMENT_COUNT + index];
}

public static Object[] getArguments(Object[] arguments) {
return ArrayUtils.extractRange(arguments, RUNTIME_ARGUMENT_COUNT, arguments.length);
}

public static Object[] getArguments(Object[] arguments, int start) {
return ArrayUtils.extractRange(arguments, RUNTIME_ARGUMENT_COUNT + start, arguments.length);
}

// Getters on Frame
// Getters

public static MaterializedFrame getDeclarationFrame(Frame frame) {
return getDeclarationFrame(frame.getArguments());
return (MaterializedFrame) frame.getArguments()[ArgumentIndicies.DECLARATION_FRAME.ordinal()];
}

public static MaterializedFrame getCallerFrame(Frame frame) {
return getCallerFrame(frame.getArguments());
return (MaterializedFrame) frame.getArguments()[ArgumentIndicies.CALLER_FRAME.ordinal()];
}

public static InternalMethod getMethod(Frame frame) {
return getMethod(frame.getArguments());
return (InternalMethod) frame.getArguments()[ArgumentIndicies.METHOD.ordinal()];
}

public static DeclarationContext getDeclarationContext(Frame frame) {
return getDeclarationContext(frame.getArguments());
return (DeclarationContext) frame.getArguments()[ArgumentIndicies.DECLARATION_CONTEXT.ordinal()];
}

public static FrameOnStackMarker getFrameOnStackMarker(Frame frame) {
return getFrameOnStackMarker(frame.getArguments());
return (FrameOnStackMarker) frame.getArguments()[ArgumentIndicies.FRAME_ON_STACK_MARKER.ordinal()];
}

public static Object getSelf(Frame frame) {
return getSelf(frame.getArguments());
return frame.getArguments()[ArgumentIndicies.SELF.ordinal()];
}

public static DynamicObject getBlock(Frame frame) {
return getBlock(frame.getArguments());
return (DynamicObject) frame.getArguments()[ArgumentIndicies.BLOCK.ordinal()];
}

public static int getArgumentsCount(Frame frame) {
return getArgumentsCount(frame.getArguments());
return frame.getArguments().length - RUNTIME_ARGUMENT_COUNT;
}

public static Object getArgument(Frame frame, int index) {
return getArgument(frame.getArguments(), index);
return frame.getArguments()[RUNTIME_ARGUMENT_COUNT + index];
}

public static Object[] getArguments(Frame frame) {
return getArguments(frame.getArguments());
Object[] arguments = frame.getArguments();
return ArrayUtils.extractRange(arguments, RUNTIME_ARGUMENT_COUNT, arguments.length);
}

public static Object[] getArguments(Frame frame, int start) {
return getArguments(frame.getArguments(), start);
Object[] arguments = frame.getArguments();
return ArrayUtils.extractRange(arguments, RUNTIME_ARGUMENT_COUNT + start, arguments.length);
}

// Getters for the declaration frame that let you reach up several levels

public static MaterializedFrame getDeclarationFrame(VirtualFrame frame, int level) {
assert level > 0;
return getDeclarationFrame(RubyArguments.getDeclarationFrame(frame.getArguments()), level - 1);
return getDeclarationFrame(RubyArguments.getDeclarationFrame(frame), level - 1);
}

@ExplodeLoop
@@ -171,42 +127,42 @@ public static MaterializedFrame getDeclarationFrame(MaterializedFrame frame, int
MaterializedFrame currentFrame = frame;

for (int n = 0; n < level; n++) {
currentFrame = RubyArguments.getDeclarationFrame(currentFrame.getArguments());
currentFrame = RubyArguments.getDeclarationFrame(currentFrame);
}

return currentFrame;
}

// Getters that fail safely for when you aren't even sure if this is a Ruby frame

public static MaterializedFrame tryGetDeclarationFrame(Object[] arguments) {
if (ArgumentIndicies.DECLARATION_FRAME.ordinal() >= arguments.length) {
public static MaterializedFrame tryGetDeclarationFrame(Frame frame) {
if (ArgumentIndicies.DECLARATION_FRAME.ordinal() >= frame.getArguments().length) {
return null;
}

final Object frame = arguments[ArgumentIndicies.DECLARATION_FRAME.ordinal()];
final Object declarationFrame = frame.getArguments()[ArgumentIndicies.DECLARATION_FRAME.ordinal()];

if (frame instanceof MaterializedFrame) {
return (MaterializedFrame) frame;
if (declarationFrame instanceof MaterializedFrame) {
return (MaterializedFrame) declarationFrame;
}

return null;
}

public static Object tryGetSelf(Object[] arguments) {
if (ArgumentIndicies.SELF.ordinal() >= arguments.length) {
public static Object tryGetSelf(Frame frame) {
if (ArgumentIndicies.SELF.ordinal() >= frame.getArguments().length) {
return null;
}

return getSelf(arguments);
return frame.getArguments()[ArgumentIndicies.SELF.ordinal()];
}

public static DynamicObject tryGetBlock(Object[] arguments) {
if (ArgumentIndicies.BLOCK.ordinal() >= arguments.length) {
public static DynamicObject tryGetBlock(Frame frame) {
if (ArgumentIndicies.BLOCK.ordinal() >= frame.getArguments().length) {
return null;
}

final Object block = arguments[ArgumentIndicies.BLOCK.ordinal()];
final Object block = frame.getArguments()[ArgumentIndicies.BLOCK.ordinal()];

if (block instanceof DynamicObject) {
return (DynamicObject) block;
@@ -215,12 +171,12 @@ public static DynamicObject tryGetBlock(Object[] arguments) {
}
}

public static InternalMethod tryGetMethod(Object[] arguments) {
if (ArgumentIndicies.METHOD.ordinal() >= arguments.length) {
public static InternalMethod tryGetMethod(Frame frame) {
if (ArgumentIndicies.METHOD.ordinal() >= frame.getArguments().length) {
return null;
}

final Object method = arguments[ArgumentIndicies.METHOD.ordinal()];
final Object method = frame.getArguments()[ArgumentIndicies.METHOD.ordinal()];

if (method instanceof InternalMethod) {
return (InternalMethod) method;
@@ -231,20 +187,20 @@ public static InternalMethod tryGetMethod(Object[] arguments) {

// Setters

public static void setDeclarationFrame(Object[] arguments, MaterializedFrame declarationFrame) {
arguments[ArgumentIndicies.DECLARATION_FRAME.ordinal()] = declarationFrame;
public static void setDeclarationFrame(Frame frame, MaterializedFrame declarationFrame) {
frame.getArguments()[ArgumentIndicies.DECLARATION_FRAME.ordinal()] = declarationFrame;
}

public static void setDeclarationContext(Object[] arguments, DeclarationContext declarationContext) {
arguments[ArgumentIndicies.DECLARATION_CONTEXT.ordinal()] = declarationContext;
public static void setDeclarationContext(Frame frame, DeclarationContext declarationContext) {
frame.getArguments()[ArgumentIndicies.DECLARATION_CONTEXT.ordinal()] = declarationContext;
}

public static void setSelf(Object[] arguments, Object self) {
arguments[ArgumentIndicies.SELF.ordinal()] = self;
public static void setSelf(Frame frame, Object self) {
frame.getArguments()[ArgumentIndicies.SELF.ordinal()] = self;
}

public static void setArgument(Object[] internalArguments, int index, Object value) {
internalArguments[RUNTIME_ARGUMENT_COUNT + index] = value;
public static void setArgument(Frame frame, int index, Object value) {
frame.getArguments()[RUNTIME_ARGUMENT_COUNT + index] = value;
}

}
Original file line number Diff line number Diff line change
@@ -68,7 +68,7 @@ protected InternalMethod lookup(
}

// Check visibility
if (!ignoreVisibility && !method.isVisibleTo(this, callerClass)) {
if (!ignoreVisibility && !method.isVisibleTo(callerClass)) {
return null;
}

Loading