Skip to content

Commit 77cbdca

Browse files
committed
Refactor CheckFrozenNode so it can be DSL inlinable
1 parent e3204dd commit 77cbdca

File tree

3 files changed

+23
-22
lines changed

3 files changed

+23
-22
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ private static RubyNode transformArgument(CoreMethod method, RubyNode argument,
439439
}
440440

441441
if (n == 0 && method.raiseIfFrozenSelf()) {
442-
argument = TypeNodes.CheckFrozenNode.create(argument);
442+
argument = TypeNodes.TypeCheckFrozenNode.create(argument);
443443
} else if (n == 0 && method.raiseIfNotMutableSelf()) {
444444
argument = TypeNodes.CheckMutableStringNode.create(argument);
445445
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public RubyNode createInvokePrimitiveNode(Source source, SourceIndexLength sourc
5252
arguments[n] = FixnumLowerNodeGen.create(arguments[n]);
5353
}
5454
if (ArrayUtils.contains(annotation.raiseIfFrozen(), n)) {
55-
arguments[n] = TypeNodes.CheckFrozenNode.create(arguments[n]);
55+
arguments[n] = TypeNodes.TypeCheckFrozenNode.create(arguments[n]);
5656
}
5757
if (ArrayUtils.contains(annotation.raiseIfNotMutable(), n)) {
5858
arguments[n] = TypeNodes.CheckMutableStringNode.create(arguments[n]);

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

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import java.util.List;
1414

1515
import com.oracle.truffle.api.dsl.Bind;
16-
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
1716
import com.oracle.truffle.api.dsl.GenerateUncached;
1817
import com.oracle.truffle.api.dsl.NeverDefault;
1918
import com.oracle.truffle.api.nodes.Node;
@@ -22,6 +21,7 @@
2221
import org.truffleruby.annotations.CoreModule;
2322
import org.truffleruby.annotations.Primitive;
2423
import org.truffleruby.builtins.PrimitiveArrayArgumentsNode;
24+
import org.truffleruby.builtins.PrimitiveNode;
2525
import org.truffleruby.core.array.RubyArray;
2626
import org.truffleruby.core.basicobject.ReferenceEqualNode;
2727
import org.truffleruby.core.cast.BooleanCastNode;
@@ -41,7 +41,6 @@
4141
import org.truffleruby.language.RubyDynamicObject;
4242
import org.truffleruby.language.RubyGuards;
4343
import org.truffleruby.language.RubyNode;
44-
import org.truffleruby.language.RubySourceNode;
4544
import org.truffleruby.language.control.RaiseException;
4645
import org.truffleruby.language.dispatch.DispatchNode;
4746
import org.truffleruby.language.objects.FreezeNode;
@@ -445,45 +444,47 @@ protected Object toRubyInteger(Object value,
445444
}
446445
}
447446

448-
@GenerateUncached
449-
@GenerateNodeFactory
450447
@Primitive(name = "check_frozen")
451448
@NodeChild(value = "valueNode", type = RubyNode.class)
452-
public abstract static class CheckFrozenNode extends RubySourceNode {
449+
public abstract static class TypeCheckFrozenNode extends PrimitiveNode {
453450

454451
@NeverDefault
455-
public static CheckFrozenNode create() {
456-
return create(null);
452+
public static TypeCheckFrozenNode create(RubyNode rubyNode) {
453+
return TypeNodesFactory.TypeCheckFrozenNodeFactory.create(rubyNode);
457454
}
458455

459-
public static CheckFrozenNode create(RubyNode node) {
460-
return TypeNodesFactory.CheckFrozenNodeFactory.create(node);
456+
@Specialization
457+
protected Object check(Object value,
458+
@Cached CheckFrozenNode checkFrozenNode) {
459+
checkFrozenNode.execute(value);
460+
461+
return value;
461462
}
463+
}
462464

463-
public abstract void execute(Object object);
465+
@GenerateUncached
466+
public abstract static class CheckFrozenNode extends RubyBaseNode {
467+
468+
@NeverDefault
469+
public static CheckFrozenNode create() {
470+
return TypeNodesFactory.CheckFrozenNodeGen.create();
471+
}
464472

465-
abstract RubyNode getValueNode();
473+
public abstract void execute(Object object);
466474

467475
@Specialization
468-
protected Object check(Object value,
476+
protected void check(Object value,
469477
@Cached IsFrozenNode isFrozenNode,
470478
@Cached InlinedBranchProfile errorProfile) {
471479

472480
if (isFrozenNode.execute(value)) {
473481
errorProfile.enter(this);
474482
throw new RaiseException(getContext(), coreExceptions().frozenError(value, this));
475483
}
476-
477-
return value;
478-
}
479-
480-
@Override
481-
public RubyNode cloneUninitialized() {
482-
return create(getValueNode().cloneUninitialized()).copyFlags(this);
483484
}
484-
485485
}
486486

487+
487488
@Primitive(name = "check_mutable_string")
488489
public abstract static class CheckMutableStringNode extends PrimitiveArrayArgumentsNode {
489490

0 commit comments

Comments
 (0)