Skip to content

Commit 708c15d

Browse files
committed
Move setStoreAndSize() from ArrayHelpers to RubyArray
1 parent 241afc9 commit 708c15d

File tree

7 files changed

+30
-34
lines changed

7 files changed

+30
-34
lines changed

src/main/java/org/truffleruby/core/array/ArrayAppendManyNode.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
package org.truffleruby.core.array;
1111

1212
import static org.truffleruby.core.array.ArrayHelpers.setSize;
13-
import static org.truffleruby.core.array.ArrayHelpers.setStoreAndSize;
1413

1514
import org.truffleruby.core.array.library.ArrayStoreLibrary;
1615
import org.truffleruby.language.RubyBaseNode;
@@ -54,7 +53,7 @@ RubyArray appendManySameType(RubyArray array, RubyArray other,
5453
final int capacity = ArrayUtils.capacity(getLanguage(), length, newSize);
5554
Object newStore = stores.expand(store, capacity);
5655
otherStores.copyContents(otherStore, 0, newStore, oldSize, otherSize);
57-
setStoreAndSize(array, newStore, newSize);
56+
array.setStoreAndSize(newStore, newSize);
5857
} else {
5958
otherStores.copyContents(otherStore, 0, store, oldSize, otherSize);
6059
setSize(array, newSize);
@@ -79,7 +78,7 @@ RubyArray appendManyGeneralize(RubyArray array, RubyArray other,
7978

8079
stores.copyContents(store, 0, newStore, 0, oldSize);
8180
otherStores.copyContents(otherStore, 0, newStore, oldSize, otherSize);
82-
setStoreAndSize(array, newStore, newSize);
81+
array.setStoreAndSize(newStore, newSize);
8382
return array;
8483
}
8584
}

src/main/java/org/truffleruby/core/array/ArrayAppendOneNode.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
package org.truffleruby.core.array;
1111

1212
import static org.truffleruby.core.array.ArrayHelpers.setSize;
13-
import static org.truffleruby.core.array.ArrayHelpers.setStoreAndSize;
1413

