Skip to content

Commit 26ef8d2

Browse files
committed
Move primitives from BasicObjectNodes to TypeNodes
1 parent 3e7f128 commit 26ef8d2

File tree

9 files changed

+65
-66
lines changed

9 files changed

+65
-66
lines changed

src/main/java/org/truffleruby/builtins/CoreMethodNodeManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
import org.truffleruby.RubyContext;
1818
import org.truffleruby.RubyLanguage;
1919
import org.truffleruby.core.array.ArrayUtils;
20-
import org.truffleruby.core.basicobject.BasicObjectNodes;
2120
import org.truffleruby.core.cast.TaintResultNode;
2221
import org.truffleruby.core.module.ConstantLookupResult;
2322
import org.truffleruby.core.module.ModuleOperations;
2423
import org.truffleruby.core.numeric.FixnumLowerNodeGen;
2524
import org.truffleruby.core.string.StringUtils;
25+
import org.truffleruby.core.support.TypeNodes;
2626
import org.truffleruby.language.LazyRubyNode;
2727
import org.truffleruby.language.LexicalScope;
2828
import org.truffleruby.language.NotProvided;
@@ -347,7 +347,7 @@ private static RubyNode transformArgument(CoreMethod method, RubyNode argument,
347347
}
348348

349349
if (n == 0 && method.raiseIfFrozenSelf()) {
350-
argument = BasicObjectNodes.CheckFrozenNode.create(argument);
350+
argument = TypeNodes.CheckFrozenNode.create(argument);
351351
}
352352

353353
return argument;

src/main/java/org/truffleruby/builtins/PrimitiveNodeConstructor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111

1212
import org.truffleruby.RubyContext;
1313
import org.truffleruby.core.array.ArrayUtils;
14-
import org.truffleruby.core.basicobject.BasicObjectNodes;
1514
import org.truffleruby.core.numeric.FixnumLowerNodeGen;
15+
import org.truffleruby.core.support.TypeNodes;
1616
import org.truffleruby.language.RubyNode;
1717
import org.truffleruby.language.SourceIndexLength;
1818
import org.truffleruby.parser.Translator;
@@ -47,7 +47,7 @@ public RubyNode createInvokePrimitiveNode(
4747
arguments[n] = FixnumLowerNodeGen.create(arguments[n]);
4848
}
4949
if (ArrayUtils.contains(annotation.raiseIfFrozen(), n)) {
50-
arguments[n] = BasicObjectNodes.CheckFrozenNode.create(arguments[n]);
50+
arguments[n] = TypeNodes.CheckFrozenNode.create(arguments[n]);
5151
}
5252
}
5353

src/main/java/org/truffleruby/cext/CExtNodes.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import org.truffleruby.core.array.ArrayOperationNodes;
3838
import org.truffleruby.core.array.ArrayStrategy;
3939
import org.truffleruby.core.array.ArrayToObjectArrayNode;
40-
import org.truffleruby.core.basicobject.BasicObjectNodes;
4140
import org.truffleruby.core.encoding.EncodingOperations;
4241
import org.truffleruby.core.hash.HashNode;
4342
import org.truffleruby.core.module.MethodLookupResult;
@@ -56,6 +55,7 @@
5655
import org.truffleruby.core.string.StringNodes;
5756
import org.truffleruby.core.string.StringOperations;
5857
import org.truffleruby.core.string.StringSupport;
58+
import org.truffleruby.core.support.TypeNodes;
5959
import org.truffleruby.interop.ToJavaStringNodeGen;
6060
import org.truffleruby.language.LexicalScope;
6161
import org.truffleruby.language.NotProvided;
@@ -641,7 +641,7 @@ public abstract static class CheckFrozenNode extends CoreMethodArrayArgumentsNod
641641

