Class TruffleString.ByteIndexOfCodePointSetNode
java.lang.Object
com.oracle.truffle.api.nodes.Node
com.oracle.truffle.api.strings.TruffleString.ByteIndexOfCodePointSetNode
- All Implemented Interfaces:
NodeInterface, Cloneable
- Enclosing class:
TruffleString
Node to find the byte index of the first occurrence of a codepoint present in a given
codepoint set. See
execute(AbstractTruffleString, int, int, TruffleString.CodePointSet)
for details.- Since:
- 23.0
-
Nested Class Summary
Nested classes/interfaces inherited from class Node
Node.Child, Node.Children
Modifier and TypeClassDescriptionstatic @interface
Marks fields that represent child nodes of this node.static @interface
Marks array fields that are children of this node. -
Method Summary
Modifier and TypeMethodDescriptioncreate()
Create a newTruffleString.ByteIndexOfCodePointSetNode
.final int
execute
(AbstractTruffleString a, int fromByteIndex, int toByteIndex, TruffleString.CodePointSet codePointSet) Returns the byte index of the first codepoint present in the givenTruffleString.CodePointSet
, bounded byfromByteIndex
(inclusive) andtoByteIndex
(exclusive).abstract int
execute
(AbstractTruffleString a, int fromByteIndex, int toByteIndex, TruffleString.CodePointSet codePointSet, boolean usePreciseCodeRange) Returns the byte index of the first codepoint present in the givenTruffleString.CodePointSet
, bounded byfromByteIndex
(inclusive) andtoByteIndex
(exclusive).Get the uncached version ofTruffleString.ByteIndexOfCodePointSetNode
.Methods inherited from class Node
accept, adoptChildren, atomic, atomic, copy, deepCopy, getChildren, getCost, getDebugProperties, getDescription, getEncapsulatingSourceSection, getLock, getParent, getRootNode, getSourceSection, insert, insert, isAdoptable, isSafelyReplaceableBy, notifyInserted, onReplace, replace, replace, reportPolymorphicSpecialize, reportReplace, toString
Modifier and TypeMethodDescriptionfinal void
accept
(NodeVisitor nodeVisitor) Invokes theNodeVisitor.visit(Node)
method for this node and recursively also for all child nodes.final void
final void
final <T> T
copy()
Creates a shallow copy of this node.deepCopy()
Creates a deep copy of this node.Iterator over the children of this node.getCost()
Deprecated.in 24.1 without replacementReturns properties of this node interesting for debugging and can be overwritten by subclasses to add their own custom properties.Returns a user-readable description of the purpose of the Node, or "" if no description is available.Retrieves the segment of guest language source code that is represented by this Node, if present; otherwise retrieves the segment represented by the nearest AST ancestor that has this information.protected final Lock
getLock()
Returns a lock object that can be used to synchronize modifications to the AST.final Node
The current parent node of this node.final RootNode
Get the root node of the tree a node belongs to.Retrieves the segment of guest language source code that is represented by this Node.final <T extends Node>
Tinsert
(T newChild) final <T extends Node>
T[]insert
(T[] newChildren) boolean
Returnstrue
if this node can be adopted by a parent.final boolean
isSafelyReplaceableBy
(Node newNode) Checks if this node can be replaced by another node: tree structure & type.protected final void
notifyInserted
(Node node) Notifies the framework about the insertion of one or more nodes during execution.protected void
onReplace
(Node newNode, CharSequence reason) Intended to be implemented by subclasses ofNode
to receive a notification when the node is rewritten.final <T extends Node>
Treplace
(T newNode) Replaces this node with another node.final <T extends Node>
Treplace
(T newNode, CharSequence reason) Replaces this node with another node.final void
Notifies the runtime that this node specialized to a polymorphic state.protected final void
reportReplace
(Node oldNode, Node newNode, CharSequence reason) Reports thatoldNode
was replaced withnewNode
, notifying anyreplace observers
and invalidating any compiled call targets.toString()
Converts this node to a textual representation useful for debugging.
-
Method Details
-
execute
public final int execute(AbstractTruffleString a, int fromByteIndex, int toByteIndex, TruffleString.CodePointSet codePointSet) Returns the byte index of the first codepoint present in the givenTruffleString.CodePointSet
, bounded byfromByteIndex
(inclusive) andtoByteIndex
(exclusive).TruffleString.ByteIndexOfCodePointSetNode
will specialize on the givenTruffleString.CodePointSet
's content, which is therefore required to bepartial evaluation constant
.Usage example: A node that scans a string for a known set of code points and escapes them with '\'.
abstract static class StringEscapeNode extends Node { public static final TruffleString.Encoding ENCODING = TruffleString.Encoding.UTF_32; public static final TruffleString.ByteIndexOfCodePointSetNode.CodePointSet ESCAPE_CHARS = TruffleString.ByteIndexOfCodePointSetNode.CodePointSet.fromRanges(new int[]{ '\n', '\n', '\r', '\r', // .... }, ENCODING); abstract TruffleString execute(TruffleString input); @Specialization static TruffleString run(TruffleString input, @Cached TruffleString.ByteIndexOfCodePointSetNode byteIndexOfCodePointSetNode, @Cached TruffleStringBuilder.AppendSubstringByteIndexNode appendSubstringByteIndexNode, @Cached TruffleString.CodePointAtByteIndexNode codePointAtByteIndexNode, @Cached TruffleStringBuilder.AppendCodePointNode appendCodePointNode, @Cached TruffleString.ByteLengthOfCodePointNode byteLengthOfCodePointNode, @Cached TruffleStringBuilder.ToStringNode toStringNode) { int byteLength = input.byteLength(ENCODING); TruffleStringBuilder sb = TruffleStringBuilder.create(ENCODING, byteLength); int lastPos = 0; int pos = 0; while (pos >= 0) { pos = byteIndexOfCodePointSetNode.execute(input, lastPos, byteLength, ESCAPE_CHARS); int substringLength = (pos < 0 ? byteLength : pos) - lastPos; appendSubstringByteIndexNode.execute(sb, input, lastPos, substringLength); if (pos >= 0) { int codePoint = codePointAtByteIndexNode.execute(input, pos, ENCODING); appendCodePointNode.execute(sb, '\\'); appendCodePointNode.execute(sb, codePoint); int codePointLength = byteLengthOfCodePointNode.execute(input, pos, ENCODING); lastPos = pos + codePointLength; } } return toStringNode.execute(sb); } }
- Parameters:
codePointSet
- The set of codepoints to look for. This parameter is expected to bepartial evaluation constant
.- Since:
- 23.0
-
execute
public abstract int execute(AbstractTruffleString a, int fromByteIndex, int toByteIndex, TruffleString.CodePointSet codePointSet, boolean usePreciseCodeRange) Returns the byte index of the first codepoint present in the givenTruffleString.CodePointSet
, bounded byfromByteIndex
(inclusive) andtoByteIndex
(exclusive).- Parameters:
usePreciseCodeRange
- If this parameter is set totrue
, the node may evaluate the input string's precise code range for better search performance. For more details, seeTruffleString.GetCodeRangeNode
andTruffleString.GetCodeRangeImpreciseNode
. This parameter is expected to bepartial evaluation constant
.- Since:
- 24.1
-
create
Create a newTruffleString.ByteIndexOfCodePointSetNode
.- Since:
- 23.0
-
getUncached
Get the uncached version ofTruffleString.ByteIndexOfCodePointSetNode
.- Since:
- 23.0
-