Skip to content

Commit 0d7d28f

Browse files
committed
NotNode is converted to DSL node
1 parent bd83f61 commit 0d7d28f

File tree

4 files changed

+18
-19
lines changed

4 files changed

+18
-19
lines changed

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

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

12+
import com.oracle.truffle.api.dsl.Cached;
13+
import com.oracle.truffle.api.dsl.Specialization;
1214
import org.truffleruby.core.cast.BooleanCastNode;
13-
import org.truffleruby.core.cast.BooleanCastNodeGen;
1415
import org.truffleruby.language.RubyContextSourceNode;
1516
import org.truffleruby.language.RubyNode;
1617

1718
import com.oracle.truffle.api.frame.VirtualFrame;
1819

19-
public class NotNode extends RubyContextSourceNode {
20+
public abstract class NotNode extends RubyContextSourceNode {
2021

21-
@Child private BooleanCastNode child;
22+
@Child private RubyNode child;
2223

2324
public NotNode(RubyNode child) {
24-
this.child = BooleanCastNodeGen.create(child);
25+
this.child = child;
2526
}
2627

27-
@Override
28-
public Object execute(VirtualFrame frame) {
29-
return !child.execute(frame);
30-
}
31-
32-
private RubyNode getChildBeforeCasting() {
33-
return child.getValueNode();
28+
@Specialization
29+
protected Object doNot(VirtualFrame frame,
30+
@Cached BooleanCastNode booleanCastNode) {
31+
final var valueAsBoolean = booleanCastNode.execute(child.execute(frame));
32+
return !valueAsBoolean;
3433
}
3534

3635
public RubyNode cloneUninitialized() {
37-
var copy = new NotNode(getChildBeforeCasting().cloneUninitialized());
36+
var copy = NotNodeGen.create(child.cloneUninitialized());
3837
return copy.copyFlags(this);
3938
}
4039

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
import org.truffleruby.language.control.LocalReturnNode;
8282
import org.truffleruby.language.control.NextNode;
8383
import org.truffleruby.language.control.NoMatchingPatternNodeGen;
84-
import org.truffleruby.language.control.NotNode;
84+
import org.truffleruby.language.control.NotNodeGen;
8585
import org.truffleruby.language.control.OnceNode;
8686
import org.truffleruby.language.control.OrLazyValueDefinedNodeGen;
8787
import org.truffleruby.language.control.OrNodeGen;
@@ -2309,7 +2309,7 @@ public RubyNode visitOpAsgnNode(OpAsgnParseNode node) {
23092309

23102310
if (node.isLazy()) {
23112311
body = new IfNode(
2312-
new NotNode(new IsNilNode(receiverValue.get(sourceSection).accept(this))),
2312+
NotNodeGen.create(new IsNilNode(receiverValue.get(sourceSection).accept(this))),
23132313
body);
23142314
body.unsafeSetSourceSection(sourceSection);
23152315
}
@@ -2891,7 +2891,7 @@ private RubyNode translateWhileNode(WhileParseNode node, boolean conditionInvers
28912891

28922892
RubyNode condition = node.getConditionNode().accept(this);
28932893
if (conditionInversed) {
2894-
condition = new NotNode(condition);
2894+
condition = NotNodeGen.create(condition);
28952895
}
28962896

28972897
RubyNode body;

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

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

1515
import org.truffleruby.RubyLanguage;
16+
import org.truffleruby.language.control.NotNodeGen;
1617
import org.truffleruby.language.locals.FindDeclarationVariableNodes.FrameSlotAndDepth;
1718
import org.truffleruby.language.methods.CachedLazyCallTargetSupplier;
1819
import org.truffleruby.core.IsNilNode;
@@ -36,7 +37,6 @@
3637
import org.truffleruby.language.control.DynamicReturnNode;
3738
import org.truffleruby.language.control.IfElseNode;
3839
import org.truffleruby.language.control.InvalidReturnNode;
39-
import org.truffleruby.language.control.NotNode;
4040
import org.truffleruby.language.control.ReturnID;
4141
import org.truffleruby.language.locals.LocalVariableType;
4242
import org.truffleruby.language.locals.ReadLocalVariableNode;
@@ -222,7 +222,7 @@ private RubyNode preludeProc(
222222
sourceSection,
223223
Arrays.asList(
224224
writeArrayNode,
225-
new NotNode(
225+
NotNodeGen.create(
226226
new IsNilNode(
227227
new ReadLocalVariableNode(LocalVariableType.FRAME_LOCAL, arraySlot)))));
228228

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import org.truffleruby.language.SourceIndexLength;
2020
import org.truffleruby.language.control.AndNode;
2121
import org.truffleruby.language.control.ExecuteAndReturnTrueNode;
22-
import org.truffleruby.language.control.NotNode;
22+
import org.truffleruby.language.control.NotNodeGen;
2323
import org.truffleruby.language.control.RaiseException;
2424
import org.truffleruby.language.literal.NilLiteralNode;
2525
import org.truffleruby.language.literal.TruffleInternalModuleLiteralNode;
@@ -95,7 +95,7 @@ public RubyNode translatePatternNode(ParseNode patternNode, RubyNode expressionV
9595
pattern = translatePatternNode(ifNode.getThenBody(), expressionValue);
9696
} else {
9797
pattern = translatePatternNode(ifNode.getElseBody(), expressionValue);
98-
condition = new NotNode(condition);
98+
condition = NotNodeGen.create(condition);
9999
}
100100

101101
return new AndNode(pattern, condition);

0 commit comments

Comments
 (0)