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: f8d14d09755e^
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 21069b630e9a
Choose a head ref
  • 2 commits
  • 45 files changed
  • 1 contributor

Commits on Oct 6, 2016

  1. Copy the full SHA
    f8d14d0 View commit details
  2. Copy the full SHA
    21069b6 View commit details
Showing with 232 additions and 538 deletions.
  1. +3 −6 truffle/src/main/java/org/jruby/truffle/cext/CExtNodes.java
  2. +1 −3 truffle/src/main/java/org/jruby/truffle/core/CoreLibrary.java
  3. +1 −12 truffle/src/main/java/org/jruby/truffle/core/VMPrimitiveNodes.java
  4. +1 −20 truffle/src/main/java/org/jruby/truffle/core/array/ArrayNodes.java
  5. +16 −19 truffle/src/main/java/org/jruby/truffle/core/basicobject/BasicObjectNodes.java
  6. +0 −2 truffle/src/main/java/org/jruby/truffle/core/binding/BindingNodes.java
  7. +6 −11 truffle/src/main/java/org/jruby/truffle/core/binding/TruffleBindingNodes.java
  8. +0 −5 truffle/src/main/java/org/jruby/truffle/core/encoding/EncodingNodes.java
  9. +1 −2 truffle/src/main/java/org/jruby/truffle/core/encoding/EncodingOperations.java
  10. +20 −33 truffle/src/main/java/org/jruby/truffle/core/fiber/FiberNodes.java
  11. +1 −8 truffle/src/main/java/org/jruby/truffle/core/hash/BucketsStrategy.java
  12. +1 −8 truffle/src/main/java/org/jruby/truffle/core/hash/HashOperations.java
  13. +10 −23 truffle/src/main/java/org/jruby/truffle/core/kernel/KernelNodes.java
  14. +3 −19 truffle/src/main/java/org/jruby/truffle/core/kernel/TraceManager.java
  15. +0 −1 truffle/src/main/java/org/jruby/truffle/core/method/MethodNodes.java
  16. +7 −20 truffle/src/main/java/org/jruby/truffle/core/module/ModuleFields.java
  17. +10 −21 truffle/src/main/java/org/jruby/truffle/core/module/ModuleOperations.java
  18. +2 −12 truffle/src/main/java/org/jruby/truffle/core/objectspace/ObjectSpaceManager.java
  19. +1 −6 truffle/src/main/java/org/jruby/truffle/core/proc/ProcSignalHandler.java
  20. +14 −22 truffle/src/main/java/org/jruby/truffle/core/queue/QueueNodes.java
  21. +1 −6 truffle/src/main/java/org/jruby/truffle/core/queue/SizedQueueNodes.java
  22. +1 −6 truffle/src/main/java/org/jruby/truffle/core/regexp/RegexpNodes.java
  23. +4 −10 truffle/src/main/java/org/jruby/truffle/core/rope/RopeOperations.java
  24. +7 −17 truffle/src/main/java/org/jruby/truffle/core/rubinius/IOPrimitiveNodes.java
  25. +0 −2 truffle/src/main/java/org/jruby/truffle/core/string/StringGuards.java
  26. +5 −20 truffle/src/main/java/org/jruby/truffle/core/thread/ThreadManager.java
  27. +16 −36 truffle/src/main/java/org/jruby/truffle/core/thread/ThreadNodes.java
  28. +1 −6 truffle/src/main/java/org/jruby/truffle/core/tracepoint/TracePointNodes.java
  29. +1 −7 truffle/src/main/java/org/jruby/truffle/extra/AttachmentsManager.java
  30. +0 −5 truffle/src/main/java/org/jruby/truffle/extra/TrufflePosixNodes.java
  31. +0 −1 truffle/src/main/java/org/jruby/truffle/interop/JRubyInterop.java
  32. +10 −15 truffle/src/main/java/org/jruby/truffle/language/CallStackManager.java
  33. +1 −1 truffle/src/main/java/org/jruby/truffle/language/Options.java
  34. +9 −18 truffle/src/main/java/org/jruby/truffle/language/SafepointManager.java
  35. +6 −12 truffle/src/main/java/org/jruby/truffle/language/TruffleBootNodes.java
  36. +0 −1 truffle/src/main/java/org/jruby/truffle/language/constants/LookupConstantWithLexicalScopeNode.java
  37. +26 −29 truffle/src/main/java/org/jruby/truffle/language/dispatch/UnresolvedDispatchNode.java
  38. +0 −1 truffle/src/main/java/org/jruby/truffle/language/objects/LookupForExistingModuleNode.java
  39. +23 −34 truffle/src/main/java/org/jruby/truffle/language/objects/ObjectGraph.java
  40. +0 −1 truffle/src/main/java/org/jruby/truffle/parser/MethodTranslator.java
  41. +2 −5 truffle/src/main/java/org/jruby/truffle/platform/signal/SignalManager.java
  42. +1 −6 truffle/src/main/java/org/jruby/truffle/platform/sunmisc/SunMiscSignalManager.java
  43. +2 −9 truffle/src/main/java/org/jruby/truffle/stdlib/CoverageManager.java
  44. +1 −8 truffle/src/main/java/org/jruby/truffle/stdlib/digest/DigestNodes.java
  45. +17 −29 truffle/src/main/java/org/jruby/truffle/tools/InstrumentationServerManager.java
