Streamline parse_path_start_expr
.
Let-chaining avoids some code duplication.
This commit is contained in:
parent
e2b52ff73e
commit
1e8497351d
1 changed files with 6 additions and 9 deletions
|
@ -1510,34 +1510,31 @@ impl<'a> Parser<'a> {
|
||||||
} else {
|
} else {
|
||||||
(None, self.parse_path(PathStyle::Expr)?)
|
(None, self.parse_path(PathStyle::Expr)?)
|
||||||
};
|
};
|
||||||
let lo = path.span;
|
|
||||||
|
|
||||||
// `!`, as an operator, is prefix, so we know this isn't that.
|
// `!`, as an operator, is prefix, so we know this isn't that.
|
||||||
let (hi, kind) = if self.eat(&token::Not) {
|
let (span, kind) = if self.eat(&token::Not) {
|
||||||
// MACRO INVOCATION expression
|
// MACRO INVOCATION expression
|
||||||
if qself.is_some() {
|
if qself.is_some() {
|
||||||
self.struct_span_err(path.span, "macros cannot use qualified paths").emit();
|
self.struct_span_err(path.span, "macros cannot use qualified paths").emit();
|
||||||
}
|
}
|
||||||
|
let lo = path.span;
|
||||||
let mac = MacCall {
|
let mac = MacCall {
|
||||||
path,
|
path,
|
||||||
args: self.parse_mac_args()?,
|
args: self.parse_mac_args()?,
|
||||||
prior_type_ascription: self.last_type_ascription,
|
prior_type_ascription: self.last_type_ascription,
|
||||||
};
|
};
|
||||||
(self.prev_token.span, ExprKind::MacCall(mac))
|
(lo.to(self.prev_token.span), ExprKind::MacCall(mac))
|
||||||
} else if self.check(&token::OpenDelim(Delimiter::Brace)) {
|
} else if self.check(&token::OpenDelim(Delimiter::Brace)) &&
|
||||||
if let Some(expr) = self.maybe_parse_struct_expr(qself.as_ref(), &path, &attrs) {
|
let Some(expr) = self.maybe_parse_struct_expr(qself.as_ref(), &path, &attrs) {
|
||||||
if qself.is_some() {
|
if qself.is_some() {
|
||||||
self.sess.gated_spans.gate(sym::more_qualified_paths, path.span);
|
self.sess.gated_spans.gate(sym::more_qualified_paths, path.span);
|
||||||
}
|
}
|
||||||
return expr;
|
return expr;
|
||||||
} else {
|
|
||||||
(path.span, ExprKind::Path(qself, path))
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
(path.span, ExprKind::Path(qself, path))
|
(path.span, ExprKind::Path(qself, path))
|
||||||
};
|
};
|
||||||
|
|
||||||
let expr = self.mk_expr(lo.to(hi), kind, attrs);
|
let expr = self.mk_expr(span, kind, attrs);
|
||||||
self.maybe_recover_from_bad_qpath(expr)
|
self.maybe_recover_from_bad_qpath(expr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue