@@ -67,14 +67,11 @@ public abstract class TypeNodes {
67
67
68
68
@ Primitive (name = "object_kind_of?" )
69
69
public abstract static class ObjectKindOfNode extends PrimitiveArrayArgumentsNode {
70
-
71
- @ Child private IsANode isANode = IsANode .create ();
72
-
73
70
@ Specialization
74
- protected boolean objectKindOf (Object object , RubyModule module ) {
71
+ protected boolean objectKindOf (Object object , RubyModule module ,
72
+ @ Cached IsANode isANode ) {
75
73
return isANode .executeIsA (object , module );
76
74
}
77
-
78
75
}
79
76
80
77
@ Primitive (name = "object_respond_to?" )
@@ -93,36 +90,41 @@ protected boolean objectRespondTo(Object object, Object name, boolean includePri
93
90
94
91
@ CoreMethod (names = "object_class" , onSingleton = true , required = 1 )
95
92
public abstract static class ObjectClassNode extends CoreMethodArrayArgumentsNode {
96
-
97
- @ Child private LogicalClassNode classNode = LogicalClassNode .create ();
98
-
99
93
@ Specialization
100
- protected RubyClass objectClass (Object object ) {
101
- return classNode .execute (object );
94
+ protected RubyClass objectClass (Object object ,
95
+ @ Cached LogicalClassNode logicalClassNode ) {
96
+ return logicalClassNode .execute (object );
102
97
}
103
-
104
98
}
105
99
106
100
@ Primitive (name = "class_of" )
107
101
public abstract static class ClassOfNode extends PrimitiveArrayArgumentsNode {
108
-
109
102
@ Specialization
110
103
protected RubyClass classOf (Object object ,
111
104
@ Cached MetaClassNode metaClassNode ) {
112
105
return metaClassNode .execute (object );
113
106
}
114
-
115
107
}
116
108
117
109
@ Primitive (name = "object_equal" )
118
110
public abstract static class ObjectEqualNode extends PrimitiveArrayArgumentsNode {
119
-
120
111
@ Specialization
121
112
protected boolean objectEqual (Object a , Object b ,
122
113
@ Cached ReferenceEqualNode referenceEqualNode ) {
123
114
return referenceEqualNode .executeReferenceEqual (a , b );
124
115
}
116
+ }
125
117
118
+ @ Primitive (name = "object_freeze" )
119
+ public abstract static class ObjectFreezeNode extends PrimitiveArrayArgumentsNode {
120
+ @ Specialization (limit = "getRubyLibraryCacheLimit()" )
121
+ protected Object freeze (Object self ,
122
+ @ CachedLibrary ("self" ) RubyLibrary rubyLibrary ) {
123
+ assert !(self instanceof RubyDynamicObject && ((RubyDynamicObject ) self )
124
+ .getMetaClass ().isSingleton ) : "Primitive.object_freeze does not handle instances of singleton classes, see KernelFreezeNode" ;
125
+ rubyLibrary .freeze (self );
126
+ return self ;
127
+ }
126
128
}
127
129
128
130
@ Primitive (name = "immediate_value?" )
@@ -167,7 +169,6 @@ protected boolean doFallback(Object value) {
167
169
168
170
@ Primitive (name = "nil?" )
169
171
public abstract static class IsNilNode extends PrimitiveArrayArgumentsNode {
170
-
171
172
@ Specialization
172
173
protected boolean isNil (Object value ) {
173
174
return value == nil ;
0 commit comments