Attach TokenStream
to ast::Path
This commit is contained in:
parent
3815e91ccd
commit
55082ce413
15 changed files with 41 additions and 21 deletions
|
@ -901,7 +901,7 @@ impl<'a> Parser<'a> {
|
|||
) -> PResult<'a, P<T>> {
|
||||
self.expect(&token::ModSep)?;
|
||||
|
||||
let mut path = ast::Path { segments: Vec::new(), span: DUMMY_SP };
|
||||
let mut path = ast::Path { segments: Vec::new(), span: DUMMY_SP, tokens: None };
|
||||
self.parse_path_segments(&mut path.segments, T::PATH_STYLE)?;
|
||||
path.span = ty_span.to(self.prev_token.span);
|
||||
|
||||
|
|
|
@ -787,7 +787,7 @@ impl<'a> Parser<'a> {
|
|||
fn parse_use_tree(&mut self) -> PResult<'a, UseTree> {
|
||||
let lo = self.token.span;
|
||||
|
||||
let mut prefix = ast::Path { segments: Vec::new(), span: lo.shrink_to_lo() };
|
||||
let mut prefix = ast::Path { segments: Vec::new(), span: lo.shrink_to_lo(), tokens: None };
|
||||
let kind = if self.check(&token::OpenDelim(token::Brace))
|
||||
|| self.check(&token::BinOp(token::Star))
|
||||
|| self.is_import_coupler()
|
||||
|
|
|
@ -168,7 +168,15 @@ impl<'a> Parser<'a> {
|
|||
return Err(self.struct_span_err(self.token.span, msg));
|
||||
}
|
||||
}
|
||||
NonterminalKind::Path => token::NtPath(self.parse_path(PathStyle::Type)?),
|
||||
NonterminalKind::Path => {
|
||||
let (mut path, tokens) =
|
||||
self.collect_tokens(|this| this.parse_path(PathStyle::Type))?;
|
||||
// We have have eaten an NtPath, which could already have tokens
|
||||
if path.tokens.is_none() {
|
||||
path.tokens = Some(tokens);
|
||||
}
|
||||
token::NtPath(path)
|
||||
}
|
||||
NonterminalKind::Meta => {
|
||||
let (mut attr, tokens) = self.collect_tokens(|this| this.parse_attr_item())?;
|
||||
// We may have eaten a nonterminal, which could already have tokens
|
||||
|
|
|
@ -64,7 +64,7 @@ impl<'a> Parser<'a> {
|
|||
path_span = path_lo.to(self.prev_token.span);
|
||||
} else {
|
||||
path_span = self.token.span.to(self.token.span);
|
||||
path = ast::Path { segments: Vec::new(), span: path_span };
|
||||
path = ast::Path { segments: Vec::new(), span: path_span, tokens: None };
|
||||
}
|
||||
|
||||
// See doc comment for `unmatched_angle_bracket_count`.
|
||||
|
@ -81,7 +81,10 @@ impl<'a> Parser<'a> {
|
|||
let qself = QSelf { ty, path_span, position: path.segments.len() };
|
||||
self.parse_path_segments(&mut path.segments, style)?;
|
||||
|
||||
Ok((qself, Path { segments: path.segments, span: lo.to(self.prev_token.span) }))
|
||||
Ok((
|
||||
qself,
|
||||
Path { segments: path.segments, span: lo.to(self.prev_token.span), tokens: None },
|
||||
))
|
||||
}
|
||||
|
||||
/// Recover from an invalid single colon, when the user likely meant a qualified path.
|
||||
|
@ -144,7 +147,7 @@ impl<'a> Parser<'a> {
|
|||
}
|
||||
self.parse_path_segments(&mut segments, style)?;
|
||||
|
||||
Ok(Path { segments, span: lo.to(self.prev_token.span) })
|
||||
Ok(Path { segments, span: lo.to(self.prev_token.span), tokens: None })
|
||||
}
|
||||
|
||||
pub(super) fn parse_path_segments(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue