Skip to content

Commit 090f3fd

Browse files
committed
syntax: further item parsing cleanup
1 parent 3bdbfbe commit 090f3fd

File tree

1 file changed

+35
-24
lines changed

1 file changed

+35
-24
lines changed

src/libsyntax/parse/parser/item.rs

+35-24
Original file line numberDiff line numberDiff line change
@@ -141,14 +141,14 @@ impl<'a> Parser<'a> {
141141
self.bump();
142142
// STATIC ITEM
143143
let m = self.parse_mutability();
144-
let info = self.parse_item_const(Some(m));
144+
let info = self.parse_item_const(Some(m))?;
145145
return self.mk_item_with_info(attrs, lo, vis, info);
146146
}
147+
147148
if self.eat_keyword(kw::Const) {
148149
let const_span = self.prev_span;
149150
if [kw::Fn, kw::Unsafe, kw::Extern].iter().any(|k| self.check_keyword(*k)) {
150151
// CONST FUNCTION ITEM
151-
152152
let unsafety = self.parse_unsafety();
153153

154154
if self.check_keyword(kw::Extern) {
@@ -157,7 +157,7 @@ impl<'a> Parser<'a> {
157157
);
158158
}
159159
let abi = self.parse_extern_abi()?;
160-
self.bump(); // 'fn'
160+
self.bump(); // `fn`
161161

162162
let header = FnHeader {
163163
unsafety,
@@ -181,7 +181,8 @@ impl<'a> Parser<'a> {
181181
)
182182
.emit();
183183
}
184-
let info = self.parse_item_const(None);
184+
185+
let info = self.parse_item_const(None)?;
185186
return self.mk_item_with_info(attrs, lo, vis, info);
186187
}
187188

@@ -210,6 +211,7 @@ impl<'a> Parser<'a> {
210211
return self.parse_item_fn(lo, vis, attrs, header);
211212
}
212213
}
214+
213215
if self.check_keyword(kw::Unsafe) &&
214216
self.is_keyword_ahead(1, &[kw::Trait, kw::Auto])
215217
{
@@ -222,21 +224,24 @@ impl<'a> Parser<'a> {
222224
self.expect_keyword(kw::Trait)?;
223225
IsAuto::Yes
224226
};
225-
let info = self.parse_item_trait(is_auto, Unsafety::Unsafe);
227+
let info = self.parse_item_trait(is_auto, Unsafety::Unsafe)?;
226228
return self.mk_item_with_info(attrs, lo, vis, info);
227229
}
230+
228231
if self.check_keyword(kw::Impl) ||
229232
self.check_keyword(kw::Unsafe) &&
230233
self.is_keyword_ahead(1, &[kw::Impl]) ||
231234
self.check_keyword(kw::Default) &&
232-
self.is_keyword_ahead(1, &[kw::Impl, kw::Unsafe]) {
235+
self.is_keyword_ahead(1, &[kw::Impl, kw::Unsafe])
236+
{
233237
// IMPL ITEM
234238
let defaultness = self.parse_defaultness();
235239
let unsafety = self.parse_unsafety();
236240
self.expect_keyword(kw::Impl)?;
237-
let info = self.parse_item_impl(unsafety, defaultness);
241+
let info = self.parse_item_impl(unsafety, defaultness)?;
238242
return self.mk_item_with_info(attrs, lo, vis, info);
239243
}
244+
240245
if self.check_keyword(kw::Fn) {
241246
// FUNCTION ITEM
242247
self.bump();
@@ -249,8 +254,10 @@ impl<'a> Parser<'a> {
249254
};
250255
return self.parse_item_fn(lo, vis, attrs, header);
251256
}
257+
252258
if self.check_keyword(kw::Unsafe)
253-
&& self.look_ahead(1, |t| *t != token::OpenDelim(token::Brace)) {
259+
&& self.look_ahead(1, |t| *t != token::OpenDelim(token::Brace))
260+
{
254261
// UNSAFE FUNCTION ITEM
255262
self.bump(); // `unsafe`
256263
// `{` is also expected after `unsafe`; in case of error, include it in the diagnostic.
@@ -266,11 +273,13 @@ impl<'a> Parser<'a> {
266273
};
267274
return self.parse_item_fn(lo, vis, attrs, header);
268275
}
276+
269277
if self.eat_keyword(kw::Mod) {
270278
// MODULE ITEM
271-
let info = self.parse_item_mod(&attrs[..]);
279+
let info = self.parse_item_mod(&attrs[..])?;
272280
return self.mk_item_with_info(attrs, lo, vis, info);
273281
}
282+
274283
if let Some(type_) = self.eat_type() {
275284
let (ident, alias, generics) = type_?;
276285
// TYPE ITEM
@@ -281,37 +290,41 @@ impl<'a> Parser<'a> {
281290
let span = lo.to(self.prev_span);
282291
return Ok(Some(self.mk_item(span, ident, item_, vis, attrs)));
283292
}
293+
284294
if self.eat_keyword(kw::Enum) {
285295
// ENUM ITEM
286-
let info = self.parse_item_enum();
296+
let info = self.parse_item_enum()?;
287297
return self.mk_item_with_info(attrs, lo, vis, info);
288298
}
299+
289300
if self.check_keyword(kw::Trait)
290301
|| (self.check_keyword(kw::Auto)
291302
&& self.is_keyword_ahead(1, &[kw::Trait]))
292303
{
293-
let is_auto = if self.eat_keyword(kw::Trait) {
294-
IsAuto::No
295-
} else {
296-
self.expect_keyword(kw::Auto)?;
297-
self.expect_keyword(kw::Trait)?;
304+
// TRAIT ITEM
305+
let is_auto = if self.eat_keyword(kw::Auto) {
298306
IsAuto::Yes
307+
} else {
308+
IsAuto::No
299309
};
300-
// TRAIT ITEM
301-
let info = self.parse_item_trait(is_auto, Unsafety::Normal);
310+
self.expect_keyword(kw::Trait)?;
311+
let info = self.parse_item_trait(is_auto, Unsafety::Normal)?;
302312
return self.mk_item_with_info(attrs, lo, vis, info);
303313
}
314+
304315
if self.eat_keyword(kw::Struct) {
305316
// STRUCT ITEM
306-
let info = self.parse_item_struct();
317+
let info = self.parse_item_struct()?;
307318
return self.mk_item_with_info(attrs, lo, vis, info);
308319
}
320+
309321
if self.is_union_item() {
310322
// UNION ITEM
311323
self.bump();
312-
let info = self.parse_item_union();
324+
let info = self.parse_item_union()?;
313325
return self.mk_item_with_info(attrs, lo, vis, info);
314326
}
327+
315328
if let Some(macro_def) = self.eat_macro_def(&attrs, &vis, lo)? {
316329
return Ok(Some(macro_def));
317330
}
@@ -417,9 +430,9 @@ impl<'a> Parser<'a> {
417430
attrs: Vec<Attribute>,
418431
lo: Span,
419432
vis: Visibility,
420-
info: PResult<'a, ItemInfo>,
433+
info: ItemInfo,
421434
) -> PResult<'a, Option<P<Item>>> {
422-
let (ident, item, extra_attrs) = info?;
435+
let (ident, item, extra_attrs) = info;
423436
let span = lo.to(self.prev_span);
424437
let attrs = maybe_append(attrs, extra_attrs);
425438
Ok(Some(self.mk_item(span, ident, item, vis, attrs)))
@@ -1195,10 +1208,8 @@ impl<'a> Parser<'a> {
11951208
let allow_c_variadic = header.abi == Abi::C && header.unsafety == Unsafety::Unsafe;
11961209
let (ident, decl, generics) = self.parse_fn_sig(allow_c_variadic)?;
11971210
let (inner_attrs, body) = self.parse_inner_attrs_and_block()?;
1198-
let span = lo.to(self.prev_span);
11991211
let kind = ItemKind::Fn(decl, header, generics, body);
1200-
let attrs = maybe_append(attrs, Some(inner_attrs));
1201-
Ok(Some(self.mk_item(span, ident, kind, vis, attrs)))
1212+
self.mk_item_with_info(attrs, lo, vis, (ident, kind, Some(inner_attrs)))
12021213
}
12031214

12041215
/// Parse the "signature", including the identifier, parameters, and generics of a function.

0 commit comments

Comments
 (0)