Skip to content

Commit be33cd4

Browse files
committed
Convert FreezeHashKeyIfNeededNode to DSL inlinable node
1 parent e348bd0 commit be33cd4

File tree

3 files changed

+16
-11
lines changed

3 files changed

+16
-11
lines changed

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

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

1212
import com.oracle.truffle.api.dsl.Cached;
13+
import com.oracle.truffle.api.dsl.GenerateCached;
14+
import com.oracle.truffle.api.dsl.GenerateInline;
1315
import com.oracle.truffle.api.dsl.GenerateUncached;
16+
import com.oracle.truffle.api.nodes.Node;
1417
import org.truffleruby.core.string.RubyString;
1518
import org.truffleruby.core.string.ImmutableRubyString;
1619
import org.truffleruby.language.RubyBaseNode;
@@ -19,35 +22,37 @@
1922
import com.oracle.truffle.api.dsl.Specialization;
2023

2124
@GenerateUncached
25+
@GenerateInline
26+
@GenerateCached(false)
2227
public abstract class FreezeHashKeyIfNeededNode extends RubyBaseNode {
2328

24-
public abstract Object executeFreezeIfNeeded(Object key, boolean compareByIdentity);
29+
public abstract Object executeFreezeIfNeeded(Node node, Object key, boolean compareByIdentity);
2530

2631
@Specialization
27-
Object immutable(ImmutableRubyString string, boolean compareByIdentity) {
32+
static Object immutable(ImmutableRubyString string, boolean compareByIdentity) {
2833
return string;
2934
}
3035

3136
@Specialization(guards = "string.isFrozen()")
32-
Object alreadyFrozen(RubyString string, boolean compareByIdentity) {
37+
static Object alreadyFrozen(RubyString string, boolean compareByIdentity) {
3338
return string;
3439
}
3540

3641
@Specialization(guards = { "!string.isFrozen()", "!compareByIdentity" })
37-
Object dupAndFreeze(RubyString string, boolean compareByIdentity,
38-
@Cached DispatchNode dupNode) {
42+
static Object dupAndFreeze(RubyString string, boolean compareByIdentity,
43+
@Cached(inline = false) DispatchNode dupNode) {
3944
final RubyString copy = (RubyString) dupNode.call(string, "dup");
4045
copy.freeze();
4146
return copy;
4247
}
4348

4449
@Specialization(guards = { "!string.isFrozen()", "compareByIdentity" })
45-
Object compareByIdentity(RubyString string, boolean compareByIdentity) {
50+
static Object compareByIdentity(RubyString string, boolean compareByIdentity) {
4651
return string;
4752
}
4853

4954
@Specialization(guards = "isNotRubyString(value)")
50-
Object passThrough(Object value, boolean compareByIdentity) {
55+
static Object passThrough(Object value, boolean compareByIdentity) {
5156
return value;
5257
}
5358
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ protected boolean set(RubyHash hash, Object key, Object value, boolean byIdentit
246246
@Bind("$node") Node node) {
247247
assert verify(hash);
248248

249-
final Object key2 = freezeHashKeyIfNeeded.executeFreezeIfNeeded(key, byIdentity);
249+
final Object key2 = freezeHashKeyIfNeeded.executeFreezeIfNeeded(node, key, byIdentity);
250250

251251
propagateSharingKey.execute(node, hash, key2);
252252
propagateSharingValue.execute(node, hash, value);

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ static boolean setFirst(Object[] store, RubyHash hash, Object key, Object value,
177177
@Cached @Shared PropagateSharingNode propagateSharingValue,
178178
@Bind("this") Node node) {
179179

180-
final Object key2 = freezeHashKeyIfNeeded.executeFreezeIfNeeded(key, byIdentity);
180+
final Object key2 = freezeHashKeyIfNeeded.executeFreezeIfNeeded(node, key, byIdentity);
181181
propagateSharingKey.execute(node, hash, key2);
182182
propagateSharingValue.execute(node, hash, value);
183183
setHashedKeyValue(store, 0, hashNode.execute(key2, byIdentity), key2, value);
@@ -199,7 +199,7 @@ static boolean set(Object[] store, RubyHash hash, Object key, Object value, bool
199199

200200
assert verify(store, hash);
201201
final int size = hash.size;
202-
final Object key2 = freezeHashKeyIfNeeded.executeFreezeIfNeeded(key, byIdentity);
202+
final Object key2 = freezeHashKeyIfNeeded.executeFreezeIfNeeded(node, key, byIdentity);
203203
final int hashed = hashNode.execute(key2, byIdentity);
204204
propagateSharingKey.execute(node, hash, key2);
205205
propagateSharingValue.execute(node, hash, value);
@@ -499,7 +499,7 @@ Object doHash(VirtualFrame frame,
499499

500500
for (int n = 0; n < keyValues.length / 2; n++) {
501501
Object key = keyValues[n * 2].execute(frame);
502-
key = freezeHashKeyIfNeededNode.executeFreezeIfNeeded(key, false);
502+
key = freezeHashKeyIfNeededNode.executeFreezeIfNeeded(this, key, false);
503503

504504
final int hashed = hash(key);
505505

0 commit comments

Comments
 (0)