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

Commits on Jan 12, 2015

  1. Copy the full SHA
    12abf73 View commit details
  2. Copy the full SHA
    252fda5 View commit details
38 changes: 19 additions & 19 deletions core/src/main/java/org/jruby/truffle/nodes/core/BignumNodes.java
Original file line number Diff line number Diff line change
@@ -265,22 +265,22 @@ public LessNode(LessNode prev) {

@Specialization
public boolean less(RubyBignum a, int b) {
return a.compareTo(b) < 0;
return a.compare(b) < 0;
}

@Specialization
public boolean less(RubyBignum a, long b) {
return a.compareTo(b) < 0;
return a.compare(b) < 0;
}

@Specialization
public boolean less(RubyBignum a, double b) {
return a.compareTo(b) < 0;
return a.compare(b) < 0;
}

@Specialization
public boolean less(RubyBignum a, RubyBignum b) {
return a.compareTo(b) < 0;
return a.compare(b) < 0;
}
}

@@ -297,22 +297,22 @@ public LessEqualNode(LessEqualNode prev) {

@Specialization
public boolean lessEqual(RubyBignum a, int b) {
return a.compareTo(b) <= 0;
return a.compare(b) <= 0;
}

@Specialization
public boolean lessEqual(RubyBignum a, long b) {
return a.compareTo(b) <= 0;
return a.compare(b) <= 0;
}

@Specialization
public boolean lessEqual(RubyBignum a, double b) {
return a.compareTo(b) <= 0;
return a.compare(b) <= 0;
}

@Specialization
public boolean lessEqual(RubyBignum a, RubyBignum b) {
return a.compareTo(b) <= 0;
return a.compare(b) <= 0;
}
}

