Skip to content

Commit

Permalink
Use call sites to check builtin here.
Browse files Browse the repository at this point in the history
headius committed May 30, 2018

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent 083a0a2 commit d386338
Showing 2 changed files with 14 additions and 2 deletions.
6 changes: 6 additions & 0 deletions core/src/main/java/org/jruby/runtime/JavaSites.java
Original file line number Diff line number Diff line change
@@ -18,6 +18,7 @@ public class JavaSites {
public final KernelSites Kernel = new KernelSites();
public final ObjectSites Object = new ObjectSites();
public final ArraySites Array = new ArraySites();
public final Array2Sites Array2 = new Array2Sites();
public final StringSites String = new StringSites();
public final HashSites Hash = new HashSites();
public final NumericSites Numeric = new NumericSites();
@@ -122,6 +123,11 @@ public static class ArraySites {
public final CallSite op_lt_sort = new FunctionalCachingCallSite("<");
}

public static class Array2Sites {
public final CachingCallSite op_cmp_fixnum = new FunctionalCachingCallSite("<=>");
public final CachingCallSite op_cmp_string = new FunctionalCachingCallSite("<=>");
}

public static class StringSites {
public final CheckedSites to_str_checked = new CheckedSites("to_str");
public final RespondToCallSite respond_to_cmp = new RespondToCallSite("<=>");
10 changes: 8 additions & 2 deletions core/src/main/java/org/jruby/specialized/RubyArrayTwoObject.java
Original file line number Diff line number Diff line change
@@ -9,6 +9,7 @@
import org.jruby.RubyString;
import org.jruby.javasupport.JavaUtil;
import org.jruby.runtime.Block;
import org.jruby.runtime.JavaSites;
import org.jruby.runtime.ThreadContext;
import org.jruby.runtime.builtin.IRubyObject;
import org.jruby.runtime.invokedynamic.MethodNames;
@@ -263,8 +264,9 @@ protected IRubyObject sortInternal(final ThreadContext context, boolean honorOve
Ruby runtime = context.runtime;

// One check per specialized fast-path to make the check invariant.
final boolean fixnumBypass = !honorOverride || runtime.getFixnum().isMethodBuiltin("<=>");
final boolean stringBypass = !honorOverride || runtime.getString().isMethodBuiltin("<=>");
JavaSites.Array2Sites sites = sites(context);
final boolean fixnumBypass = !honorOverride || sites.op_cmp_fixnum.retrieveCache(runtime.getFixnum()).method.isBuiltin();
final boolean stringBypass = !honorOverride || sites.op_cmp_string.retrieveCache(runtime.getString()).method.isBuiltin();

IRubyObject o1 = car;
IRubyObject o2 = cdr;
@@ -333,4 +335,8 @@ public IRubyObject uniq(ThreadContext context) {
return new RubyArrayTwoObject(this);
}
}

private static final JavaSites.Array2Sites sites(ThreadContext context) {
return context.sites.Array2;
}
}

0 comments on commit d386338

Please sign in to comment.