// 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);
}
(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);
+}
+
+
-ROOT@[0; 54)
+ROOT@[0; 39)
IMPL_ITEM@[0; 14)
IMPL_KW@[0; 4)
TYPE_PARAM_LIST@[4; 14)
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)