Skip to content

Commit 971f0d3

Browse files
committed
Convert FreezeNode to DSL inlinable
1 parent a66adb0 commit 971f0d3

File tree

4 files changed

+28
-18
lines changed

4 files changed

+28
-18
lines changed

src/main/java/org/truffleruby/core/kernel/KernelNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ protected static RubyDynamicObject copyable(Object object, Object freeze,
588588

589589
// Default behavior - is just to copy the frozen state of the original object
590590
if (forceFrozen(freeze) || (copyFrozen && isFrozenNode.execute(object))) { // Profiled through lazy usage of rubyLibraryFreeze
591-
freezeNode.execute(newObject);
591+
freezeNode.execute(node, newObject);
592592
}
593593

594594
return newObject;

src/main/java/org/truffleruby/core/support/TypeNodes.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public abstract static class ObjectFreezeNode extends RubyBaseNode {
120120
@Specialization(guards = "!isRubyDynamicObject(self)")
121121
protected Object freeze(Object self,
122122
@Cached @Exclusive FreezeNode freezeNode) {
123-
freezeNode.execute(self);
123+
freezeNode.execute(this, self);
124124
return self;
125125
}
126126

@@ -129,23 +129,24 @@ protected Object freezeNormalObject(RubyDynamicObject self,
129129
@Cached @Shared FreezeNode freezeNode,
130130
@Cached @Shared MetaClassNode metaClassNode,
131131
@Bind("metaClassNode.execute(this, self)") RubyClass metaClass) {
132-
freezeNode.execute(self);
132+
freezeNode.execute(this, self);
133133
return self;
134134
}
135135

136136
@Specialization(guards = "metaClass.isSingleton", limit = "1")
137-
protected Object freezeSingletonObject(RubyDynamicObject self,
137+
protected static Object freezeSingletonObject(RubyDynamicObject self,
138138
@Cached @Shared FreezeNode freezeNode,
139139
@Cached @Exclusive FreezeNode freezeMetaClasNode,
140140
@Cached IsFrozenNode isFrozenMetaClassNode,
141141
@Cached InlinedConditionProfile singletonClassUnfrozenProfile,
142142
@Cached @Shared MetaClassNode metaClassNode,
143-
@Bind("metaClassNode.execute(this, self)") RubyClass metaClass) {
144-
if (singletonClassUnfrozenProfile.profile(this,
143+
@Bind("metaClassNode.execute(this, self)") RubyClass metaClass,
144+
@Bind("this") Node node) {
145+
if (singletonClassUnfrozenProfile.profile(node,
145146
!RubyGuards.isSingletonClass(self) && !isFrozenMetaClassNode.execute(metaClass))) {
146-
freezeMetaClasNode.execute(metaClass);
147+
freezeMetaClasNode.execute(node, metaClass);
147148
}
148-
freezeNode.execute(self);
149+
freezeNode.execute(node, self);
149150
return self;
150151
}
151152
}

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

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,12 @@
99
*/
1010
package org.truffleruby.language.objects;
1111

12+
import com.oracle.truffle.api.dsl.GenerateCached;
13+
import com.oracle.truffle.api.dsl.GenerateInline;
1214
import com.oracle.truffle.api.dsl.GenerateUncached;
1315
import com.oracle.truffle.api.dsl.Specialization;
1416
import com.oracle.truffle.api.library.CachedLibrary;
17+
import com.oracle.truffle.api.nodes.Node;
1518
import com.oracle.truffle.api.object.DynamicObjectLibrary;
1619
import org.truffleruby.core.range.RubyObjectRange;
1720
import org.truffleruby.core.string.RubyString;
@@ -23,18 +26,24 @@
2326

2427
// Specializations are order by their frequency on railsbench using --engine.SpecializationStatistics
2528
@GenerateUncached
29+
@GenerateInline
30+
@GenerateCached(false)
2631
public abstract class FreezeNode extends RubyBaseNode {
2732

28-
public abstract Object execute(Object object);
33+
public abstract Object execute(Node node, Object object);
34+
35+
public static Object executeUncached(Object object) {
36+
return FreezeNodeGen.getUncached().execute(null, object);
37+
}
2938

3039
@Specialization
31-
protected Object freezeRubyString(RubyString object) {
40+
protected static Object freezeRubyString(RubyString object) {
3241
return object.frozen = true;
3342
}
3443

3544
@Specialization(guards = { "!isRubyObjectRange(object)", "isNotRubyString(object)" },
3645
limit = "getDynamicObjectCacheLimit()")
37-
protected Object freeze(RubyDynamicObject object,
46+
protected static Object freeze(Node node, RubyDynamicObject object,
3847
@CachedLibrary("object") DynamicObjectLibrary objectLibrary) {
3948
if (objectLibrary.isShared(object)) {
4049
synchronized (object) {
@@ -48,32 +57,32 @@ protected Object freeze(RubyDynamicObject object,
4857
}
4958

5059
@Specialization
51-
protected Object freezeRubyObjectRange(RubyObjectRange object) {
60+
protected static Object freezeRubyObjectRange(RubyObjectRange object) {
5261
return object.frozen = true;
5362
}
5463

5564
@Specialization
56-
protected Object freeze(ImmutableRubyObject object) {
65+
protected static Object freeze(ImmutableRubyObject object) {
5766
return object;
5867
}
5968

6069
@Specialization
61-
protected Object freeze(boolean object) {
70+
protected static Object freeze(boolean object) {
6271
return object;
6372
}
6473

6574
@Specialization
66-
protected Object freeze(int object) {
75+
protected static Object freeze(int object) {
6776
return object;
6877
}
6978

7079
@Specialization
71-
protected Object freeze(long object) {
80+
protected static Object freeze(long object) {
7281
return object;
7382
}
7483

7584
@Specialization
76-
protected Object freeze(double object) {
85+
protected static Object freeze(double object) {
7786
return object;
7887
}
7988

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ protected RubyClass getSingletonClassForInstance(RubyContext context, RubyDynami
133133
object);
134134

135135
if (IsFrozenNodeGen.getUncached().execute(object)) {
136-
FreezeNodeGen.getUncached().execute(singletonClass);
136+
FreezeNode.executeUncached(singletonClass);
137137
}
138138

139139
SharedObjects.propagate(context.getLanguageSlow(), object, singletonClass);

0 commit comments

Comments
 (0)