mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-28 09:44:08 +00:00
Merge #1415
1415: fix: specialization r=matklad a=csmoe Closes #1402 r? @matklad Co-authored-by: csmoe <csmoe@msn.com>
This commit is contained in:
commit
67ecc88f66
@ -103,7 +103,21 @@ pub(super) fn maybe_item(p: &mut Parser, m: Marker, flavor: ItemFlavor) -> Resul
|
||||
p.bump_remap(T![auto]);
|
||||
has_mods = true;
|
||||
}
|
||||
if p.at(IDENT) && p.at_contextual_kw("default") && p.nth(1) == T![impl] {
|
||||
|
||||
if p.at(IDENT)
|
||||
&& p.at_contextual_kw("default")
|
||||
&& (match p.nth(1) {
|
||||
T![impl] => true,
|
||||
T![fn] | T![type] => {
|
||||
if let ItemFlavor::Mod = flavor {
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
_ => false,
|
||||
})
|
||||
{
|
||||
p.bump_remap(T![default]);
|
||||
has_mods = true;
|
||||
}
|
||||
@ -163,12 +177,25 @@ pub(super) fn maybe_item(p: &mut Parser, m: Marker, flavor: ItemFlavor) -> Resul
|
||||
// test default_impl
|
||||
// default impl Foo {}
|
||||
|
||||
// test_err default_fn_type
|
||||
// trait T {
|
||||
// default type T = Bar;
|
||||
// default fn foo() {}
|
||||
// }
|
||||
|
||||
// test default_fn_type
|
||||
// impl T for Foo {
|
||||
// default type T = Bar;
|
||||
// default fn foo() {}
|
||||
// }
|
||||
|
||||
// test unsafe_default_impl
|
||||
// unsafe default impl Foo {}
|
||||
T![impl] => {
|
||||
traits::impl_block(p);
|
||||
m.complete(p, IMPL_BLOCK);
|
||||
}
|
||||
|
||||
// test existential_type
|
||||
// existential type Foo: Fn() -> usize;
|
||||
T![type] => {
|
||||
|
@ -0,0 +1,4 @@
|
||||
trait T {
|
||||
default type T = Bar;
|
||||
default fn foo() {}
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
SOURCE_FILE@[0; 62)
|
||||
TRAIT_DEF@[0; 61)
|
||||
TRAIT_KW@[0; 5) "trait"
|
||||
WHITESPACE@[5; 6) " "
|
||||
NAME@[6; 7)
|
||||
IDENT@[6; 7) "T"
|
||||
WHITESPACE@[7; 8) " "
|
||||
ITEM_LIST@[8; 61)
|
||||
L_CURLY@[8; 9) "{"
|
||||
WHITESPACE@[9; 14) "\n "
|
||||
MACRO_CALL@[14; 21)
|
||||
PATH@[14; 21)
|
||||
PATH_SEGMENT@[14; 21)
|
||||
NAME_REF@[14; 21)
|
||||
IDENT@[14; 21) "default"
|
||||
WHITESPACE@[21; 22) " "
|
||||
TYPE_ALIAS_DEF@[22; 35)
|
||||
TYPE_KW@[22; 26) "type"
|
||||
WHITESPACE@[26; 27) " "
|
||||
NAME@[27; 28)
|
||||
IDENT@[27; 28) "T"
|
||||
WHITESPACE@[28; 29) " "
|
||||
EQ@[29; 30) "="
|
||||
WHITESPACE@[30; 31) " "
|
||||
PATH_TYPE@[31; 34)
|
||||
PATH@[31; 34)
|
||||
PATH_SEGMENT@[31; 34)
|
||||
NAME_REF@[31; 34)
|
||||
IDENT@[31; 34) "Bar"
|
||||
SEMI@[34; 35) ";"
|
||||
WHITESPACE@[35; 40) "\n "
|
||||
MACRO_CALL@[40; 47)
|
||||
PATH@[40; 47)
|
||||
PATH_SEGMENT@[40; 47)
|
||||
NAME_REF@[40; 47)
|
||||
IDENT@[40; 47) "default"
|
||||
WHITESPACE@[47; 48) " "
|
||||
FN_DEF@[48; 59)
|
||||
FN_KW@[48; 50) "fn"
|
||||
WHITESPACE@[50; 51) " "
|
||||
NAME@[51; 54)
|
||||
IDENT@[51; 54) "foo"
|
||||
PARAM_LIST@[54; 56)
|
||||
L_PAREN@[54; 55) "("
|
||||
R_PAREN@[55; 56) ")"
|
||||
WHITESPACE@[56; 57) " "
|
||||
BLOCK@[57; 59)
|
||||
L_CURLY@[57; 58) "{"
|
||||
R_CURLY@[58; 59) "}"
|
||||
WHITESPACE@[59; 60) "\n"
|
||||
R_CURLY@[60; 61) "}"
|
||||
WHITESPACE@[61; 62) "\n"
|
||||
error 21: expected EXCL
|
||||
error 21: expected `{`, `[`, `(`
|
||||
error 21: expected SEMI
|
||||
error 47: expected EXCL
|
||||
error 47: expected `{`, `[`, `(`
|
||||
error 47: expected SEMI
|
@ -0,0 +1,4 @@
|
||||
impl T for Foo {
|
||||
default type T = Bar;
|
||||
default fn foo() {}
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
SOURCE_FILE@[0; 69)
|
||||
IMPL_BLOCK@[0; 68)
|
||||
IMPL_KW@[0; 4) "impl"
|
||||
WHITESPACE@[4; 5) " "
|
||||
PATH_TYPE@[5; 6)
|
||||
PATH@[5; 6)
|
||||
PATH_SEGMENT@[5; 6)
|
||||
NAME_REF@[5; 6)
|
||||
IDENT@[5; 6) "T"
|
||||
WHITESPACE@[6; 7) " "
|
||||
FOR_KW@[7; 10) "for"
|
||||
WHITESPACE@[10; 11) " "
|
||||
PATH_TYPE@[11; 14)
|
||||
PATH@[11; 14)
|
||||
PATH_SEGMENT@[11; 14)
|
||||
NAME_REF@[11; 14)
|
||||
IDENT@[11; 14) "Foo"
|
||||
WHITESPACE@[14; 15) " "
|
||||
ITEM_LIST@[15; 68)
|
||||
L_CURLY@[15; 16) "{"
|
||||
WHITESPACE@[16; 21) "\n "
|
||||
TYPE_ALIAS_DEF@[21; 42)
|
||||
DEFAULT_KW@[21; 28) "default"
|
||||
WHITESPACE@[28; 29) " "
|
||||
TYPE_KW@[29; 33) "type"
|
||||
WHITESPACE@[33; 34) " "
|
||||
NAME@[34; 35)
|
||||
IDENT@[34; 35) "T"
|
||||
WHITESPACE@[35; 36) " "
|
||||
EQ@[36; 37) "="
|
||||
WHITESPACE@[37; 38) " "
|
||||
PATH_TYPE@[38; 41)
|
||||
PATH@[38; 41)
|
||||
PATH_SEGMENT@[38; 41)
|
||||
NAME_REF@[38; 41)
|
||||
IDENT@[38; 41) "Bar"
|
||||
SEMI@[41; 42) ";"
|
||||
WHITESPACE@[42; 47) "\n "
|
||||
FN_DEF@[47; 66)
|
||||
DEFAULT_KW@[47; 54) "default"
|
||||
WHITESPACE@[54; 55) " "
|
||||
FN_KW@[55; 57) "fn"
|
||||
WHITESPACE@[57; 58) " "
|
||||
NAME@[58; 61)
|
||||
IDENT@[58; 61) "foo"
|
||||
PARAM_LIST@[61; 63)
|
||||
L_PAREN@[61; 62) "("
|
||||
R_PAREN@[62; 63) ")"
|
||||
WHITESPACE@[63; 64) " "
|
||||
BLOCK@[64; 66)
|
||||
L_CURLY@[64; 65) "{"
|
||||
R_CURLY@[65; 66) "}"
|
||||
WHITESPACE@[66; 67) "\n"
|
||||
R_CURLY@[67; 68) "}"
|
||||
WHITESPACE@[68; 69) "\n"
|
Loading…
Reference in New Issue
Block a user