Skip to content

Commit 37432b6

Browse files
committed
OrNode is converted to DSL node
1 parent d30fd94 commit 37432b6

File tree

2 files changed

+13
-13
lines changed

2 files changed

+13
-13
lines changed

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,32 @@
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.core.cast.BooleanCastNode;
1416
import org.truffleruby.language.RubyContextSourceNode;
1517
import org.truffleruby.language.RubyNode;
1618

1719
import com.oracle.truffle.api.frame.VirtualFrame;
1820

19-
public class OrNode extends RubyContextSourceNode {
21+
public abstract class OrNode extends RubyContextSourceNode {
2022

2123
@Child private RubyNode left;
2224
@Child private RubyNode right;
2325

24-
@Child private BooleanCastNode leftCast = BooleanCastNode.create();
25-
26-
private final CountingConditionProfile conditionProfile = CountingConditionProfile.create();
27-
2826
public OrNode(RubyNode left, RubyNode right) {
2927
this.left = left;
3028
this.right = right;
3129
}
3230

33-
@Override
34-
public Object execute(VirtualFrame frame) {
31+
@Specialization
32+
protected Object doOr(VirtualFrame frame,
33+
@Cached BooleanCastNode leftCast,
34+
@Cached InlinedCountingConditionProfile conditionProfile) {
3535
final Object leftValue = left.execute(frame);
3636

37-
if (conditionProfile.profile(leftCast.execute(leftValue))) {
37+
if (conditionProfile.profile(this, leftCast.execute(leftValue))) {
3838
return leftValue;
3939
} else {
4040
return right.execute(frame);
@@ -43,7 +43,7 @@ public Object execute(VirtualFrame frame) {
4343

4444
@Override
4545
public RubyNode cloneUninitialized() {
46-
var copy = new OrNode(
46+
var copy = OrNodeGen.create(
4747
left.cloneUninitialized(),
4848
right.cloneUninitialized());
4949
return copy.copyFlags(this);

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
import org.truffleruby.language.control.NotNode;
8585
import org.truffleruby.language.control.OnceNode;
8686
import org.truffleruby.language.control.OrLazyValueDefinedNode;
87-
import org.truffleruby.language.control.OrNode;
87+
import org.truffleruby.language.control.OrNodeGen;
8888
import org.truffleruby.language.control.RaiseException;
8989
import org.truffleruby.language.control.RedoNode;
9090
import org.truffleruby.language.control.RetryNode;
@@ -2274,7 +2274,7 @@ public RubyNode visitOpAsgnNode(OpAsgnParseNode node) {
22742274
RubyNode lhs = readMethod.accept(this);
22752275
RubyNode rhs = writeMethod.accept(this);
22762276

2277-
final RubyNode controlNode = isOrOperator ? new OrNode(lhs, rhs) : new AndNode(lhs, rhs);
2277+
final RubyNode controlNode = isOrOperator ? OrNodeGen.create(lhs, rhs) : new AndNode(lhs, rhs);
22782278

22792279
final RubyNode ret = new DefinedWrapperNode(
22802280
language.coreStrings.ASSIGNMENT,
@@ -2494,7 +2494,7 @@ public RubyNode visitOrNode(OrParseNode node) {
24942494
final RubyNode x = translateNodeOrNil(sourceSection, node.getFirstNode());
24952495
final RubyNode y = translateNodeOrNil(sourceSection, node.getSecondNode());
24962496

2497-
final RubyNode ret = new OrNode(x, y);
2497+
final RubyNode ret = OrNodeGen.create(x, y);
24982498
ret.unsafeSetSourceSection(sourceSection);
24992499
return addNewlineIfNeeded(node, ret);
25002500
}

0 commit comments

Comments
 (0)