mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 08:44:35 +00:00
parse impl type
This commit is contained in:
parent
cacb32d88a
commit
edf1cc3582
@ -54,16 +54,8 @@ pub(super) fn impl_item(p: &mut Parser) {
|
||||
|
||||
// test impl_item_neg
|
||||
// impl !Send for X {}
|
||||
if p.at(IMPL_KW) {
|
||||
p.error("expected type");
|
||||
} else {
|
||||
p.eat(EXCL);
|
||||
if p.at(IMPL_KW) {
|
||||
p.error("expected type");
|
||||
} else {
|
||||
types::type_(p);
|
||||
}
|
||||
}
|
||||
p.eat(EXCL);
|
||||
impl_type(p);
|
||||
if p.eat(FOR_KW) {
|
||||
types::type_(p);
|
||||
}
|
||||
@ -123,3 +115,17 @@ fn choose_type_params_over_qpath(p: &Parser) -> bool {
|
||||
(p.nth(1) == LIFETIME || p.nth(1) == IDENT)
|
||||
&& (p.nth(2) == R_ANGLE || p.nth(2) == COMMA || p.nth(2) == COLON || p.nth(2) == EQ)
|
||||
}
|
||||
|
||||
// impl Type {}
|
||||
// ^^^^
|
||||
// impl Trait for T {}
|
||||
// ^^^^^
|
||||
pub(crate) fn impl_type(p: &mut Parser) {
|
||||
if p.at(IMPL_KW) {
|
||||
p.error("expected trait or type");
|
||||
return;
|
||||
}
|
||||
types::type_(p);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
impl<T: Clone>
|
||||
impl<T:Clone>
|
||||
!impl<T> OnceCell<T> {
|
||||
impl<T> OnceCell<T> {
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
ROOT@[0; 54)
|
||||
ROOT@[0; 39)
|
||||
IMPL_ITEM@[0; 14)
|
||||
IMPL_KW@[0; 4)
|
||||
TYPE_PARAM_LIST@[4; 14)
|
||||
@ -14,53 +14,35 @@ ROOT@[0; 54)
|
||||
NAME_REF@[8; 13)
|
||||
IDENT@[8; 13) "Clone"
|
||||
R_ANGLE@[13; 14)
|
||||
err: `expected type`
|
||||
err: `expected trait or type`
|
||||
err: `expected `{``
|
||||
WHITESPACE@[14; 15)
|
||||
IMPL_ITEM@[15; 30)
|
||||
IMPL_ITEM@[15; 38)
|
||||
IMPL_KW@[15; 19)
|
||||
TYPE_PARAM_LIST@[19; 28)
|
||||
TYPE_PARAM_LIST@[19; 22)
|
||||
L_ANGLE@[19; 20)
|
||||
TYPE_PARAM@[20; 27)
|
||||
TYPE_PARAM@[20; 21)
|
||||
NAME@[20; 21)
|
||||
IDENT@[20; 21) "T"
|
||||
COLON@[21; 22)
|
||||
PATH_TYPE@[22; 27)
|
||||
PATH@[22; 27)
|
||||
PATH_SEGMENT@[22; 27)
|
||||
NAME_REF@[22; 27)
|
||||
IDENT@[22; 27) "Clone"
|
||||
R_ANGLE@[27; 28)
|
||||
WHITESPACE@[28; 29)
|
||||
EXCL@[29; 30)
|
||||
err: `expected type`
|
||||
err: `expected `{``
|
||||
IMPL_ITEM@[30; 53)
|
||||
IMPL_KW@[30; 34)
|
||||
TYPE_PARAM_LIST@[34; 37)
|
||||
L_ANGLE@[34; 35)
|
||||
TYPE_PARAM@[35; 36)
|
||||
NAME@[35; 36)
|
||||
IDENT@[35; 36) "T"
|
||||
R_ANGLE@[36; 37)
|
||||
WHITESPACE@[37; 38)
|
||||
PATH_TYPE@[38; 49)
|
||||
PATH@[38; 49)
|
||||
PATH_SEGMENT@[38; 49)
|
||||
NAME_REF@[38; 46)
|
||||
IDENT@[38; 46) "OnceCell"
|
||||
TYPE_ARG_LIST@[46; 49)
|
||||
L_ANGLE@[46; 47)
|
||||
TYPE_ARG@[47; 48)
|
||||
PATH_TYPE@[47; 48)
|
||||
PATH@[47; 48)
|
||||
PATH_SEGMENT@[47; 48)
|
||||
NAME_REF@[47; 48)
|
||||
IDENT@[47; 48) "T"
|
||||
R_ANGLE@[48; 49)
|
||||
WHITESPACE@[49; 50)
|
||||
ITEM_LIST@[50; 53)
|
||||
L_CURLY@[50; 51)
|
||||
WHITESPACE@[51; 52)
|
||||
R_CURLY@[52; 53)
|
||||
WHITESPACE@[53; 54)
|
||||
R_ANGLE@[21; 22)
|
||||
WHITESPACE@[22; 23)
|
||||
PATH_TYPE@[23; 34)
|
||||
PATH@[23; 34)
|
||||
PATH_SEGMENT@[23; 34)
|
||||
NAME_REF@[23; 31)
|
||||
IDENT@[23; 31) "OnceCell"
|
||||
TYPE_ARG_LIST@[31; 34)
|
||||
L_ANGLE@[31; 32)
|
||||
TYPE_ARG@[32; 33)
|
||||
PATH_TYPE@[32; 33)
|
||||
PATH@[32; 33)
|
||||
PATH_SEGMENT@[32; 33)
|
||||
NAME_REF@[32; 33)
|
||||
IDENT@[32; 33) "T"
|
||||
R_ANGLE@[33; 34)
|
||||
WHITESPACE@[34; 35)
|
||||
ITEM_LIST@[35; 38)
|
||||
L_CURLY@[35; 36)
|
||||
WHITESPACE@[36; 37)
|
||||
R_CURLY@[37; 38)
|
||||
WHITESPACE@[38; 39)
|
||||
|
Loading…
Reference in New Issue
Block a user