Skip to content

Commit fa79ed9

Browse files
committed
Pass the correct capacity in # of entries when creating a CompactHashStore from a Hash literal
1 parent 9de3739 commit fa79ed9

File tree

3 files changed

+9
-5
lines changed

3 files changed

+9
-5
lines changed

src/main/java/org/truffleruby/core/hash/HashLiteralNode.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ protected HashLiteralNode(RubyNode[] keyValues) {
3030
this.keyValues = keyValues;
3131
}
3232

33+
protected int getNumberOfEntries() {
34+
return keyValues.length >> 1;
35+
}
36+
3337
public static HashLiteralNode create(RubyNode[] keyValues, RubyLanguage language) {
3438
if (keyValues.length == 0) {
3539
return new EmptyHashStore.EmptyHashLiteralNode();

src/main/java/org/truffleruby/core/hash/library/BucketsHashStore.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,7 @@ public static final class BucketHashLiteralNode extends HashLiteralNode {
578578

579579
public BucketHashLiteralNode(RubyNode[] keyValues) {
580580
super(keyValues);
581-
bucketsCount = growthCapacityGreaterThan(keyValues.length / 2);
581+
bucketsCount = growthCapacityGreaterThan(getNumberOfEntries());
582582
}
583583

584584
@ExplodeLoop

src/main/java/org/truffleruby/core/hash/library/CompactHashStore.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -628,18 +628,18 @@ public CompactHashLiteralNode(RubyNode[] keyValues) {
628628
@ExplodeLoop
629629
@Override
630630
public Object execute(VirtualFrame frame) {
631-
CompactHashStore store = new CompactHashStore(keyValues.length);
631+
CompactHashStore store = new CompactHashStore(getNumberOfEntries());
632632
RubyHash hash = new RubyHash(coreLibrary().hashClass,
633633
getLanguage().hashShape,
634634
getContext(),
635635
store,
636636
0,
637637
false);
638+
638639
for (int i = 0; i < keyValues.length; i += 2) {
639640
Object key = keyValues[i].execute(frame);
640-
Object val = keyValues[i + 1].execute(frame);
641-
642-
hashes.set(store, hash, key, val, false);
641+
Object value = keyValues[i + 1].execute(frame);
642+
hashes.set(store, hash, key, value, false);
643643
}
644644
return hash;
645645
}

0 commit comments

Comments
 (0)