mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
internal: cleanup adt parsing
This commit is contained in:
parent
d890c767c4
commit
2195ecd7e7
@ -22,9 +22,7 @@ fn struct_or_union(p: &mut Parser, m: Marker, is_struct: bool) {
|
|||||||
T![where] => {
|
T![where] => {
|
||||||
type_params::opt_where_clause(p);
|
type_params::opt_where_clause(p);
|
||||||
match p.current() {
|
match p.current() {
|
||||||
T![;] => {
|
T![;] => p.bump(T![;]),
|
||||||
p.bump(T![;]);
|
|
||||||
}
|
|
||||||
T!['{'] => record_field_list(p),
|
T!['{'] => record_field_list(p),
|
||||||
_ => {
|
_ => {
|
||||||
//FIXME: special case `(` error message
|
//FIXME: special case `(` error message
|
||||||
@ -53,7 +51,6 @@ fn struct_or_union(p: &mut Parser, m: Marker, is_struct: bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(super) fn enum_(p: &mut Parser, m: Marker) {
|
pub(super) fn enum_(p: &mut Parser, m: Marker) {
|
||||||
assert!(p.at(T![enum]));
|
|
||||||
p.bump(T![enum]);
|
p.bump(T![enum]);
|
||||||
name_r(p, ITEM_RECOVERY_SET);
|
name_r(p, ITEM_RECOVERY_SET);
|
||||||
type_params::opt_generic_param_list(p);
|
type_params::opt_generic_param_list(p);
|
||||||
@ -75,7 +72,16 @@ pub(crate) fn variant_list(p: &mut Parser) {
|
|||||||
error_block(p, "expected enum variant");
|
error_block(p, "expected enum variant");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let var = p.start();
|
variant(p);
|
||||||
|
if !p.at(T!['}']) {
|
||||||
|
p.expect(T![,]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p.expect(T!['}']);
|
||||||
|
m.complete(p, VARIANT_LIST);
|
||||||
|
|
||||||
|
fn variant(p: &mut Parser) {
|
||||||
|
let m = p.start();
|
||||||
attributes::outer_attrs(p);
|
attributes::outer_attrs(p);
|
||||||
if p.at(IDENT) {
|
if p.at(IDENT) {
|
||||||
name(p);
|
name(p);
|
||||||
@ -90,17 +96,12 @@ pub(crate) fn variant_list(p: &mut Parser) {
|
|||||||
if p.eat(T![=]) {
|
if p.eat(T![=]) {
|
||||||
expressions::expr(p);
|
expressions::expr(p);
|
||||||
}
|
}
|
||||||
var.complete(p, VARIANT);
|
m.complete(p, VARIANT);
|
||||||
} else {
|
} else {
|
||||||
var.abandon(p);
|
m.abandon(p);
|
||||||
p.err_and_bump("expected enum variant");
|
p.err_and_bump("expected enum variant");
|
||||||
}
|
}
|
||||||
if !p.at(T!['}']) {
|
|
||||||
p.expect(T![,]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
p.expect(T!['}']);
|
|
||||||
m.complete(p, VARIANT_LIST);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// test record_field_list
|
// test record_field_list
|
||||||
@ -114,7 +115,7 @@ pub(crate) fn record_field_list(p: &mut Parser) {
|
|||||||
error_block(p, "expected field");
|
error_block(p, "expected field");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
record_field_def(p);
|
record_field(p);
|
||||||
if !p.at(T!['}']) {
|
if !p.at(T!['}']) {
|
||||||
p.expect(T![,]);
|
p.expect(T![,]);
|
||||||
}
|
}
|
||||||
@ -122,13 +123,10 @@ pub(crate) fn record_field_list(p: &mut Parser) {
|
|||||||
p.expect(T!['}']);
|
p.expect(T!['}']);
|
||||||
m.complete(p, RECORD_FIELD_LIST);
|
m.complete(p, RECORD_FIELD_LIST);
|
||||||
|
|
||||||
fn record_field_def(p: &mut Parser) {
|
fn record_field(p: &mut Parser) {
|
||||||
let m = p.start();
|
let m = p.start();
|
||||||
// test record_field_attrs
|
// test record_field_attrs
|
||||||
// struct S {
|
// struct S { #[attr] f: f32 }
|
||||||
// #[serde(with = "url_serde")]
|
|
||||||
// pub uri: Uri,
|
|
||||||
// }
|
|
||||||
attributes::outer_attrs(p);
|
attributes::outer_attrs(p);
|
||||||
opt_visibility(p);
|
opt_visibility(p);
|
||||||
if p.at(IDENT) {
|
if p.at(IDENT) {
|
||||||
@ -146,20 +144,11 @@ pub(crate) fn record_field_list(p: &mut Parser) {
|
|||||||
fn tuple_field_list(p: &mut Parser) {
|
fn tuple_field_list(p: &mut Parser) {
|
||||||
assert!(p.at(T!['(']));
|
assert!(p.at(T!['(']));
|
||||||
let m = p.start();
|
let m = p.start();
|
||||||
if !p.expect(T!['(']) {
|
p.bump(T!['(']);
|
||||||
return;
|
|
||||||
}
|
|
||||||
while !p.at(T![')']) && !p.at(EOF) {
|
while !p.at(T![')']) && !p.at(EOF) {
|
||||||
let m = p.start();
|
let m = p.start();
|
||||||
// test tuple_field_attrs
|
// test tuple_field_attrs
|
||||||
// struct S (
|
// struct S (#[attr] f32);
|
||||||
// #[serde(with = "url_serde")]
|
|
||||||
// pub Uri,
|
|
||||||
// );
|
|
||||||
//
|
|
||||||
// enum S {
|
|
||||||
// Uri(#[serde(with = "url_serde")] Uri),
|
|
||||||
// }
|
|
||||||
attributes::outer_attrs(p);
|
attributes::outer_attrs(p);
|
||||||
opt_visibility(p);
|
opt_visibility(p);
|
||||||
if !p.at_ts(types::TYPE_FIRST) {
|
if !p.at_ts(types::TYPE_FIRST) {
|
||||||
|
@ -1,45 +1,33 @@
|
|||||||
SOURCE_FILE@0..64
|
SOURCE_FILE@0..28
|
||||||
STRUCT@0..63
|
STRUCT@0..27
|
||||||
STRUCT_KW@0..6 "struct"
|
STRUCT_KW@0..6 "struct"
|
||||||
WHITESPACE@6..7 " "
|
WHITESPACE@6..7 " "
|
||||||
NAME@7..8
|
NAME@7..8
|
||||||
IDENT@7..8 "S"
|
IDENT@7..8 "S"
|
||||||
WHITESPACE@8..9 " "
|
WHITESPACE@8..9 " "
|
||||||
RECORD_FIELD_LIST@9..63
|
RECORD_FIELD_LIST@9..27
|
||||||
L_CURLY@9..10 "{"
|
L_CURLY@9..10 "{"
|
||||||
WHITESPACE@10..15 "\n "
|
WHITESPACE@10..11 " "
|
||||||
RECORD_FIELD@15..60
|
RECORD_FIELD@11..25
|
||||||
ATTR@15..43
|
ATTR@11..18
|
||||||
POUND@15..16 "#"
|
POUND@11..12 "#"
|
||||||
L_BRACK@16..17 "["
|
L_BRACK@12..13 "["
|
||||||
META@17..42
|
META@13..17
|
||||||
PATH@17..22
|
PATH@13..17
|
||||||
PATH_SEGMENT@17..22
|
PATH_SEGMENT@13..17
|
||||||
NAME_REF@17..22
|
NAME_REF@13..17
|
||||||
IDENT@17..22 "serde"
|
IDENT@13..17 "attr"
|
||||||
TOKEN_TREE@22..42
|
R_BRACK@17..18 "]"
|
||||||
L_PAREN@22..23 "("
|
WHITESPACE@18..19 " "
|
||||||
IDENT@23..27 "with"
|
NAME@19..20
|
||||||
WHITESPACE@27..28 " "
|
IDENT@19..20 "f"
|
||||||
EQ@28..29 "="
|
COLON@20..21 ":"
|
||||||
WHITESPACE@29..30 " "
|
WHITESPACE@21..22 " "
|
||||||
STRING@30..41 "\"url_serde\""
|
PATH_TYPE@22..25
|
||||||
R_PAREN@41..42 ")"
|
PATH@22..25
|
||||||
R_BRACK@42..43 "]"
|
PATH_SEGMENT@22..25
|
||||||
WHITESPACE@43..48 "\n "
|
NAME_REF@22..25
|
||||||
VISIBILITY@48..51
|
IDENT@22..25 "f32"
|
||||||
PUB_KW@48..51 "pub"
|
WHITESPACE@25..26 " "
|
||||||
WHITESPACE@51..52 " "
|
R_CURLY@26..27 "}"
|
||||||
NAME@52..55
|
WHITESPACE@27..28 "\n"
|
||||||
IDENT@52..55 "uri"
|
|
||||||
COLON@55..56 ":"
|
|
||||||
WHITESPACE@56..57 " "
|
|
||||||
PATH_TYPE@57..60
|
|
||||||
PATH@57..60
|
|
||||||
PATH_SEGMENT@57..60
|
|
||||||
NAME_REF@57..60
|
|
||||||
IDENT@57..60 "Uri"
|
|
||||||
COMMA@60..61 ","
|
|
||||||
WHITESPACE@61..62 "\n"
|
|
||||||
R_CURLY@62..63 "}"
|
|
||||||
WHITESPACE@63..64 "\n"
|
|
||||||
|
@ -1,4 +1 @@
|
|||||||
struct S {
|
struct S { #[attr] f: f32 }
|
||||||
#[serde(with = "url_serde")]
|
|
||||||
pub uri: Uri,
|
|
||||||
}
|
|
||||||
|
@ -1,85 +1,28 @@
|
|||||||
SOURCE_FILE@0..115
|
SOURCE_FILE@0..24
|
||||||
STRUCT@0..59
|
STRUCT@0..23
|
||||||
STRUCT_KW@0..6 "struct"
|
STRUCT_KW@0..6 "struct"
|
||||||
WHITESPACE@6..7 " "
|
WHITESPACE@6..7 " "
|
||||||
NAME@7..8
|
NAME@7..8
|
||||||
IDENT@7..8 "S"
|
IDENT@7..8 "S"
|
||||||
WHITESPACE@8..9 " "
|
WHITESPACE@8..9 " "
|
||||||
TUPLE_FIELD_LIST@9..58
|
TUPLE_FIELD_LIST@9..22
|
||||||
L_PAREN@9..10 "("
|
L_PAREN@9..10 "("
|
||||||
WHITESPACE@10..15 "\n "
|
TUPLE_FIELD@10..21
|
||||||
TUPLE_FIELD@15..55
|
ATTR@10..17
|
||||||
ATTR@15..43
|
POUND@10..11 "#"
|
||||||
POUND@15..16 "#"
|
L_BRACK@11..12 "["
|
||||||
L_BRACK@16..17 "["
|
META@12..16
|
||||||
META@17..42
|
PATH@12..16
|
||||||
PATH@17..22
|
PATH_SEGMENT@12..16
|
||||||
PATH_SEGMENT@17..22
|
NAME_REF@12..16
|
||||||
NAME_REF@17..22
|
IDENT@12..16 "attr"
|
||||||
IDENT@17..22 "serde"
|
R_BRACK@16..17 "]"
|
||||||
TOKEN_TREE@22..42
|
WHITESPACE@17..18 " "
|
||||||
L_PAREN@22..23 "("
|
PATH_TYPE@18..21
|
||||||
IDENT@23..27 "with"
|
PATH@18..21
|
||||||
WHITESPACE@27..28 " "
|
PATH_SEGMENT@18..21
|
||||||
EQ@28..29 "="
|
NAME_REF@18..21
|
||||||
WHITESPACE@29..30 " "
|
IDENT@18..21 "f32"
|
||||||
STRING@30..41 "\"url_serde\""
|
R_PAREN@21..22 ")"
|
||||||
R_PAREN@41..42 ")"
|
SEMICOLON@22..23 ";"
|
||||||
R_BRACK@42..43 "]"
|
WHITESPACE@23..24 "\n"
|
||||||
WHITESPACE@43..48 "\n "
|
|
||||||
VISIBILITY@48..51
|
|
||||||
PUB_KW@48..51 "pub"
|
|
||||||
WHITESPACE@51..52 " "
|
|
||||||
PATH_TYPE@52..55
|
|
||||||
PATH@52..55
|
|
||||||
PATH_SEGMENT@52..55
|
|
||||||
NAME_REF@52..55
|
|
||||||
IDENT@52..55 "Uri"
|
|
||||||
COMMA@55..56 ","
|
|
||||||
WHITESPACE@56..57 "\n"
|
|
||||||
R_PAREN@57..58 ")"
|
|
||||||
SEMICOLON@58..59 ";"
|
|
||||||
WHITESPACE@59..61 "\n\n"
|
|
||||||
ENUM@61..114
|
|
||||||
ENUM_KW@61..65 "enum"
|
|
||||||
WHITESPACE@65..66 " "
|
|
||||||
NAME@66..67
|
|
||||||
IDENT@66..67 "S"
|
|
||||||
WHITESPACE@67..68 " "
|
|
||||||
VARIANT_LIST@68..114
|
|
||||||
L_CURLY@68..69 "{"
|
|
||||||
WHITESPACE@69..74 "\n "
|
|
||||||
VARIANT@74..111
|
|
||||||
NAME@74..77
|
|
||||||
IDENT@74..77 "Uri"
|
|
||||||
TUPLE_FIELD_LIST@77..111
|
|
||||||
L_PAREN@77..78 "("
|
|
||||||
TUPLE_FIELD@78..110
|
|
||||||
ATTR@78..106
|
|
||||||
POUND@78..79 "#"
|
|
||||||
L_BRACK@79..80 "["
|
|
||||||
META@80..105
|
|
||||||
PATH@80..85
|
|
||||||
PATH_SEGMENT@80..85
|
|
||||||
NAME_REF@80..85
|
|
||||||
IDENT@80..85 "serde"
|
|
||||||
TOKEN_TREE@85..105
|
|
||||||
L_PAREN@85..86 "("
|
|
||||||
IDENT@86..90 "with"
|
|
||||||
WHITESPACE@90..91 " "
|
|
||||||
EQ@91..92 "="
|
|
||||||
WHITESPACE@92..93 " "
|
|
||||||
STRING@93..104 "\"url_serde\""
|
|
||||||
R_PAREN@104..105 ")"
|
|
||||||
R_BRACK@105..106 "]"
|
|
||||||
WHITESPACE@106..107 " "
|
|
||||||
PATH_TYPE@107..110
|
|
||||||
PATH@107..110
|
|
||||||
PATH_SEGMENT@107..110
|
|
||||||
NAME_REF@107..110
|
|
||||||
IDENT@107..110 "Uri"
|
|
||||||
R_PAREN@110..111 ")"
|
|
||||||
COMMA@111..112 ","
|
|
||||||
WHITESPACE@112..113 "\n"
|
|
||||||
R_CURLY@113..114 "}"
|
|
||||||
WHITESPACE@114..115 "\n"
|
|
||||||
|
@ -1,8 +1 @@
|
|||||||
struct S (
|
struct S (#[attr] f32);
|
||||||
#[serde(with = "url_serde")]
|
|
||||||
pub Uri,
|
|
||||||
);
|
|
||||||
|
|
||||||
enum S {
|
|
||||||
Uri(#[serde(with = "url_serde")] Uri),
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user