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

Commits on Oct 31, 2014

  1. Copy the full SHA
    3da3e8b View commit details
  2. [Truffle] Fix BasicObject#!=.

    eregon committed Oct 31, 2014
    Copy the full SHA
    3a7397d View commit details
Showing with 15 additions and 34 deletions.
  1. +9 −2 core/src/main/java/org/jruby/truffle/nodes/core/BasicObjectNodes.java
  2. +6 −32 core/src/main/java/org/jruby/truffle/nodes/core/KernelNodes.java
Original file line number Diff line number Diff line change
@@ -46,17 +46,22 @@ public boolean not() {
@CoreMethod(names = "!=", required = 1)
public abstract static class NotEqualNode extends CoreMethodNode {

@Child protected DispatchHeadNode equalNode;

public NotEqualNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
equalNode = new DispatchHeadNode(context);
}

public NotEqualNode(NotEqualNode prev) {
super(prev);
equalNode = prev.equalNode;
}

@Specialization
public boolean equal(Object a, Object b) {
return a != b;
public boolean equal(VirtualFrame frame, Object a, Object b) {
// TODO(CS): cast
return !(boolean) equalNode.call(frame, a, "==", null, b);
}

}
@@ -92,6 +97,8 @@ public ReferenceEqualNode(ReferenceEqualNode prev) {
super(prev);
}

public abstract boolean executeEqual(VirtualFrame frame, Object a, Object b);

@Specialization public boolean equal(boolean a, boolean b) { return a == b; }
@Specialization public boolean equal(int a, int b) { return a == b; }
@Specialization public boolean equal(long a, long b) { return a == b; }
38 changes: 6 additions & 32 deletions core/src/main/java/org/jruby/truffle/nodes/core/KernelNodes.java
Original file line number Diff line number Diff line change
@@ -489,47 +489,21 @@ public Object dup(VirtualFrame frame, RubyObject self) {
@CoreMethod(names = "eql?", required = 1)
public abstract static class EqlNode extends CoreMethodNode {

@Child protected BasicObjectNodes.ReferenceEqualNode referenceEqualNode;

public EqlNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
referenceEqualNode = BasicObjectNodesFactory.ReferenceEqualNodeFactory.create(context, sourceSection, new RubyNode[]{null, null});
}

public EqlNode(EqlNode prev) {
super(prev);
referenceEqualNode = prev.referenceEqualNode;
}

@Specialization
public boolean equal(@SuppressWarnings("unused") RubyNilClass a, @SuppressWarnings("unused") RubyNilClass b) {
return true;
}

@Specialization
public boolean equal(boolean a, boolean b) {
return a == b;
}

@Specialization
public boolean equal(int a, int b) {
return a == b;
}

@Specialization
public boolean equal(long a, long b) {
return a == b;
}

@Specialization
public boolean equal(double a, double b) {
return a == b;
}

@Specialization
public boolean equal(BigInteger a, BigInteger b) {
return a.compareTo(b) == 0;
}

@Specialization
public boolean equal(RubyBasicObject a, RubyBasicObject b) {
return a == b;
public boolean equal(VirtualFrame frame, Object a, Object b) {
return referenceEqualNode.executeEqual(frame, a, b);
}
}