1514
import com.oracle.truffle.api.dsl.NeverDefault;
1615
import com.oracle.truffle.api.dsl.ReportPolymorphism;
@@ -61,7 +60,7 @@ RubyArray appendOneSameType(RubyArray array, Object value,
6160
final int capacity = ArrayUtils.capacityForOneMore(getLanguage(), length);
6261
final Object newStore = stores.expand(store, capacity);
6362
stores.write(newStore, oldSize, value);
64-
setStoreAndSize(array, newStore, newSize);
63+
array.setStoreAndSize(newStore, newSize);
6564
} else {
6665
stores.write(store, oldSize, value);
6766
setSize(array, newSize);
@@ -82,7 +81,7 @@ RubyArray appendOneToEmptyArray(RubyArray array, Object value,
8281
final int newCapacity = ArrayUtils.capacityForOneMore(getLanguage(), 0);
8382
final Object newStore = currentStores.allocateForNewValue(currentStore, value, newCapacity);
8483
newStores.write(newStore, 0, value);
85-
setStoreAndSize(array, newStore, 1);
84+
array.setStoreAndSize(newStore, 1);
8685
return array;
8786
}
8887

@@ -106,7 +105,7 @@ RubyArray appendOneGeneralizeNonMutable(RubyArray array, Object value,
106105
final Object newStore = currentStores.allocateForNewValue(currentStore, value, newCapacity);
107106
currentStores.copyContents(currentStore, 0, newStore, 0, oldSize);
108107
newStores.write(newStore, oldSize, value);
109-
setStoreAndSize(array, newStore, newSize);
108+
array.setStoreAndSize(newStore, newSize);
110109
return array;
111110
}
112111

src/main/java/org/truffleruby/core/array/ArrayHelpers.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,6 @@
1616

1717
public abstract class ArrayHelpers {
1818

19-
public static void setStoreAndSize(RubyArray array, Object store, int size) {
20-
assert (store instanceof SharedArrayStorage) == (array.getShape().isShared());
21-
array.setStore(store);
22-
setSize(array, size);
23-
}
24-
2519
/** Sets the size of the given array
2620
*
2721
* Asserts that the size is valid for the current store of the array. If setting both size and store, use

src/main/java/org/truffleruby/core/array/ArrayNodes.java

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
package org.truffleruby.core.array;
1111

1212
import static org.truffleruby.core.array.ArrayHelpers.setSize;
13-
import static org.truffleruby.core.array.ArrayHelpers.setStoreAndSize;
1413
import static org.truffleruby.language.dispatch.DispatchConfiguration.PUBLIC;
1514

1615
import java.util.Arrays;
@@ -473,7 +472,7 @@ public abstract static class ClearNode extends ArrayCoreMethodNode {
473472
@Specialization
474473
RubyArray clear(RubyArray array,
475474
@Cached IsSharedNode isSharedNode) {
476-
setStoreAndSize(array,
475+
array.setStoreAndSize(
477476
ArrayStoreLibrary.initialStorage(isSharedNode.execute(this, array)),
478477
0);
479478
return array;
@@ -571,7 +570,7 @@ Object compactObjects(RubyArray array,
571570

572571
stores.clear(oldStore, m, size - m);
573572

574-
setStoreAndSize(array, newStore, m);
573+
array.setStoreAndSize(newStore, m);
575574

576575
if (m == size) {
577576
return nil;
@@ -738,7 +737,7 @@ private Object delete(RubyArray array, Object value, Object maybeBlock,
738737
if (sameStores) {
739738
oldStores.clear(oldStore, i, size - i);
740739
}
741-
setStoreAndSize(array, newStore, i);
740+
array.setStoreAndSize(newStore, i);
742741
return found;
743742
} else {
744743
if (maybeBlock == nil) {
@@ -780,14 +779,14 @@ static Object doDelete(RubyArray array, Object indexObject,
780779
final Object value = stores.read(store, i);
781780
stores.copyContents(store, i + 1, store, i, size - i - 1);
782781
stores.clear(store, size - 1, 1);
783-
setStoreAndSize(array, store, size - 1);
782+
array.setStoreAndSize(store, size - 1);
784783
return value;
785784
} else {
786785
final Object mutableStore = stores.allocator(store).allocate(size - 1);
787786
stores.copyContents(store, 0, mutableStore, 0, i);
788787
final Object value = stores.read(store, i);
789788
stores.copyContents(store, i + 1, mutableStore, i, size - i - 1);
790-
setStoreAndSize(array, mutableStore, size - 1);
789+
array.setStoreAndSize(mutableStore, size - 1);
791790
return value;
792791
}
793792
}
@@ -1121,7 +1120,7 @@ protected abstract RubyArray executeInitialize(RubyArray array, Object size, Obj
11211120
@Specialization
11221121
RubyArray initializeNoArgs(RubyArray array, NotProvided size, NotProvided fillingValue, Nil block,
11231122
@Cached @Shared IsSharedNode isSharedNode) {
1124-
setStoreAndSize(array,
1123+
array.setStoreAndSize(
11251124
ArrayStoreLibrary.initialStorage(isSharedNode.execute(this, array)),
11261125
0);
11271126
return array;
@@ -1136,7 +1135,7 @@ RubyArray initializeOnlyBlock(RubyArray array, NotProvided size, NotProvided fil
11361135
warningNode.warningMessage(sourceSection, "given block not used");
11371136
}
11381137

1139-
setStoreAndSize(array,
1138+
array.setStoreAndSize(
11401139
ArrayStoreLibrary.initialStorage(isSharedNode.execute(this, array)),
11411140
0);
11421141
return array;
@@ -1174,7 +1173,7 @@ RubyArray initializeWithSizeNoValue(RubyArray array, int size, NotProvided filli
11741173
store = new Object[size];
11751174
}
11761175
stores.fill(store, 0, size, nil);
1177-
setStoreAndSize(array, store, size);
1176+
array.setStoreAndSize(store, size);
11781177
return array;
11791178
}
11801179

@@ -1199,7 +1198,7 @@ RubyArray initializeWithSizeAndValue(RubyArray array, int size, Object fillingVa
11991198
profileAndReportLoopCount(loopProfile, i);
12001199
}
12011200
}
1202-
setStoreAndSize(array, allocatedStore, size);
1201+
array.setStoreAndSize(allocatedStore, size);
12031202
return array;
12041203
}
12051204

@@ -1236,7 +1235,7 @@ static Object initializeBlock(RubyArray array, int size, Object unusedFillingVal
12361235
if (isSharedNode.execute(node, array)) {
12371236
store = stores.makeShared(store, n);
12381237
}
1239-
setStoreAndSize(array, store, n);
1238+
array.setStoreAndSize(store, n);
12401239
}
12411240

12421241
return array;
@@ -1688,7 +1687,7 @@ RubyArray popNotEmptySharedStorage(RubyArray array, int n,
16881687
final Object prefix = stores.extractRange(store, 0, size - numPop); // copy on write
16891688
// NOTE(norswap): if one of these two arrays outlives the other, you get a memory leak
16901689

1691-
setStoreAndSize(array, prefix, size - numPop);
1690+
array.setStoreAndSize(prefix, size - numPop);
16921691
return createArray(popped, numPop);
16931692
}
16941693

@@ -1837,7 +1836,7 @@ RubyArray replace(RubyArray array, Object otherObject,
18371836
if (isSharedNode.execute(this, array)) {
18381837
store = stores.makeShared(store, size);
18391838
}
1840-
setStoreAndSize(array, store, size);
1839+
array.setStoreAndSize(store, size);
18411840
return array;
18421841
}
18431842

@@ -1922,7 +1921,7 @@ RubyArray rotateStorageNotMutable(RubyArray array, int rotation,
19221921

19231922
final Object rotated = stores.allocator(store).allocate(size);
19241923
rotateArrayCopy(rotation, size, stores, store, rotated);
1925-
setStoreAndSize(array, rotated, size);
1924+
array.setStoreAndSize(rotated, size);
19261925
return array;
19271926
}
19281927

@@ -2042,7 +2041,7 @@ Object shiftOther(RubyArray array, NotProvided n,
20422041
final int size = array.size;
20432042
final Object value = stores.read(store, 0);
20442043
stores.clear(store, 0, 1);
2045-
setStoreAndSize(array, stores.extractRange(store, 1, size), size - 1);
2044+
array.setStoreAndSize(stores.extractRange(store, 1, size), size - 1);
20462045
return value;
20472046
}
20482047

@@ -2074,7 +2073,7 @@ Object shiftMany(RubyArray array, int n,
20742073
final int numShift = minProfile.profile(size < n) ? size : n;
20752074
final Object result = stores.extractRangeAndUnshare(store, 0, numShift);
20762075
final Object newStore = stores.extractRange(store, numShift, size);
2077-
setStoreAndSize(array, newStore, size - numShift);
2076+
array.setStoreAndSize(newStore, size - numShift);
20782077
return createArray(result, numShift);
20792078
}
20802079

@@ -2238,8 +2237,8 @@ static RubyArray stealStorage(RubyArray array, RubyArray other,
22382237

22392238
final int size = other.size;
22402239
final Object store = other.getStore();
2241-
setStoreAndSize(array, store, size);
2242-
setStoreAndSize(other, stores.initialStore(store), 0);
2240+
array.setStoreAndSize(store, size);
2241+
other.setStoreAndSize(stores.initialStore(store), 0);
22432242

22442243
return array;
22452244
}

src/main/java/org/truffleruby/core/array/ArrayTruncateNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ void truncateCopy(RubyArray array, int size,
5050

5151
final Object newStore = stores.allocateForNewStore(store, store, size);
5252
stores.copyContents(store, 0, newStore, 0, size);
53-
ArrayHelpers.setStoreAndSize(array, newStore, size);
53+
array.setStoreAndSize(newStore, size);
5454
}
5555

5656
@ReportPolymorphism.Exclude

src/main/java/org/truffleruby/core/array/ArrayWriteNormalizedNode.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
package org.truffleruby.core.array;
1111

1212
import static org.truffleruby.core.array.ArrayHelpers.setSize;
13-
import static org.truffleruby.core.array.ArrayHelpers.setStoreAndSize;
1413

1514
import com.oracle.truffle.api.TruffleSafepoint;
1615
import com.oracle.truffle.api.profiles.LoopConditionProfile;
@@ -98,7 +97,7 @@ Object writeBeyondPrimitive(RubyArray array, int index, Object value,
9897
profileAndReportLoopCount(loopProfile, n - oldSize);
9998
}
10099
newStores.write(objectStore, index, value);
101-
setStoreAndSize(array, objectStore, newSize);
100+
array.setStoreAndSize(objectStore, newSize);
102101
return value;
103102
}
104103

src/main/java/org/truffleruby/core/array/RubyArray.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ public void setStore(Object store) {
5858
this.store = store;
5959
}
6060

61+
public void setStoreAndSize(Object store, int size) {
62+
assert (store instanceof SharedArrayStorage) == (this.getShape().isShared());
63+
this.setStore(store);
64+
ArrayHelpers.setSize(this, size);
65+
}
66+
6167
@TruffleBoundary
6268
public void getAdjacentObjects(Set<Object> reachable) {
6369
ObjectGraph.addProperty(reachable, store);

0 commit comments

Comments
 (0)