|
13 | 13 | import java.util.List;
|
14 | 14 |
|
15 | 15 | import com.oracle.truffle.api.dsl.Bind;
|
16 |
| -import com.oracle.truffle.api.dsl.GenerateNodeFactory; |
17 | 16 | import com.oracle.truffle.api.dsl.GenerateUncached;
|
18 | 17 | import com.oracle.truffle.api.dsl.NeverDefault;
|
19 | 18 | import com.oracle.truffle.api.nodes.Node;
|
|
22 | 21 | import org.truffleruby.annotations.CoreModule;
|
23 | 22 | import org.truffleruby.annotations.Primitive;
|
24 | 23 | import org.truffleruby.builtins.PrimitiveArrayArgumentsNode;
|
| 24 | +import org.truffleruby.builtins.PrimitiveNode; |
25 | 25 | import org.truffleruby.core.array.RubyArray;
|
26 | 26 | import org.truffleruby.core.basicobject.ReferenceEqualNode;
|
27 | 27 | import org.truffleruby.core.cast.BooleanCastNode;
|
|
41 | 41 | import org.truffleruby.language.RubyDynamicObject;
|
42 | 42 | import org.truffleruby.language.RubyGuards;
|
43 | 43 | import org.truffleruby.language.RubyNode;
|
44 |
| -import org.truffleruby.language.RubySourceNode; |
45 | 44 | import org.truffleruby.language.control.RaiseException;
|
46 | 45 | import org.truffleruby.language.dispatch.DispatchNode;
|
47 | 46 | import org.truffleruby.language.objects.FreezeNode;
|
@@ -445,45 +444,47 @@ protected Object toRubyInteger(Object value,
|
445 | 444 | }
|
446 | 445 | }
|
447 | 446 |
|
448 |
| - @GenerateUncached |
449 |
| - @GenerateNodeFactory |
450 | 447 | @Primitive(name = "check_frozen")
|
451 | 448 | @NodeChild(value = "valueNode", type = RubyNode.class)
|
452 |
| - public abstract static class CheckFrozenNode extends RubySourceNode { |
| 449 | + public abstract static class TypeCheckFrozenNode extends PrimitiveNode { |
453 | 450 |
|
454 | 451 | @NeverDefault
|
455 |
| - public static CheckFrozenNode create() { |
456 |
| - return create(null); |
| 452 | + public static TypeCheckFrozenNode create(RubyNode rubyNode) { |
| 453 | + return TypeNodesFactory.TypeCheckFrozenNodeFactory.create(rubyNode); |
457 | 454 | }
|
458 | 455 |
|
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; |
461 | 462 | }
|
| 463 | + } |
462 | 464 |
|
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 | + } |
464 | 472 |
|
465 |
| - abstract RubyNode getValueNode(); |
| 473 | + public abstract void execute(Object object); |
466 | 474 |
|
467 | 475 | @Specialization
|
468 |
| - protected Object check(Object value, |
| 476 | + protected void check(Object value, |
469 | 477 | @Cached IsFrozenNode isFrozenNode,
|
470 | 478 | @Cached InlinedBranchProfile errorProfile) {
|
471 | 479 |
|
472 | 480 | if (isFrozenNode.execute(value)) {
|
473 | 481 | errorProfile.enter(this);
|
474 | 482 | throw new RaiseException(getContext(), coreExceptions().frozenError(value, this));
|
475 | 483 | }
|
476 |
| - |
477 |
| - return value; |
478 |
| - } |
479 |
| - |
480 |
| - @Override |
481 |
| - public RubyNode cloneUninitialized() { |
482 |
| - return create(getValueNode().cloneUninitialized()).copyFlags(this); |
483 | 484 | }
|
484 |
| - |
485 | 485 | }
|
486 | 486 |
|
| 487 | + |
487 | 488 | @Primitive(name = "check_mutable_string")
|
488 | 489 | public abstract static class CheckMutableStringNode extends PrimitiveArrayArgumentsNode {
|
489 | 490 |
|
|
0 commit comments