@@ -361,12 +361,12 @@ public CompareNode(CompareNode prev) {

@Specialization
public int compare(RubyBignum a, int b) {
return a.compareTo(b);
return a.compare(b);
}

@Specialization
public int compare(RubyBignum a, long b) {
return a.compareTo(b);
return a.compare(b);
}

@Specialization
@@ -376,7 +376,7 @@ public int compare(RubyBignum a, double b) {

@Specialization
public int compare(RubyBignum a, RubyBignum b) {
return a.compareTo(b);
return a.compare(b);
}
}

@@ -393,22 +393,22 @@ public GreaterEqualNode(GreaterEqualNode prev) {

@Specialization
public boolean greaterEqual(RubyBignum a, int b) {
return a.compareTo(b) >= 0;
return a.compare(b) >= 0;
}

@Specialization
public boolean greaterEqual(RubyBignum a, long b) {
return a.compareTo(b) >= 0;
return a.compare(b) >= 0;
}

@Specialization
public boolean greaterEqual(RubyBignum a, double b) {
return a.compareTo(b) >= 0;
return a.compare(b) >= 0;
}

@Specialization
public boolean greaterEqual(RubyBignum a, RubyBignum b) {
return a.compareTo(b) >= 0;
return a.compare(b) >= 0;
}
}

@@ -425,22 +425,22 @@ public GreaterNode(GreaterNode prev) {

@Specialization
public boolean greater(RubyBignum a, int b) {
return a.compareTo(b) > 0;
return a.compare(b) > 0;
}

@Specialization
public boolean greater(RubyBignum a, long b) {
return a.compareTo(b) > 0;
return a.compare(b) > 0;
}

@Specialization
public boolean greater(RubyBignum a, double b) {
return a.compareTo(b) > 0;
return a.compare(b) > 0;
}

@Specialization
public boolean greater(RubyBignum a, RubyBignum b) {
return a.compareTo(b) > 0;
return a.compare(b) > 0;
}
}

13 changes: 11 additions & 2 deletions core/src/main/java/org/jruby/truffle/nodes/core/DirNodes.java
Original file line number Diff line number Diff line change
@@ -79,7 +79,11 @@ public int delete(RubyString path) {
if (!dir.isDirectory()) {
throw new UnsupportedOperationException(path.toString());
}
dir.delete();

if (!dir.delete()) {
// TODO(CS, 12-Jan-15) handle failure
throw new UnsupportedOperationException();
}

return 0;
}
@@ -193,7 +197,12 @@ public MkdirNode(MkdirNode prev) {
@Specialization
public int mkdir(RubyString path) {
notDesignedForCompilation();
new File(path.toString()).mkdir();

if (!new File(path.toString()).mkdir()) {
// TODO(CS, 12-Jan-15) handle failure
throw new UnsupportedOperationException();
}

return 0;
}

Original file line number Diff line number Diff line change
@@ -25,6 +25,7 @@

@CoreClass(name = "File")
public abstract class FileNodes {

@CoreMethod(names = "absolute_path", onSingleton = true, required = 1)
public abstract static class AbsolutePathNode extends CoreMethodNode {

@@ -81,7 +82,10 @@ public DeleteNode(DeleteNode prev) {
public int delete(RubyString file) {
notDesignedForCompilation();

new File(file.toString()).delete();
if (!new File(file.toString()).delete()) {
// TODO(CS, 12-Jan-15) handle failure
throw new UnsupportedOperationException();
}

return 1;
}
24 changes: 11 additions & 13 deletions core/src/main/java/org/jruby/truffle/nodes/core/FixnumNodes.java
Original file line number Diff line number Diff line change
@@ -11,15 +11,13 @@

import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.ExactMath;
import com.oracle.truffle.api.Truffle;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.UnexpectedResultException;
import com.oracle.truffle.api.source.SourceSection;
import com.oracle.truffle.api.utilities.BranchProfile;
import com.oracle.truffle.api.utilities.ConditionProfile;
import org.jruby.truffle.nodes.dispatch.CallDispatchHeadNode;
import org.jruby.truffle.nodes.dispatch.DispatchHeadNode;
import org.jruby.truffle.nodes.dispatch.DispatchHeadNodeFactory;
import org.jruby.truffle.nodes.methods.UnsupportedOperationBehavior;
import org.jruby.truffle.runtime.RubyContext;
@@ -681,7 +679,7 @@ public double mod(int a, double b) {
@Specialization
public double mod(long a, double b) {
if (b == 0) {
return (double) (0 / 0);
throw new ArithmeticException("divide by zero");
}

double mod = a % b;
@@ -819,7 +817,7 @@ public boolean less(int a, double b) {

@Specialization
public boolean less(int a, RubyBignum b) {
return bignum(a).compareTo(b) < 0;
return bignum(a).compare(b) < 0;
}

@Specialization
@@ -839,7 +837,7 @@ public boolean less(long a, double b) {

@Specialization
public boolean less(long a, RubyBignum b) {
return bignum(a).compareTo(b) < 0;
return bignum(a).compare(b) < 0;
}
}

@@ -871,7 +869,7 @@ public boolean lessEqual(int a, double b) {

@Specialization
public boolean lessEqual(int a, RubyBignum b) {
return bignum(a).compareTo(b) <= 0;
return bignum(a).compare(b) <= 0;
}

@Specialization
@@ -891,7 +889,7 @@ public boolean lessEqual(long a, double b) {

@Specialization
public boolean lessEqual(long a, RubyBignum b) {
return bignum(a).compareTo(b) <= 0;
return bignum(a).compare(b) <= 0;
}
}

@@ -989,7 +987,7 @@ public int compare(int a, double b) {

@Specialization
public int compare(int a, RubyBignum b) {
return bignum(a).compareTo(b);
return bignum(a).compare(b);
}

@Specialization
@@ -1009,7 +1007,7 @@ public int compare(long a, double b) {

@Specialization
public int compare(long a, RubyBignum b) {
return bignum(a).compareTo(b);
return bignum(a).compare(b);
}

@Specialization(guards = {
@@ -1051,7 +1049,7 @@ public boolean greaterEqual(int a, double b) {

@Specialization
public boolean greaterEqual(int a, RubyBignum b) {
return bignum(a).compareTo(b) >= 0;
return bignum(a).compare(b) >= 0;
}

@Specialization
@@ -1071,7 +1069,7 @@ public boolean greaterEqual(long a, double b) {

@Specialization
public boolean greaterEqual(long a, RubyBignum b) {
return bignum(a).compareTo(b) >= 0;
return bignum(a).compare(b) >= 0;
}
}

@@ -1103,7 +1101,7 @@ public boolean greater(int a, double b) {

@Specialization
public boolean greater(int a, RubyBignum b) {
return bignum(a).compareTo(b) > 0;
return bignum(a).compare(b) > 0;
}

@Specialization
@@ -1123,7 +1121,7 @@ public boolean greater(long a, double b) {

@Specialization
public boolean greater(long a, RubyBignum b) {
return bignum(a).compareTo(b) > 0;
return bignum(a).compare(b) > 0;
}

}
Original file line number Diff line number Diff line change
@@ -37,7 +37,7 @@ public FixnumOrBignumNode(RubyContext context, SourceSection sourceSection) {
private final BranchProfile checkLongProfile = BranchProfile.create();

public Object fixnumOrBignum(RubyBignum value) {
if (value.compareTo(Long.MIN_VALUE) >= 0 && value.compareTo(Long.MAX_VALUE) <= 0) {
if (value.compare(Long.MIN_VALUE) >= 0 && value.compare(Long.MAX_VALUE) <= 0) {
lowerProfile.enter();

final long longValue = value.longValue();
12 changes: 10 additions & 2 deletions core/src/main/java/org/jruby/truffle/nodes/core/FloatNodes.java
Original file line number Diff line number Diff line change
@@ -227,12 +227,15 @@ public Object pow(VirtualFrame frame, double a, RubyBasicObject b) {
@CoreMethod(names = {"/", "__slash__"}, required = 1)
public abstract static class DivNode extends CoreMethodNode {

@Child private CallDispatchHeadNode redoCoercedNode;

public DivNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
}

public DivNode(DivNode prev) {
super(prev);
redoCoercedNode = prev.redoCoercedNode;
}

@Specialization
@@ -260,8 +263,13 @@ public double div(double a, RubyBignum b) {
"!isLong(arguments[1])",
"!isDouble(arguments[1])",
"!isRubyBignum(arguments[1])"})
public Object div(double a, Object b) {
return DebugOperations.send(getContext(), a, "redo_coerced", null, getContext().getSymbolTable().getSymbol("/"), b);
public Object div(VirtualFrame frame, double a, Object b) {
if (redoCoercedNode == null) {
CompilerDirectives.transferToInterpreter();
redoCoercedNode = DispatchHeadNodeFactory.createMethodCall(getContext(), true);
}

return redoCoercedNode.call(frame, a, "redo_coerced", null, getContext().getSymbolTable().getSymbol("/"), b);
}

}
Original file line number Diff line number Diff line change
@@ -176,7 +176,7 @@ public Object times(VirtualFrame frame, long n, RubyProc block) {
public Object times(VirtualFrame frame, RubyBignum n, RubyProc block) {
notDesignedForCompilation();

outer: for (RubyBignum i = bignum(0); i.compareTo(n) < 0; i = i.add(1)) {
outer: for (RubyBignum i = bignum(0); i.compare(n) < 0; i = i.add(1)) {
while (true) {
try {
yield(frame, block, i);
Original file line number Diff line number Diff line change
@@ -20,6 +20,8 @@
import org.jruby.truffle.runtime.RubyContext;
import org.jruby.truffle.runtime.core.RubyArray;

import java.util.Arrays;

public abstract class ArrayLiteralNode extends RubyNode {

@Children protected final RubyNode[] values;
@@ -77,7 +79,7 @@ public Object isDefined(VirtualFrame frame) {

// TODO(CS): remove this - shouldn't be fiddling with nodes from the outside
public RubyNode[] getValues() {
return values;
return Arrays.copyOf(values, values.length);
}

public static class EmptyArrayLiteralNode extends ArrayLiteralNode {
Original file line number Diff line number Diff line change
@@ -129,23 +129,23 @@ public RubyBignum mod(RubyBignum other) {
}

@CompilerDirectives.TruffleBoundary
public int compareTo(int other) {
public int compare(int other) {
return value.compareTo(BigInteger.valueOf(other));
}

@CompilerDirectives.TruffleBoundary
public int compareTo(long other) {
public int compare(long other) {
return value.compareTo(BigInteger.valueOf(other));
}

@CompilerDirectives.TruffleBoundary
public int compareTo(RubyBignum other) {
public int compare(RubyBignum other) {
return value.compareTo(other.value);
}

@CompilerDirectives.TruffleBoundary
public int compareTo(double other) {
return compareTo((long) other);
public int compare(double other) {
return compare((long) other);
}

@CompilerDirectives.TruffleBoundary
Loading