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

Commits on Jun 26, 2015

  1. Copy the full SHA
    810a43a View commit details
  2. [Truffle] Restore efficient Symbol#== for the case of different symbols.

    * Make a Java version since it is significantly simpler than #equal?.
    eregon committed Jun 26, 2015
    Copy the full SHA
    5c625fb View commit details
4 changes: 1 addition & 3 deletions test/truffle/pe/core/symbol_pe.rb
Original file line number Diff line number Diff line change
@@ -8,6 +8,4 @@

example ":foo"
example ":foo == :foo"

# Fails because Comparable#== slow path is too complex
tagged_example ":foo != :bar"
example ":foo != :bar"
Original file line number Diff line number Diff line change
@@ -327,7 +327,7 @@ public boolean equal(RubyBasicObject a, RubyBasicObject b) {
}

@Specialization(guards = "!isRubyBignum(b)")
public Object equal(VirtualFrame frame, RubyBasicObject a, RubyBasicObject b) {
public boolean equal(VirtualFrame frame, RubyBasicObject a, RubyBasicObject b) {
if (booleanCastNode == null) {
CompilerDirectives.transferToInterpreter();
booleanCastNode = insert(BooleanCastNodeGen.create(getContext(), getSourceSection(), null));
Original file line number Diff line number Diff line change
@@ -9,14 +9,7 @@
*/
package org.jruby.truffle.nodes.core;

import com.oracle.truffle.api.CallTarget;
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.Specialization;
import com.oracle.truffle.api.frame.FrameDescriptor;
import com.oracle.truffle.api.object.*;
import com.oracle.truffle.api.source.SourceSection;
import java.util.EnumSet;

import org.jruby.truffle.nodes.RubyGuards;
import org.jruby.truffle.nodes.RubyRootNode;
@@ -34,7 +27,21 @@
import org.jruby.truffle.runtime.object.BasicObjectType;
import org.jruby.util.ByteList;

import java.util.EnumSet;
import com.oracle.truffle.api.CallTarget;
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.Specialization;
import com.oracle.truffle.api.frame.FrameDescriptor;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.object.DynamicObjectFactory;
import com.oracle.truffle.api.object.FinalLocationException;
import com.oracle.truffle.api.object.HiddenKey;
import com.oracle.truffle.api.object.IncompatibleLocationException;
import com.oracle.truffle.api.object.LocationModifier;
import com.oracle.truffle.api.object.Property;
import com.oracle.truffle.api.object.Shape;
import com.oracle.truffle.api.source.SourceSection;

@CoreClass(name = "Symbol")
public abstract class SymbolNodes {
@@ -157,6 +164,25 @@ public RubyBasicObject allSymbols() {

}

@CoreMethod(names = { "==", "eql?" }, required = 1)
public abstract static class EqualNode extends BinaryCoreMethodNode {

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

@Specialization(guards = "isRubySymbol(b)")
public boolean equal(RubyBasicObject a, RubyBasicObject b) {
return a == b;
}

@Specialization(guards = "!isRubySymbol(b)")
public boolean equal(VirtualFrame frame, RubyBasicObject a, Object b) {
return false;
}

}

@CoreMethod(names = "encoding")
public abstract static class EncodingNode extends CoreMethodArrayArgumentsNode {