Skip to content

Commit 7212200

Browse files
committed
[GR-17457] Optimize the uncached DynamicObjectLibrary case for IsFrozenNode
PullRequest: truffleruby/4193
2 parents a467c23 + 073eac3 commit 7212200

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

src/main/java/org/truffleruby/language/objects/IsFrozenNode.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,17 @@ boolean isFrozen(RubyString object) {
3939

4040
@Specialization(guards = { "!isRubyObjectRange(object)", "isNotRubyString(object)" },
4141
limit = "getDynamicObjectCacheLimit()")
42-
boolean isFrozen(RubyDynamicObject object,
42+
boolean isFrozenCached(RubyDynamicObject object,
4343
@CachedLibrary("object") DynamicObjectLibrary objectLibrary) {
4444
return (objectLibrary.getShapeFlags(object) & FROZEN_FLAG) != 0;
4545
}
4646

47+
// Avoid the uncached DynamicObjectLibrary: this is much faster as it does not have any Shape check/library overhead
48+
@Specialization(guards = { "!isRubyObjectRange(object)", "isNotRubyString(object)" }, replaces = "isFrozenCached")
49+
boolean isFrozenUncached(RubyDynamicObject object) {
50+
return (object.getShape().getFlags() & FROZEN_FLAG) != 0;
51+
}
52+
4753
@Specialization
4854
boolean isFrozen(RubyObjectRange object) {
4955
return object.frozen;

0 commit comments

Comments
 (0)