Skip to content

Commit bd83f61

Browse files
committed
OrLazyValueDefinedNode is converted to DSL node
1 parent 37432b6 commit bd83f61

File tree

2 files changed

+12
-11
lines changed

2 files changed

+12
-11
lines changed

src/main/java/org/truffleruby/language/control/OrLazyValueDefinedNode.java

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

12-
import com.oracle.truffle.api.profiles.CountingConditionProfile;
12+
import com.oracle.truffle.api.dsl.Cached;
13+
import com.oracle.truffle.api.dsl.Specialization;
14+
import com.oracle.truffle.api.profiles.InlinedCountingConditionProfile;
1315
import org.truffleruby.RubyContext;
1416
import org.truffleruby.RubyLanguage;
1517
import org.truffleruby.core.cast.BooleanCastNode;
@@ -25,26 +27,25 @@
2527
* having been executed once (the lazy initialization) it will be compiled expecting it to be used again. We know that
2628
* it's unlikely to be used again, so only compile it in when it's been used more than once, by using a
2729
* {@link RunTwiceBranchProfile}. */
28-
public class OrLazyValueDefinedNode extends RubyContextSourceNode {
30+
public abstract class OrLazyValueDefinedNode extends RubyContextSourceNode {
2931

3032
@Child private RubyNode left;
3133
@Child private RubyNode right;
3234

33-
@Child private BooleanCastNode leftCast = BooleanCastNode.create();
34-
3535
private final RunTwiceBranchProfile rightTwiceProfile = new RunTwiceBranchProfile();
36-
private final CountingConditionProfile countingProfile = CountingConditionProfile.create();
3736

3837
public OrLazyValueDefinedNode(RubyNode left, RubyNode right) {
3938
this.left = left;
4039
this.right = right;
4140
}
4241

43-
@Override
44-
public Object execute(VirtualFrame frame) {
42+
@Specialization
43+
protected Object doOrLazyValueDefined(VirtualFrame frame,
44+
@Cached BooleanCastNode leftCast,
45+
@Cached InlinedCountingConditionProfile countingProfile) {
4546
final Object leftValue = left.execute(frame);
4647

47-
if (countingProfile.profile(leftCast.execute(leftValue))) {
48+
if (countingProfile.profile(this, leftCast.execute(leftValue))) {
4849
return leftValue;
4950
} else {
5051
rightTwiceProfile.enter();
@@ -59,7 +60,7 @@ public Object isDefined(VirtualFrame frame, RubyLanguage language, RubyContext c
5960

6061
@Override
6162
public RubyNode cloneUninitialized() {
62-
var copy = new OrLazyValueDefinedNode(
63+
var copy = OrLazyValueDefinedNodeGen.create(
6364
left.cloneUninitialized(),
6465
right.cloneUninitialized());
6566
return copy.copyFlags(this);

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
import org.truffleruby.language.control.NoMatchingPatternNodeGen;
8484
import org.truffleruby.language.control.NotNode;
8585
import org.truffleruby.language.control.OnceNode;
86-
import org.truffleruby.language.control.OrLazyValueDefinedNode;
86+
import org.truffleruby.language.control.OrLazyValueDefinedNodeGen;
8787
import org.truffleruby.language.control.OrNodeGen;
8888
import org.truffleruby.language.control.RaiseException;
8989
import org.truffleruby.language.control.RedoNode;
@@ -2339,7 +2339,7 @@ private RubyNode translateOpAsgOrNode(ParseNode node, RubyNode lhs, RubyNode rhs
23392339

23402340
final SourceIndexLength sourceSection = node.getPosition();
23412341

2342-
final RubyNode ret = new OrLazyValueDefinedNode(lhs, rhs);
2342+
final RubyNode ret = OrLazyValueDefinedNodeGen.create(lhs, rhs);
23432343
ret.unsafeSetSourceSection(sourceSection);
23442344
return addNewlineIfNeeded(node, ret);
23452345
}

0 commit comments

Comments
 (0)