Skip to content

Commit 8b33e16

Browse files
committed
SingleByteOptimizableNode supports DSL inlining
1 parent eb2bbb4 commit 8b33e16

File tree

4 files changed

+49
-46
lines changed

4 files changed

+49
-46
lines changed

src/main/java/org/truffleruby/core/regexp/MatchDataNodes.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,7 @@ protected Object begin(RubyMatchData matchData, int index,
504504
var encoding = strings.getEncoding(matchData.source);
505505

506506
if (multiByteCharacterProfile.profile(this,
507-
!singleByteOptimizableNode.execute(matchDataSource, encoding))) {
507+
!singleByteOptimizableNode.execute(this, matchDataSource, encoding))) {
508508
return getCharOffsets(matchData, matchDataSource, encoding).beg[index];
509509
}
510510

@@ -590,7 +590,7 @@ protected Object end(RubyMatchData matchData, int index,
590590
var encoding = strings.getEncoding(matchData.source);
591591

592592
if (multiByteCharacterProfile.profile(this,
593-
!singleByteOptimizableNode.execute(matchDataSource, encoding))) {
593+
!singleByteOptimizableNode.execute(this, matchDataSource, encoding))) {
594594
return getCharOffsets(matchData, matchDataSource, encoding).end[index];
595595
}
596596

src/main/java/org/truffleruby/core/string/StringGuards.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
package org.truffleruby.core.string;
1212

1313
import com.oracle.truffle.api.CompilerAsserts;
14+
import com.oracle.truffle.api.nodes.Node;
1415
import com.oracle.truffle.api.strings.AbstractTruffleString;
1516
import com.oracle.truffle.api.strings.TruffleString;
1617
import org.jcodings.Config;
@@ -51,9 +52,9 @@ public static boolean isBrokenCodeRange(AbstractTruffleString string, TruffleStr
5152
return codeRangeNode.execute(string, encoding) == BROKEN;
5253
}
5354

54-
public static boolean isSingleByteOptimizable(AbstractTruffleString tString, RubyEncoding encoding,
55+
public static boolean isSingleByteOptimizable(Node node, AbstractTruffleString tString, RubyEncoding encoding,
5556
SingleByteOptimizableNode singleByteOptimizableNode) {
56-
return singleByteOptimizableNode.execute(tString, encoding);
57+
return singleByteOptimizableNode.execute(node, tString, encoding);
5758
}
5859

5960
public static boolean isAsciiCompatible(RubyEncoding encoding) {
@@ -70,15 +71,15 @@ private static boolean isAsciiCompatMapping(int caseMappingOptions) {
7071
}
7172

7273
/** The mapping is ASCII-only or effectively ASCII-only based on the string properties. */
73-
private static boolean isAsciiCodePointsMapping(AbstractTruffleString tstring, RubyEncoding encoding,
74+
private static boolean isAsciiCodePointsMapping(Node node, AbstractTruffleString tstring, RubyEncoding encoding,
7475
int caseMappingOptions, SingleByteOptimizableNode singleByteOptimizableNode) {
75-
return isSingleByteOptimizable(tstring, encoding, singleByteOptimizableNode)
76+
return isSingleByteOptimizable(node, tstring, encoding, singleByteOptimizableNode)
7677
? isAsciiCompatMapping(caseMappingOptions)
7778
: caseMappingOptions == Config.CASE_ASCII_ONLY && isAsciiCompatible(encoding);
7879
}
7980

80-
public static boolean isComplexCaseMapping(AbstractTruffleString tstring, RubyEncoding encoding,
81+
public static boolean isComplexCaseMapping(Node node, AbstractTruffleString tstring, RubyEncoding encoding,
8182
int caseMappingOptions, SingleByteOptimizableNode singleByteOptimizableNode) {
82-
return !isAsciiCodePointsMapping(tstring, encoding, caseMappingOptions, singleByteOptimizableNode);
83+
return !isAsciiCodePointsMapping(node, tstring, encoding, caseMappingOptions, singleByteOptimizableNode);
8384
}
8485
}

src/main/java/org/truffleruby/core/string/StringHelperNodes.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,20 +63,17 @@ static Object trTransHelper(Node node, EncodingNodes.CheckEncodingNode checkEnco
6363
return self;
6464
}
6565

66+
@GenerateCached(false)
67+
@GenerateInline
6668
public abstract static class SingleByteOptimizableNode extends RubyBaseNode {
6769

68-
@NeverDefault
69-
public static SingleByteOptimizableNode create() {
70-
return StringHelperNodesFactory.SingleByteOptimizableNodeGen.create();
71-
}
72-
73-
public abstract boolean execute(AbstractTruffleString string, RubyEncoding encoding);
70+
public abstract boolean execute(Node node, AbstractTruffleString string, RubyEncoding encoding);
7471

7572
@Specialization
76-
protected boolean isSingleByteOptimizable(AbstractTruffleString string, RubyEncoding encoding,
73+
protected static boolean isSingleByteOptimizable(Node node, AbstractTruffleString string, RubyEncoding encoding,
7774
@Cached InlinedConditionProfile asciiOnlyProfile,
78-
@Cached TruffleString.GetByteCodeRangeNode getByteCodeRangeNode) {
79-
if (asciiOnlyProfile.profile(this, StringGuards.is7Bit(string, encoding, getByteCodeRangeNode))) {
75+
@Cached(inline = false) TruffleString.GetByteCodeRangeNode getByteCodeRangeNode) {
76+
if (asciiOnlyProfile.profile(node, StringGuards.is7Bit(string, encoding, getByteCodeRangeNode))) {
8077
return true;
8178
} else {
8279
return encoding.isSingleByte;

0 commit comments

Comments
 (0)