pub struct Group<D> { /* private fields */ }
Expand description
A delimited group.
For more information, see the module documentation.
Implementations§
Source§impl<D: Delimiters> Group<D>
impl<D: Delimiters> Group<D>
Sourcepub fn into_token_stream(self) -> TokenStream
pub fn into_token_stream(self) -> TokenStream
Returns the contained TokenStream
.
Examples found in repository?
examples/calc.rs (line 89)
81fn primary(input: ParseStream) -> Result<Expr> {
82 let lookahead = input.lookahead();
83 if lookahead.peek(token::LitFloat) {
84 Ok(Expr::Num(input.parse::<token::LitFloat>()?.value()))
85 } else if lookahead.peek(token::LitInt) {
86 Ok(Expr::Num(input.parse::<token::LitInt>()?.value() as f64))
87 } else if lookahead.peek(token::LeftParen) {
88 let group: Group<Parentheses> = input.parse()?;
89 parse(group.into_token_stream())
90 } else {
91 Err(lookahead.error())
92 }
93}
More examples
examples/lox/main.rs (line 438)
433 fn parse(input: ParseStream) -> Result<Self> {
434 let name: Ident = input.parse()?;
435 let mut contents: Group<Parentheses> = input.parse()?;
436 contents.remove_whitespace();
437 let Parentheses(span) = contents.delimiters();
438 let tokens = contents.into_token_stream();
439 let params: Vec<Ident> = if tokens.is_empty() {
440 vec![]
441 } else {
442 let params: Punctuated<Ident, Punct![","]> =
443 Punctuated::parse_separated.parse(tokens)?;
444 params.into_iter().collect()
445 };
446 if params.len() >= 255 {
447 input.add_error(input.new_error(
448 "Can't have more than 254 parameters".to_string(),
449 span,
450 error_codes::TOO_MANY_ARGS,
451 ));
452 }
453 let mut contents: Group<Braces> = input.parse()?;
454 contents.remove_whitespace();
455 let body = block.parse(contents.into_token_stream())?;
456 Ok(Function { name, params, body })
457 }
Sourcepub fn delimiters(&self) -> D
pub fn delimiters(&self) -> D
Returns a token representing the delimiters of this group.
Examples found in repository?
examples/lox/main.rs (line 437)
433 fn parse(input: ParseStream) -> Result<Self> {
434 let name: Ident = input.parse()?;
435 let mut contents: Group<Parentheses> = input.parse()?;
436 contents.remove_whitespace();
437 let Parentheses(span) = contents.delimiters();
438 let tokens = contents.into_token_stream();
439 let params: Vec<Ident> = if tokens.is_empty() {
440 vec![]
441 } else {
442 let params: Punctuated<Ident, Punct![","]> =
443 Punctuated::parse_separated.parse(tokens)?;
444 params.into_iter().collect()
445 };
446 if params.len() >= 255 {
447 input.add_error(input.new_error(
448 "Can't have more than 254 parameters".to_string(),
449 span,
450 error_codes::TOO_MANY_ARGS,
451 ));
452 }
453 let mut contents: Group<Braces> = input.parse()?;
454 contents.remove_whitespace();
455 let body = block.parse(contents.into_token_stream())?;
456 Ok(Function { name, params, body })
457 }
Sourcepub fn remove_whitespace(&mut self)
pub fn remove_whitespace(&mut self)
Removes all whitespace from the TokenStream
in self
.
Examples found in repository?
examples/lox/main.rs (line 436)
433 fn parse(input: ParseStream) -> Result<Self> {
434 let name: Ident = input.parse()?;
435 let mut contents: Group<Parentheses> = input.parse()?;
436 contents.remove_whitespace();
437 let Parentheses(span) = contents.delimiters();
438 let tokens = contents.into_token_stream();
439 let params: Vec<Ident> = if tokens.is_empty() {
440 vec![]
441 } else {
442 let params: Punctuated<Ident, Punct![","]> =
443 Punctuated::parse_separated.parse(tokens)?;
444 params.into_iter().collect()
445 };
446 if params.len() >= 255 {
447 input.add_error(input.new_error(
448 "Can't have more than 254 parameters".to_string(),
449 span,
450 error_codes::TOO_MANY_ARGS,
451 ));
452 }
453 let mut contents: Group<Braces> = input.parse()?;
454 contents.remove_whitespace();
455 let body = block.parse(contents.into_token_stream())?;
456 Ok(Function { name, params, body })
457 }
Sourcepub fn without_whitespace(self) -> Group<D>
pub fn without_whitespace(self) -> Group<D>
Consumes self
, returning a new Group<D>
with all whitespace
removed.
Trait Implementations§
Source§impl<D: Delimiters> Parse for Group<D>
impl<D: Delimiters> Parse for Group<D>
Source§impl<D> PartialOrd for Group<D>
impl<D> PartialOrd for Group<D>
impl<D> Eq for Group<D>
Auto Trait Implementations§
impl<D> Freeze for Group<D>
impl<D> RefUnwindSafe for Group<D>where
D: RefUnwindSafe,
impl<D> Send for Group<D>where
D: Send,
impl<D> Sync for Group<D>where
D: Sync,
impl<D> Unpin for Group<D>where
D: Unpin,
impl<D> UnwindSafe for Group<D>where
D: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more