9 changes: 3 additions & 6 deletions truffle/src/main/java/org/jruby/truffle/cext/CExtNodes.java
Original file line number Diff line number Diff line change
@@ -307,12 +307,9 @@ public abstract static class GetBlockNode extends CoreMethodArrayArgumentsNode {
@TruffleBoundary
@Specialization
public DynamicObject getBlock() {
return Truffle.getRuntime().iterateFrames(new FrameInstanceVisitor<DynamicObject>() {
@Override
public DynamicObject visitFrame(FrameInstance frameInstance) {
Frame frame = frameInstance.getFrame(FrameAccess.READ_ONLY, true);
return RubyArguments.tryGetBlock(frame);
}
return Truffle.getRuntime().iterateFrames(frameInstance -> {
Frame frame = frameInstance.getFrame(FrameAccess.READ_ONLY, true);
return RubyArguments.tryGetBlock(frame);
});
}

Original file line number Diff line number Diff line change
@@ -34,7 +34,7 @@
import org.jruby.truffle.RubyContext;
import org.jruby.truffle.builtins.CoreMethodNodeManager;
import org.jruby.truffle.builtins.PrimitiveManager;
import org.jruby.truffle.core.array.ArrayNodes;
import org.jruby.truffle.cext.CExtNodesFactory;
import org.jruby.truffle.core.array.ArrayNodesFactory;
import org.jruby.truffle.core.array.TruffleArrayNodesFactory;
import org.jruby.truffle.core.basicobject.BasicObjectNodesFactory;
@@ -100,7 +100,6 @@
import org.jruby.truffle.extra.ffi.PointerPrimitiveNodesFactory;
import org.jruby.truffle.gem.bcrypt.BCryptNodesFactory;
import org.jruby.truffle.interop.InteropNodesFactory;
import org.jruby.truffle.cext.CExtNodesFactory;
import org.jruby.truffle.language.RubyGuards;
import org.jruby.truffle.language.RubyNode;
import org.jruby.truffle.language.RubyRootNode;
@@ -131,7 +130,6 @@
import org.jruby.truffle.stdlib.psych.PsychEmitterNodesFactory;
import org.jruby.truffle.stdlib.psych.PsychParserNodesFactory;
import org.jruby.truffle.stdlib.psych.YAMLEncoding;
import org.jruby.truffle.util.StringUtils;
import org.jruby.util.cli.OutputStrings;

import java.io.File;
Original file line number Diff line number Diff line change
@@ -39,10 +39,7 @@

import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.CreateCast;
import com.oracle.truffle.api.dsl.Fallback;
import com.oracle.truffle.api.dsl.NodeChild;
import com.oracle.truffle.api.dsl.NodeChildren;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.object.DynamicObject;
@@ -59,15 +56,12 @@
import org.jruby.truffle.builtins.PrimitiveArrayArgumentsNode;
import org.jruby.truffle.core.basicobject.BasicObjectNodes.ReferenceEqualNode;
import org.jruby.truffle.core.cast.NameToJavaStringNode;
import org.jruby.truffle.core.cast.NameToSymbolOrStringNodeGen;
import org.jruby.truffle.core.kernel.KernelNodes;
import org.jruby.truffle.core.kernel.KernelNodesFactory;
import org.jruby.truffle.core.module.ModuleOperations;
import org.jruby.truffle.core.proc.ProcSignalHandler;
import org.jruby.truffle.core.string.StringOperations;
import org.jruby.truffle.core.thread.ThreadManager;
import org.jruby.truffle.language.RubyGuards;
import org.jruby.truffle.language.RubyNode;
import org.jruby.truffle.language.control.ExitException;
import org.jruby.truffle.language.control.RaiseException;
import org.jruby.truffle.language.control.ThrowException;
@@ -543,12 +537,7 @@ public Object waitPID(int input_pid, boolean no_hang) {
final int finalOptions = options;

// retry:
pid = getContext().getThreadManager().runUntilResult(this, new ThreadManager.BlockingAction<Integer>() {
@Override
public Integer block() throws InterruptedException {
return posix().waitpid(input_pid, statusReference, finalOptions);
}
});
pid = getContext().getThreadManager().runUntilResult(this, () -> posix().waitpid(input_pid, statusReference, finalOptions));

final int errno = posix().errno();

Original file line number Diff line number Diff line change
@@ -12,15 +12,12 @@
import com.oracle.truffle.api.CallTarget;
import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.Truffle;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.CreateCast;
import com.oracle.truffle.api.dsl.ImportStatic;
import com.oracle.truffle.api.dsl.NodeChild;
import com.oracle.truffle.api.dsl.NodeChildren;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.frame.FrameDescriptor;
import com.oracle.truffle.api.frame.FrameSlot;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.DirectCallNode;
import com.oracle.truffle.api.nodes.ExplodeLoop;
@@ -53,7 +50,6 @@
import org.jruby.truffle.core.kernel.KernelNodesFactory;
import org.jruby.truffle.core.numeric.FixnumLowerNodeGen;
import org.jruby.truffle.core.proc.ProcOperations;
import org.jruby.truffle.core.proc.ProcType;
import org.jruby.truffle.core.rope.Rope;
import org.jruby.truffle.core.rope.RopeNodes;
import org.jruby.truffle.core.rope.RopeNodesFactory;
@@ -62,29 +58,19 @@
import org.jruby.truffle.language.NotProvided;
import org.jruby.truffle.language.RubyGuards;
import org.jruby.truffle.language.RubyNode;
import org.jruby.truffle.language.RubyRootNode;
import org.jruby.truffle.language.SnippetNode;
import org.jruby.truffle.language.arguments.MissingArgumentBehavior;
import org.jruby.truffle.language.arguments.ProfileArgumentNode;
import org.jruby.truffle.language.arguments.ReadPreArgumentNode;
import org.jruby.truffle.language.arguments.RubyArguments;
import org.jruby.truffle.language.control.RaiseException;
import org.jruby.truffle.language.dispatch.CallDispatchHeadNode;
import org.jruby.truffle.language.dispatch.DispatchHeadNodeFactory;
import org.jruby.truffle.language.dispatch.MissingBehavior;
import org.jruby.truffle.language.locals.LocalVariableType;
import org.jruby.truffle.language.locals.ReadDeclarationVariableNode;
import org.jruby.truffle.language.methods.Arity;
import org.jruby.truffle.language.methods.DeclarationContext;
import org.jruby.truffle.language.methods.InternalMethod;
import org.jruby.truffle.language.methods.SharedMethodInfo;
import org.jruby.truffle.language.objects.AllocateObjectNode;
import org.jruby.truffle.language.objects.IsFrozenNode;
import org.jruby.truffle.language.objects.IsFrozenNodeGen;
import org.jruby.truffle.language.objects.TaintNode;
import org.jruby.truffle.language.objects.TaintNodeGen;
import org.jruby.truffle.language.yield.YieldNode;
import org.jruby.util.Memo;

import java.util.Arrays;
import java.util.Comparator;
@@ -1932,12 +1918,7 @@ public Object sortObjectWithBlock(DynamicObject array, DynamicObject block) {

@TruffleBoundary
private void doSort(Object[] copy, int size, DynamicObject block) {
Arrays.sort(copy, 0, size, new Comparator<Object>() {
@Override
public int compare(Object a, Object b) {
return castSortValue(ProcOperations.rootCall(block, a, b));
}
});
Arrays.sort(copy, 0, size, (a, b) -> castSortValue(ProcOperations.rootCall(block, a, b)));
}

@Specialization(guards = { "!isNullArray(array)", "!isObjectArray(array)" })
Original file line number Diff line number Diff line change
@@ -339,26 +339,23 @@ private DynamicObject buildMethodMissingException(Object self, DynamicObject nam
}

private FrameInstance getRelevantCallerFrame() {
return Truffle.getRuntime().iterateFrames(new FrameInstanceVisitor<FrameInstance>() {
@Override
public FrameInstance visitFrame(FrameInstance frameInstance) {
final Node callNode = frameInstance.getCallNode();
if (callNode == null) {
// skip current frame
return null;
}

final SuperCallNode superCallNode = NodeUtil.findParent(callNode, SuperCallNode.class);
final Frame frame = frameInstance.getFrame(FrameInstance.FrameAccess.READ_ONLY, true);
final String superMethodName = RubyArguments.getMethod(frame).getName();

if (superCallNode != null && superMethodName.equals("method_missing")) {
// skip super calls of method_missing itself
return null;
}

return frameInstance;
return Truffle.getRuntime().iterateFrames(frameInstance -> {
final Node callNode = frameInstance.getCallNode();
if (callNode == null) {
// skip current frame
return null;
}

final SuperCallNode superCallNode = NodeUtil.findParent(callNode, SuperCallNode.class);
final Frame frame = frameInstance.getFrame(FrameInstance.FrameAccess.READ_ONLY, true);
final String superMethodName = RubyArguments.getMethod(frame).getName();

if (superCallNode != null && superMethodName.equals("method_missing")) {
// skip super calls of method_missing itself
return null;
}

return frameInstance;
});
}

Original file line number Diff line number Diff line change
@@ -44,9 +44,7 @@
import org.jruby.truffle.language.threadlocal.ThreadLocalObject;
import org.jruby.truffle.parser.Translator;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

@CoreClass("Binding")
Original file line number Diff line number Diff line change
@@ -37,18 +37,13 @@ public DynamicObject ofCaller() {

final Memo<Integer> frameCount = new Memo<>(0);

final MaterializedFrame frame = Truffle.getRuntime().iterateFrames(new FrameInstanceVisitor<MaterializedFrame>() {

@Override
public MaterializedFrame visitFrame(FrameInstance frameInstance) {
if (frameCount.get() == 2) {
return frameInstance.getFrame(FrameInstance.FrameAccess.READ_WRITE, false).materialize();
} else {
frameCount.set(frameCount.get() + 1);
return null;
}
final MaterializedFrame frame = Truffle.getRuntime().iterateFrames(frameInstance -> {
if (frameCount.get() == 2) {
return frameInstance.getFrame(FrameInstance.FrameAccess.READ_WRITE, false).materialize();
} else {
frameCount.set(frameCount.get() + 1);
return null;
}

});

if (frame == null) {
Original file line number Diff line number Diff line change
@@ -44,18 +44,13 @@
import org.jruby.truffle.core.cast.ToStrNodeGen;
import org.jruby.truffle.core.rope.CodeRange;
import org.jruby.truffle.core.rope.Rope;
import org.jruby.truffle.core.rope.RopeOperations;
import org.jruby.truffle.core.string.StringOperations;
import org.jruby.truffle.language.RubyGuards;
import org.jruby.truffle.language.RubyNode;
import org.jruby.truffle.language.SnippetNode;
import org.jruby.truffle.language.control.RaiseException;
import org.jruby.util.ByteList;

import java.util.Collection;
import java.util.List;
import java.util.Locale;

@CoreClass("Encoding")
public abstract class EncodingNodes {

Original file line number Diff line number Diff line change
@@ -12,11 +12,10 @@
*/
package org.jruby.truffle.core.encoding;

import com.oracle.truffle.api.object.DynamicObject;
import org.jcodings.Encoding;
import org.jruby.truffle.Layouts;

import com.oracle.truffle.api.object.DynamicObject;

public abstract class EncodingOperations {

public static Encoding getEncoding(DynamicObject rubyEncoding) {
53 changes: 20 additions & 33 deletions truffle/src/main/java/org/jruby/truffle/core/fiber/FiberNodes.java
Original file line number Diff line number Diff line change
@@ -69,12 +69,7 @@ private static DynamicObject createFiber(RubyContext context, DynamicObject thre

public static void initialize(final RubyContext context, final DynamicObject fiber, final DynamicObject block, final Node currentNode) {
final String name = "Ruby Fiber@" + Layouts.PROC.getSharedMethodInfo(block).getSourceSection().getShortDescription();
final Thread thread = new Thread(new Runnable() {
@Override
public void run() {
handleFiberExceptions(context, fiber, block, currentNode);
}
});
final Thread thread = new Thread(() -> handleFiberExceptions(context, fiber, block, currentNode));
thread.setName(name);
thread.start();

@@ -95,29 +90,26 @@ public Boolean block() throws InterruptedException {
}

private static void handleFiberExceptions(final RubyContext context, final DynamicObject fiber, final DynamicObject block, Node currentNode) {
run(context, fiber, currentNode, new Runnable() {
@Override
public void run() {
run(context, fiber, currentNode, () -> {
try {
final Object[] args = waitForResume(context, fiber);
final Object result;
try {
final Object[] args = waitForResume(context, fiber);
final Object result;
try {
result = ProcOperations.rootCall(block, args);
} finally {
// Make sure that other fibers notice we are dead before they gain control back
Layouts.FIBER.setAlive(fiber, false);
}
resume(fiber, Layouts.FIBER.getLastResumedByFiber(fiber), true, result);
} catch (FiberExitException e) {
assert !Layouts.FIBER.getRootFiber(fiber);
// Naturally exit the Java thread on catching this
} catch (BreakException e) {
addToMessageQueue(Layouts.FIBER.getLastResumedByFiber(fiber), new FiberExceptionMessage(context.getCoreExceptions().breakFromProcClosure(null)));
} catch (ReturnException e) {
addToMessageQueue(Layouts.FIBER.getLastResumedByFiber(fiber), new FiberExceptionMessage(context.getCoreExceptions().unexpectedReturn(null)));
} catch (RaiseException e) {
addToMessageQueue(Layouts.FIBER.getLastResumedByFiber(fiber), new FiberExceptionMessage(e.getException()));
result = ProcOperations.rootCall(block, args);
} finally {
// Make sure that other fibers notice we are dead before they gain control back
Layouts.FIBER.setAlive(fiber, false);
}
resume(fiber, Layouts.FIBER.getLastResumedByFiber(fiber), true, result);
} catch (FiberExitException e) {
assert !Layouts.FIBER.getRootFiber(fiber);
// Naturally exit the Java thread on catching this
} catch (BreakException e) {
addToMessageQueue(Layouts.FIBER.getLastResumedByFiber(fiber), new FiberExceptionMessage(context.getCoreExceptions().breakFromProcClosure(null)));
} catch (ReturnException e) {
addToMessageQueue(Layouts.FIBER.getLastResumedByFiber(fiber), new FiberExceptionMessage(context.getCoreExceptions().unexpectedReturn(null)));
} catch (RaiseException e) {
addToMessageQueue(Layouts.FIBER.getLastResumedByFiber(fiber), new FiberExceptionMessage(e.getException()));
}
});
}
@@ -163,12 +155,7 @@ private static void addToMessageQueue(DynamicObject fiber, FiberMessage message)
private static Object[] waitForResume(RubyContext context, final DynamicObject fiber) {
assert RubyGuards.isRubyFiber(fiber);

final FiberMessage message = context.getThreadManager().runUntilResult(null, new BlockingAction<FiberMessage>() {
@Override
public FiberMessage block() throws InterruptedException {
return Layouts.FIBER.getMessageQueue(fiber).take();
}
});
final FiberMessage message = context.getThreadManager().runUntilResult(null, () -> Layouts.FIBER.getMessageQueue(fiber).take());

Layouts.THREAD.getFiberManager(Layouts.FIBER.getRubyThread(fiber)).setCurrentFiber(fiber);

Original file line number Diff line number Diff line change
@@ -234,14 +234,7 @@ public void remove() {
}

public static Iterable<KeyValue> iterableKeyValues(final Entry firstInSequence) {
return new Iterable<KeyValue>() {

@Override
public Iterator<KeyValue> iterator() {
return iterateKeyValues(firstInSequence);
}

};
return () -> iterateKeyValues(firstInSequence);
}

public static void copyInto(RubyContext context, DynamicObject from, DynamicObject to) {
Original file line number Diff line number Diff line change
@@ -122,14 +122,7 @@ public static Iterator<KeyValue> iterateKeyValues(DynamicObject hash) {
public static BoundaryIterable<KeyValue> iterableKeyValues(final DynamicObject hash) {
assert RubyGuards.isRubyHash(hash);

return BoundaryIterable.wrap(new Iterable<KeyValue>() {

@Override
public Iterator<KeyValue> iterator() {
return iterateKeyValues(hash);
}

});
return BoundaryIterable.wrap(() -> iterateKeyValues(hash));
}

}
Loading