642642
@Specialization
643643
protected boolean rb_check_frozen(Object object,
644-
@Cached BasicObjectNodes.CheckFrozenNode raiseIfFrozenNode) {
644+
@Cached TypeNodes.CheckFrozenNode raiseIfFrozenNode) {
645645
raiseIfFrozenNode.execute(object);
646646
return true;
647647
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.truffleruby.core.Hashing;
2828
import org.truffleruby.core.array.ArrayEachIteratorNode.ArrayElementConsumerNode;
2929
import org.truffleruby.core.array.ArrayNodesFactory.ReplaceNodeFactory;
30-
import org.truffleruby.core.basicobject.BasicObjectNodes;
3130
import org.truffleruby.core.cast.CmpIntNode;
3231
import org.truffleruby.core.cast.ToAryNodeGen;
3332
import org.truffleruby.core.cast.ToIntNode;
@@ -48,6 +47,7 @@
4847
import org.truffleruby.core.string.StringCachingGuards;
4948
import org.truffleruby.core.string.StringNodes;
5049
import org.truffleruby.core.string.StringOperations;
50+
import org.truffleruby.core.support.TypeNodes;
5151
import org.truffleruby.language.NotProvided;
5252
import org.truffleruby.language.RubyGuards;
5353
import org.truffleruby.language.RubyNode;
@@ -433,7 +433,7 @@ protected DynamicObject concat(DynamicObject array, DynamicObject other) {
433433
public abstract static class DeleteNode extends YieldingCoreMethodNode {
434434

435435
@Child private SameOrEqualNode sameOrEqualNode = SameOrEqualNode.create();
436-
@Child private BasicObjectNodes.CheckFrozenNode raiseIfFrozenNode;
436+
@Child private TypeNodes.CheckFrozenNode raiseIfFrozenNode;
437437

438438
@Specialization(
439439
guards = { "strategy.isStorageMutable()", "strategy.matches(array)" },
@@ -524,7 +524,7 @@ protected Object delete(VirtualFrame frame, DynamicObject array, Object value, O
524524
public void checkFrozen(Object object) {
525525
if (raiseIfFrozenNode == null) {
526526
CompilerDirectives.transferToInterpreterAndInvalidate();
527-
raiseIfFrozenNode = insert(BasicObjectNodes.CheckFrozenNode.create());
527+
raiseIfFrozenNode = insert(TypeNodes.CheckFrozenNode.create());
528528
}
529529
raiseIfFrozenNode.execute(object);
530530
}

src/main/java/org/truffleruby/core/basicobject/BasicObjectNodes.java

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
import org.truffleruby.builtins.CoreMethod;
1414
import org.truffleruby.builtins.CoreMethodArrayArgumentsNode;
1515
import org.truffleruby.builtins.CoreModule;
16-
import org.truffleruby.builtins.Primitive;
17-
import org.truffleruby.builtins.PrimitiveNode;
1816
import org.truffleruby.builtins.UnaryCoreMethodNode;
1917
import org.truffleruby.core.basicobject.BasicObjectNodesFactory.InstanceExecNodeFactory;
2018
import org.truffleruby.core.basicobject.BasicObjectNodesFactory.ReferenceEqualNodeFactory;
@@ -24,7 +22,6 @@
2422
import org.truffleruby.core.rope.RopeOperations;
2523
import org.truffleruby.core.string.StringOperations;
2624
import org.truffleruby.language.NotProvided;
27-
import org.truffleruby.language.RubyNode;
2825
import org.truffleruby.language.RubyRootNode;
2926
import org.truffleruby.language.Visibility;
3027
import org.truffleruby.language.arguments.ReadCallerFrameNode;
@@ -39,7 +36,6 @@
3936
import org.truffleruby.language.methods.InternalMethod;
4037
import org.truffleruby.language.methods.UnsupportedOperationBehavior;
4138
import org.truffleruby.language.objects.AllocateObjectNode;
42-
import org.truffleruby.language.objects.IsFrozenNode;
4339
import org.truffleruby.language.objects.ObjectIDOperations;
4440
import org.truffleruby.language.objects.ReadObjectFieldNode;
4541
import org.truffleruby.language.objects.WriteObjectFieldNode;
@@ -52,7 +48,6 @@
5248
import com.oracle.truffle.api.Truffle;
5349
import com.oracle.truffle.api.dsl.Cached;
5450
import com.oracle.truffle.api.dsl.Fallback;
55-
import com.oracle.truffle.api.dsl.NodeChild;
5651
import com.oracle.truffle.api.dsl.Specialization;
5752
import com.oracle.truffle.api.frame.Frame;
5853
import com.oracle.truffle.api.frame.FrameInstance.FrameAccess;
@@ -62,7 +57,6 @@
6257
import com.oracle.truffle.api.nodes.Node;
6358
import com.oracle.truffle.api.nodes.NodeUtil;
6459
import com.oracle.truffle.api.object.DynamicObject;
65-
import com.oracle.truffle.api.profiles.BranchProfile;
6660
import com.oracle.truffle.api.profiles.ConditionProfile;
6761

6862
@CoreModule(value = "BasicObject", isClass = true)
@@ -527,43 +521,4 @@ protected DynamicObject allocate(DynamicObject rubyClass) {
527521

528522
}
529523

530-
@Primitive(name = "check_frozen")
531-
@NodeChild(value = "value", type = RubyNode.class)
532-
public static abstract class CheckFrozenNode extends PrimitiveNode {
533-
534-
public static CheckFrozenNode create() {
535-
return create(null);
536-
}
537-
538-
public static CheckFrozenNode create(RubyNode node) {
539-
return BasicObjectNodesFactory.CheckFrozenNodeFactory.create(node);
540-
}
541-
542-
public abstract void execute(Object object);
543-
544-
@Specialization
545-
protected Object check(Object value,
546-
@Cached IsFrozenNode isFrozenNode,
547-
@Cached BranchProfile errorProfile) {
548-
549-
if (isFrozenNode.execute(value)) {
550-
errorProfile.enter();
551-
throw new RaiseException(getContext(), coreExceptions().frozenError(value, this));
552-
}
553-
554-
return value;
555-
}
556-
}
557-
558-
@Primitive(name = "undefined?")
559-
@NodeChild(value = "value", type = RubyNode.class)
560-
public static abstract class IsUndefinedNode extends PrimitiveNode {
561-
562-
@Specialization
563-
protected boolean isUndefined(Object value) {
564-
return value == NotProvided.INSTANCE;
565-
}
566-
}
567-
568-
569524
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.truffleruby.builtins.UnaryCoreMethodNode;
3333
import org.truffleruby.core.array.ArrayStrategy;
3434
import org.truffleruby.core.array.ArrayUtils;
35-
import org.truffleruby.core.basicobject.BasicObjectNodes;
3635
import org.truffleruby.core.basicobject.BasicObjectNodes.ObjectIDNode;
3736
import org.truffleruby.core.basicobject.BasicObjectNodes.ReferenceEqualNode;
3837
import org.truffleruby.core.basicobject.BasicObjectNodesFactory.ObjectIDNodeFactory;
@@ -68,6 +67,7 @@
6867
import org.truffleruby.core.string.StringCachingGuards;
6968
import org.truffleruby.core.string.StringNodes;
7069
import org.truffleruby.core.string.StringOperations;
70+
import org.truffleruby.core.support.TypeNodes;
7171
import org.truffleruby.core.support.TypeNodes.ObjectInstanceVariablesNode;
7272
import org.truffleruby.core.support.TypeNodesFactory.ObjectInstanceVariablesNodeFactory;
7373
import org.truffleruby.core.symbol.SymbolTable;
@@ -1929,7 +1929,7 @@ protected DynamicObject toS(Object self) {
19291929
@CoreMethod(names = "untaint")
19301930
public abstract static class UntaintNode extends CoreMethodArrayArgumentsNode {
19311931

1932-
@Child private BasicObjectNodes.CheckFrozenNode raiseIfFrozenNode;
1932+
@Child private TypeNodes.CheckFrozenNode raiseIfFrozenNode;
19331933
@Child private IsTaintedNode isTaintedNode = IsTaintedNode.create();
19341934
@Child private WriteObjectFieldNode writeTaintNode = WriteObjectFieldNode.create();
19351935

@@ -1967,7 +1967,7 @@ protected Object taint(DynamicObject object) {
19671967
protected void checkFrozen(Object object) {
19681968
if (raiseIfFrozenNode == null) {
19691969
CompilerDirectives.transferToInterpreterAndInvalidate();
1970-
raiseIfFrozenNode = insert(BasicObjectNodes.CheckFrozenNode.create());
1970+
raiseIfFrozenNode = insert(TypeNodes.CheckFrozenNode.create());
19711971
}
19721972
raiseIfFrozenNode.execute(object);
19731973
}

src/main/java/org/truffleruby/core/module/ModuleNodes.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import org.truffleruby.builtins.Primitive;
3131
import org.truffleruby.builtins.PrimitiveNode;
3232
import org.truffleruby.collections.ConcurrentOperations;
33-
import org.truffleruby.core.basicobject.BasicObjectNodes;
3433
import org.truffleruby.core.cast.BooleanCastWithDefaultNodeGen;
3534
import org.truffleruby.core.cast.NameToJavaStringNode;
3635
import org.truffleruby.core.cast.NameToJavaStringNodeGen;
@@ -53,6 +52,7 @@
5352
import org.truffleruby.core.string.StringNodes;
5453
import org.truffleruby.core.string.StringOperations;
5554
import org.truffleruby.core.string.StringUtils;
55+
import org.truffleruby.core.support.TypeNodes;
5656
import org.truffleruby.core.symbol.SymbolTable;
5757
import org.truffleruby.language.LexicalScope;
5858
import org.truffleruby.language.NotProvided;
@@ -1809,7 +1809,7 @@ public abstract static class RemoveMethodNode extends CoreMethodArrayArgumentsNo
18091809
private final BranchProfile errorProfile = BranchProfile.create();
18101810

18111811
@Child private NameToJavaStringNode nameToJavaStringNode = NameToJavaStringNode.create();
1812-
@Child private BasicObjectNodes.CheckFrozenNode raiseIfFrozenNode = BasicObjectNodes.CheckFrozenNode.create();
1812+
@Child private TypeNodes.CheckFrozenNode raiseIfFrozenNode = TypeNodes.CheckFrozenNode.create();
18131813
@Child private CallDispatchHeadNode methodRemovedNode = CallDispatchHeadNode.createPrivate();
18141814

18151815
@Specialization
@@ -1883,7 +1883,7 @@ protected DynamicObject toS(DynamicObject module) {
18831883
public abstract static class UndefMethodNode extends CoreMethodArrayArgumentsNode {
18841884

18851885
@Child private NameToJavaStringNode nameToJavaStringNode = NameToJavaStringNode.create();
1886-
@Child private BasicObjectNodes.CheckFrozenNode raiseIfFrozenNode = BasicObjectNodes.CheckFrozenNode
1886+
@Child private TypeNodes.CheckFrozenNode raiseIfFrozenNode = TypeNodes.CheckFrozenNode
18871887
.create(ProfileArgumentNodeGen.create(new ReadSelfNode()));
18881888
@Child private CallDispatchHeadNode methodUndefinedNode = CallDispatchHeadNode.createPrivate();
18891889

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

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,23 @@
1515

1616
import org.jcodings.specific.UTF8Encoding;
1717
import org.truffleruby.Layouts;
18-
import org.truffleruby.builtins.CoreModule;
1918
import org.truffleruby.builtins.CoreMethod;
2019
import org.truffleruby.builtins.CoreMethodArrayArgumentsNode;
20+
import org.truffleruby.builtins.CoreModule;
2121
import org.truffleruby.builtins.Primitive;
2222
import org.truffleruby.builtins.PrimitiveArrayArgumentsNode;
23+
import org.truffleruby.builtins.PrimitiveNode;
2324
import org.truffleruby.core.array.ArrayGuards;
2425
import org.truffleruby.core.array.ArrayStrategy;
2526
import org.truffleruby.core.basicobject.BasicObjectNodes.ReferenceEqualNode;
2627
import org.truffleruby.core.kernel.KernelNodes.ToSNode;
2728
import org.truffleruby.core.rope.CodeRange;
2829
import org.truffleruby.core.string.StringNodes;
30+
import org.truffleruby.language.NotProvided;
31+
import org.truffleruby.language.RubyNode;
32+
import org.truffleruby.language.control.RaiseException;
2933
import org.truffleruby.language.objects.IsANode;
34+
import org.truffleruby.language.objects.IsFrozenNode;
3035
import org.truffleruby.language.objects.IsTaintedNode;
3136
import org.truffleruby.language.objects.LogicalClassNode;
3237
import org.truffleruby.language.objects.ObjectIVarGetNode;
@@ -39,11 +44,13 @@
3944
import com.oracle.truffle.api.dsl.Cached;
4045
import com.oracle.truffle.api.dsl.Fallback;
4146
import com.oracle.truffle.api.dsl.ImportStatic;
47+
import com.oracle.truffle.api.dsl.NodeChild;
4248
import com.oracle.truffle.api.dsl.Specialization;
4349
import com.oracle.truffle.api.frame.VirtualFrame;
4450
import com.oracle.truffle.api.object.DynamicObject;
4551
import com.oracle.truffle.api.object.Property;
4652
import com.oracle.truffle.api.object.Shape;
53+
import com.oracle.truffle.api.profiles.BranchProfile;
4754

4855
@CoreModule("Truffle::Type")
4956
public abstract class TypeNodes {
@@ -296,4 +303,41 @@ protected float doubleToFloat(double value) {
296303

297304
}
298305

306+
@Primitive(name = "check_frozen")
307+
@NodeChild(value = "value", type = RubyNode.class)
308+
public static abstract class CheckFrozenNode extends PrimitiveNode {
309+
310+
public static CheckFrozenNode create() {
311+
return create(null);
312+
}
313+
314+
public static CheckFrozenNode create(RubyNode node) {
315+
return TypeNodesFactory.CheckFrozenNodeFactory.create(node);
316+
}
317+
318+
public abstract void execute(Object object);
319+
320+
@Specialization
321+
protected Object check(Object value,
322+
@Cached IsFrozenNode isFrozenNode,
323+
@Cached BranchProfile errorProfile) {
324+
325+
if (isFrozenNode.execute(value)) {
326+
errorProfile.enter();
327+
throw new RaiseException(getContext(), coreExceptions().frozenError(value, this));
328+
}
329+
330+
return value;
331+
}
332+
}
333+
334+
@Primitive(name = "undefined?")
335+
@NodeChild(value = "value", type = RubyNode.class)
336+
public static abstract class IsUndefinedNode extends PrimitiveNode {
337+
338+
@Specialization
339+
protected boolean isUndefined(Object value) {
340+
return value == NotProvided.INSTANCE;
341+
}
342+
}
299343
}

src/main/java/org/truffleruby/parser/BodyTranslator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import org.truffleruby.core.array.ArrayGetTailNodeGen;
3535
import org.truffleruby.core.array.ArrayLiteralNode;
3636
import org.truffleruby.core.array.PrimitiveArrayNodeFactory;
37-
import org.truffleruby.core.basicobject.BasicObjectNodes;
3837
import org.truffleruby.core.cast.HashCastNodeGen;
3938
import org.truffleruby.core.cast.SplatCastNode;
4039
import org.truffleruby.core.cast.SplatCastNodeGen;
@@ -61,6 +60,7 @@
6160
import org.truffleruby.core.rope.RopeConstants;
6261
import org.truffleruby.core.string.InterpolatedStringNode;
6362
import org.truffleruby.core.string.StringOperations;
63+
import org.truffleruby.core.support.TypeNodes;
6464
import org.truffleruby.language.LexicalScope;
6565
import org.truffleruby.language.NotProvided;
6666
import org.truffleruby.language.RubyNode;
@@ -308,7 +308,7 @@ public RubyNode visitAliasNode(AliasParseNode node) {
308308
final RubyNode newNameNode = translateNameNodeToSymbol(node.getNewName());
309309

310310
final RubyNode ret = ModuleNodesFactory.AliasMethodNodeFactory.create(
311-
BasicObjectNodes.CheckFrozenNode.create(new GetDefaultDefineeNode()),
311+
TypeNodes.CheckFrozenNode.create(new GetDefaultDefineeNode()),
312312
newNameNode,
313313
oldNameNode);
314314

@@ -1255,7 +1255,7 @@ public RubyNode visitDefinedNode(DefinedParseNode node) {
12551255
@Override
12561256
public RubyNode visitDefnNode(DefnParseNode node) {
12571257
final SourceIndexLength sourceSection = node.getPosition();
1258-
final RubyNode moduleNode = BasicObjectNodes.CheckFrozenNode.create(new GetDefaultDefineeNode());
1258+
final RubyNode moduleNode = TypeNodes.CheckFrozenNode.create(new GetDefaultDefineeNode());
12591259
final RubyNode ret = translateMethodDefinition(
12601260
sourceSection,
12611261
moduleNode,
@@ -1744,7 +1744,7 @@ public RubyNode visitInstAsgnNode(InstAsgnParseNode node) {
17441744
}
17451745

17461746
RubyNode self = new SelfNode(environment.getFrameDescriptor());
1747-
self = BasicObjectNodes.CheckFrozenNode.create(self);
1747+
self = TypeNodes.CheckFrozenNode.create(self);
17481748
final RubyNode ret = new WriteInstanceVariableNode(name, self, rhs);
17491749
ret.unsafeSetSourceSection(sourceSection);
17501750
return addNewlineIfNeeded(node, ret);
@@ -3114,7 +3114,7 @@ public RubyNode visitUndefNode(UndefParseNode node) {
31143114
final SourceIndexLength sourceSection = node.getPosition();
31153115

31163116
final RubyNode ret = ModuleNodesFactory.UndefMethodNodeFactory.create(new RubyNode[]{
3117-
BasicObjectNodes.CheckFrozenNode.create(new GetDefaultDefineeNode()),
3117+
TypeNodes.CheckFrozenNode.create(new GetDefaultDefineeNode()),
31183118
translateNameNodeToSymbol(node.getName())
31193119
});
31203120

0 commit comments

Comments
 (0)