Skip to content

Commit

Permalink
Showing 1 changed file with 8 additions and 14 deletions.
22 changes: 8 additions & 14 deletions truffle/src/main/java/org/jruby/truffle/core/array/ArrayNodes.java
Original file line number Diff line number Diff line change
@@ -855,7 +855,6 @@ public Object eachOther(VirtualFrame frame, DynamicObject array, DynamicObject b
public abstract static class EachWithIndexNode extends YieldingCoreMethodNode {

@Specialization(guards = "isNullArray(array)")

public DynamicObject eachWithIndexNull(DynamicObject array, DynamicObject block) {
return array;
}
@@ -921,34 +920,29 @@ public abstract static class HashNode extends ArrayCoreMethodNode {

@Specialization(guards = "isNullArray(array)")
public long hashNull(DynamicObject array) {
final int arraySize = 0;
long h = Helpers.hashStart(getContext().getJRubyRuntime(), arraySize);
final int size = 0;
long h = Helpers.hashStart(getContext().getJRubyRuntime(), size);
h = Helpers.murmurCombine(h, System.identityHashCode(ArrayNodes.class));
h = Helpers.hashEnd(h);
return h;
return Helpers.hashEnd(h);
}

@Specialization(guards = "strategy.matches(array)", limit = "ARRAY_STRATEGIES")
public long hash(VirtualFrame frame, DynamicObject array,
@Cached("of(array)") ArrayStrategy strategy,
@Cached("createMethodCall()") CallDispatchHeadNode toHashNode) {

final int arraySize = getSize(array);
final int size = getSize(array);
// TODO BJF Jul 4, 2016 Seed could be chosen in advance to avoid branching
long h = Helpers.hashStart(getContext().getJRubyRuntime(), arraySize);
long h = Helpers.hashStart(getContext().getJRubyRuntime(), size);
h = Helpers.murmurCombine(h, System.identityHashCode(ArrayNodes.class));
final ArrayMirror store = strategy.newMirror(array);

int n = 0;

for (; n < arraySize; n++) {
for (int n = 0; n < size; n++) {
final Object value = store.get(n);
final long valueHash = toLong(frame, toHashNode.call(frame, value, "hash", null));
h = Helpers.murmurCombine(h, valueHash);
}

h = Helpers.hashEnd(h);
return h;
return Helpers.hashEnd(h);
}

private long toLong(VirtualFrame frame, Object indexObject) {
@@ -958,7 +952,7 @@ private long toLong(VirtualFrame frame, Object indexObject) {
}
final Object result = toIntNode.executeIntOrLong(frame, indexObject);
if (result instanceof Integer) {
return Long.valueOf((int) result);
return (long) (int) result;
} else {
return (long) result;
}

0 comments on commit 1a51da5

Please sign in to comment.