diff options
author | Haibo Huang <hhb@google.com> | 2020-11-02 18:45:24 -0800 |
---|---|---|
committer | Haibo Huang <hhb@google.com> | 2020-11-02 18:45:24 -0800 |
commit | ae47280e989846edaae234a1f952fbf4faf4c088 (patch) | |
tree | 099d1f4a952fa4938b84de022c2497e0dc012950 /src/ast.rs | |
parent | b3b422d2500290b6459af803c74754dee9355c3a (diff) | |
download | const_fn-ae47280e989846edaae234a1f952fbf4faf4c088.tar.gz |
Upgrade rust/crates/const_fn to 0.4.3
Test: make
Change-Id: I6d1557fc976b54f172237ac5968413751b9fe1d8
Diffstat (limited to 'src/ast.rs')
-rw-r--r-- | src/ast.rs | 16 |
1 files changed, 8 insertions, 8 deletions
@@ -1,7 +1,7 @@ use proc_macro::{Delimiter, Literal, Span, TokenStream, TokenTree}; -use std::iter::Peekable; use crate::{ + iter::TokenIter, to_tokens::ToTokens, utils::{parse_as_empty, tt_span}, Result, @@ -15,7 +15,7 @@ pub(crate) struct Func { } pub(crate) fn parse_input(input: TokenStream) -> Result<Func> { - let mut input = input.into_iter().peekable(); + let mut input = TokenIter::new(input); let attrs = parse_attrs(&mut input)?; let sig = parse_signature(&mut input); @@ -64,19 +64,19 @@ impl ToTokens for Func { } } -fn parse_signature(input: &mut Peekable<impl Iterator<Item = TokenTree>>) -> Vec<TokenTree> { +fn parse_signature(input: &mut TokenIter) -> Vec<TokenTree> { let mut sig = Vec::new(); loop { match input.peek() { Some(TokenTree::Group(group)) if group.delimiter() == Delimiter::Brace => break, None => break, - _ => sig.push(input.next().unwrap()), + Some(_) => sig.push(input.next().unwrap()), } } sig } -fn parse_attrs(input: &mut Peekable<impl Iterator<Item = TokenTree>>) -> Result<Vec<Attribute>> { +fn parse_attrs(input: &mut TokenIter) -> Result<Vec<Attribute>> { let mut attrs = Vec::new(); loop { let pound_token = match input.peek() { @@ -109,16 +109,16 @@ impl ToTokens for Attribute { } pub(crate) struct LitStr { - token: Literal, + pub(crate) token: Literal, value: String, } impl LitStr { - pub(crate) fn new(token: &Literal) -> Result<Self> { + pub(crate) fn new(token: Literal) -> Result<Self> { let value = token.to_string(); // unlike `syn::LitStr`, only accepts `"..."` if value.starts_with('"') && value.ends_with('"') { - Ok(Self { token: token.clone(), value }) + Ok(Self { token, value }) } else { Err(error!(token.span(), "expected string literal")) } |