pub struct Cursor<'a> {
ptr: *const Entry,
scope: *const Entry,
marker: PhantomData<&'a Entry>,
}Expand description
A cheaply copyable cursor into a TokenBuffer.
This cursor holds a shared reference into the immutable data which is used
internally to represent a TokenStream, and can be efficiently manipulated
and copied around.
An empty Cursor can be created directly, or one may create a TokenBuffer
object and get a cursor to its first token with begin().
Fields§
§ptr: *const Entry§scope: *const Entry§marker: PhantomData<&'a Entry>Implementations§
Source§impl<'a> Cursor<'a>
impl<'a> Cursor<'a>
Sourceunsafe fn create(ptr: *const Entry, scope: *const Entry) -> Self
unsafe fn create(ptr: *const Entry, scope: *const Entry) -> Self
This create method intelligently exits non-explicitly-entered
None-delimited scopes when the cursor reaches the end of them,
allowing for them to be treated transparently.
Sourceunsafe fn bump_ignore_group(self) -> Cursor<'a>
unsafe fn bump_ignore_group(self) -> Cursor<'a>
Bump the cursor to point at the next token after the current one. This
is undefined behavior if the cursor is currently looking at an
Entry::End.
If the cursor is looking at an Entry::Group, the bumped cursor will
point at the first token in the group (with the same scope end).
Sourcefn ignore_none(&mut self)
fn ignore_none(&mut self)
While the cursor is looking at a None-delimited group, move it to look
at the first token inside instead. If the group is empty, this will move
the cursor past the None-delimited group.
WARNING: This mutates its argument.
Sourcepub fn eof(self) -> bool
pub fn eof(self) -> bool
Checks whether the cursor is currently pointing at the end of its valid scope.
Sourcepub fn ident(self) -> Option<(Ident, Cursor<'a>)>
pub fn ident(self) -> Option<(Ident, Cursor<'a>)>
If the cursor is pointing at a Ident, returns it along with a cursor
pointing at the next TokenTree.
Sourcepub fn punct(self) -> Option<(Punct, Cursor<'a>)>
pub fn punct(self) -> Option<(Punct, Cursor<'a>)>
If the cursor is pointing at a Punct, returns it along with a cursor
pointing at the next TokenTree.
Sourcepub fn literal(self) -> Option<(Literal, Cursor<'a>)>
pub fn literal(self) -> Option<(Literal, Cursor<'a>)>
If the cursor is pointing at a Literal, return it along with a cursor
pointing at the next TokenTree.
Sourcepub fn lifetime(self) -> Option<(Lifetime, Cursor<'a>)>
pub fn lifetime(self) -> Option<(Lifetime, Cursor<'a>)>
If the cursor is pointing at a Lifetime, returns it along with a
cursor pointing at the next TokenTree.
Sourcepub fn group(
self,
delim: Delimiter,
) -> Option<(Cursor<'a>, DelimSpan, Cursor<'a>)>
pub fn group( self, delim: Delimiter, ) -> Option<(Cursor<'a>, DelimSpan, Cursor<'a>)>
If the cursor is pointing at a Group with the given delimiter, returns
a cursor into that group and one pointing to the next TokenTree.
Sourcepub fn any_group(self) -> Option<(Cursor<'a>, Delimiter, DelimSpan, Cursor<'a>)>
pub fn any_group(self) -> Option<(Cursor<'a>, Delimiter, DelimSpan, Cursor<'a>)>
If the cursor is pointing at a Group, returns a cursor into the group
and one pointing to the next TokenTree.
pub(crate) fn any_group_token(self) -> Option<(Group, Cursor<'a>)>
Sourcepub fn token_stream(self) -> TokenStream
pub fn token_stream(self) -> TokenStream
Copies all remaining tokens visible from this cursor into a
TokenStream.
Sourcepub fn token_tree(self) -> Option<(TokenTree, Cursor<'a>)>
pub fn token_tree(self) -> Option<(TokenTree, Cursor<'a>)>
If the cursor is pointing at a TokenTree, returns it along with a
cursor pointing at the next TokenTree.
Returns None if the cursor has reached the end of its stream.
This method does not treat None-delimited groups as transparent, and
will return a Group(None, ..) if the cursor is looking at one.
Sourcepub fn span(self) -> Span
pub fn span(self) -> Span
Returns the Span of the current token, or Span::call_site() if this
cursor points to eof.
Sourcepub(crate) fn prev_span(self) -> Span
pub(crate) fn prev_span(self) -> Span
Returns the Span of the token immediately prior to the position of
this cursor, or of the current token if there is no previous one.
Sourcepub(crate) fn skip(self) -> Option<Cursor<'a>>
pub(crate) fn skip(self) -> Option<Cursor<'a>>
Skip over the next token that is not a None-delimited group, without
cloning it. Returns None if this cursor points to eof.
This method treats 'lifetimes as a single token.