Merge #1077
1077: Improve parsing of type bounds r=matklad a=vipentti This adds new TYPE_BOUND_LIST and TYPE_BOUND syntax kinds. These are now used when parsing type bounds. In addition parsing paths inside a bound now does not recursively parse paths, rather they are treated as separate bounds, separated by +. Basically now the generic params `struct S<T: 'a + ?Sized + (Copy)>;` in will be parsed as ``` TYPE_PARAM_LIST@[8; 33) L_ANGLE@[8; 9) TYPE_PARAM@[9; 32) NAME@[9; 10) IDENT@[9; 10) "T" COLON@[10; 11) WHITESPACE@[11; 12) TYPE_BOUND_LIST@[12; 32) TYPE_BOUND@[12; 14) LIFETIME@[12; 14) "'a" WHITESPACE@[14; 15) PLUS@[15; 16) WHITESPACE@[16; 17) TYPE_BOUND@[17; 23) QUESTION@[17; 18) PATH_TYPE@[18; 23) PATH@[18; 23) PATH_SEGMENT@[18; 23) NAME_REF@[18; 23) IDENT@[18; 23) "Sized" WHITESPACE@[23; 24) PLUS@[24; 25) WHITESPACE@[25; 26) TYPE_BOUND@[26; 32) L_PAREN@[26; 27) PATH_TYPE@[27; 31) PATH@[27; 31) PATH_SEGMENT@[27; 31) NAME_REF@[27; 31) IDENT@[27; 31) "Copy" R_PAREN@[31; 32) R_ANGLE@[32; 33) ``` Previously it was parsed, with the paths nested: ``` TYPE_PARAM_LIST@[8; 33) L_ANGLE@[8; 9) TYPE_PARAM@[9; 32) NAME@[9; 10) IDENT@[9; 10) "T" COLON@[10; 11) WHITESPACE@[11; 12) LIFETIME@[12; 14) "'a" WHITESPACE@[14; 15) PLUS@[15; 16) WHITESPACE@[16; 17) QUESTION@[17; 18) PATH_TYPE@[18; 32) PATH@[18; 23) PATH_SEGMENT@[18; 23) NAME_REF@[18; 23) IDENT@[18; 23) "Sized" WHITESPACE@[23; 24) PLUS@[24; 25) WHITESPACE@[25; 26) L_PAREN@[26; 27) PATH_TYPE@[27; 31) PATH@[27; 31) PATH_SEGMENT@[27; 31) NAME_REF@[27; 31) IDENT@[27; 31) "Copy" R_PAREN@[31; 32) R_ANGLE@[32; 33) ``` Looking for feedback. Co-authored-by: Ville Penttinen <villem.penttinen@gmail.com>
This commit is contained in:
commit
c5ca49678f
@ -2,6 +2,7 @@ use super::*;
|
||||
|
||||
// test trait_item
|
||||
// trait T<U>: Hash + Clone where U: Copy {}
|
||||
// trait X<U: Debug + Display>: Hash + Clone where U: Copy {}
|
||||
pub(super) fn trait_def(p: &mut Parser) {
|
||||
assert!(p.at(TRAIT_KW));
|
||||
p.bump();
|
||||
|
@ -79,23 +79,40 @@ fn lifetime_bounds(p: &mut Parser) {
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) fn bounds_without_colon(p: &mut Parser) {
|
||||
loop {
|
||||
let has_paren = p.eat(L_PAREN);
|
||||
p.eat(QUESTION);
|
||||
match p.current() {
|
||||
LIFETIME => p.bump(),
|
||||
FOR_KW => types::for_type(p),
|
||||
_ if paths::is_path_start(p) => types::path_type(p),
|
||||
_ => break,
|
||||
}
|
||||
if has_paren {
|
||||
p.expect(R_PAREN);
|
||||
}
|
||||
pub(super) fn bounds_without_colon_m(p: &mut Parser, marker: Marker) -> CompletedMarker {
|
||||
while type_bound(p) {
|
||||
if !p.eat(PLUS) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
marker.complete(p, TYPE_BOUND_LIST)
|
||||
}
|
||||
|
||||
pub(super) fn bounds_without_colon(p: &mut Parser) {
|
||||
let m = p.start();
|
||||
bounds_without_colon_m(p, m);
|
||||
}
|
||||
|
||||
fn type_bound(p: &mut Parser) -> bool {
|
||||
let m = p.start();
|
||||
let has_paren = p.eat(L_PAREN);
|
||||
p.eat(QUESTION);
|
||||
match p.current() {
|
||||
LIFETIME => p.bump(),
|
||||
FOR_KW => types::for_type(p),
|
||||
_ if paths::is_path_start(p) => types::path_type_(p, false),
|
||||
_ => {
|
||||
m.abandon(p);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if has_paren {
|
||||
p.expect(R_PAREN);
|
||||
}
|
||||
m.complete(p, TYPE_BOUND);
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
// test where_clause
|
||||
|
@ -261,21 +261,47 @@ fn path_or_macro_type_(p: &mut Parser, allow_bounds: bool) {
|
||||
PATH_TYPE
|
||||
};
|
||||
|
||||
if allow_bounds && p.eat(PLUS) {
|
||||
type_params::bounds_without_colon(p);
|
||||
}
|
||||
let path = m.complete(p, kind);
|
||||
|
||||
m.complete(p, kind);
|
||||
if allow_bounds {
|
||||
opt_path_type_bounds_as_dyn_trait_type(p, path);
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) fn path_type_(p: &mut Parser, allow_bounds: bool) {
|
||||
assert!(paths::is_path_start(p) || p.at(L_ANGLE));
|
||||
let m = p.start();
|
||||
paths::type_path(p);
|
||||
|
||||
// test path_type_with_bounds
|
||||
// fn foo() -> Box<T + 'f> {}
|
||||
if allow_bounds && p.eat(PLUS) {
|
||||
type_params::bounds_without_colon(p);
|
||||
// fn foo() -> Box<dyn T + 'f> {}
|
||||
let path = m.complete(p, PATH_TYPE);
|
||||
if allow_bounds {
|
||||
opt_path_type_bounds_as_dyn_trait_type(p, path);
|
||||
}
|
||||
m.complete(p, PATH_TYPE);
|
||||
}
|
||||
|
||||
/// This turns a parsed PATH_TYPE optionally into a DYN_TRAIT_TYPE
|
||||
/// with a TYPE_BOUND_LIST
|
||||
fn opt_path_type_bounds_as_dyn_trait_type(p: &mut Parser, path_type_marker: CompletedMarker) {
|
||||
if !p.at(PLUS) {
|
||||
return;
|
||||
}
|
||||
|
||||
// First create a TYPE_BOUND from the completed PATH_TYPE
|
||||
let m = path_type_marker.precede(p).complete(p, TYPE_BOUND);
|
||||
|
||||
// Next setup a marker for the TYPE_BOUND_LIST
|
||||
let m = m.precede(p);
|
||||
|
||||
// This gets consumed here so it gets properly set
|
||||
// in the TYPE_BOUND_LIST
|
||||
p.eat(PLUS);
|
||||
|
||||
// Parse rest of the bounds into the TYPE_BOUND_LIST
|
||||
let m = type_params::bounds_without_colon_m(p, m);
|
||||
|
||||
// Finally precede everything with DYN_TRAIT_TYPE
|
||||
m.precede(p).complete(p, DYN_TRAIT_TYPE);
|
||||
}
|
||||
|
@ -228,6 +228,8 @@ pub enum SyntaxKind {
|
||||
PARAM,
|
||||
SELF_PARAM,
|
||||
ARG_LIST,
|
||||
TYPE_BOUND,
|
||||
TYPE_BOUND_LIST,
|
||||
}
|
||||
use self::SyntaxKind::*;
|
||||
|
||||
@ -567,6 +569,8 @@ impl SyntaxKind {
|
||||
PARAM => &SyntaxInfo { name: "PARAM" },
|
||||
SELF_PARAM => &SyntaxInfo { name: "SELF_PARAM" },
|
||||
ARG_LIST => &SyntaxInfo { name: "ARG_LIST" },
|
||||
TYPE_BOUND => &SyntaxInfo { name: "TYPE_BOUND" },
|
||||
TYPE_BOUND_LIST => &SyntaxInfo { name: "TYPE_BOUND_LIST" },
|
||||
TOMBSTONE => &SyntaxInfo { name: "TOMBSTONE" },
|
||||
EOF => &SyntaxInfo { name: "EOF" },
|
||||
}
|
||||
|
@ -110,6 +110,12 @@ pub trait TypeParamsOwner: AstNode {
|
||||
}
|
||||
}
|
||||
|
||||
pub trait TypeBoundsOwner: AstNode {
|
||||
fn type_bound_list(&self) -> Option<&TypeBoundList> {
|
||||
child_opt(self)
|
||||
}
|
||||
}
|
||||
|
||||
pub trait AttrsOwner: AstNode {
|
||||
fn attrs(&self) -> AstChildren<Attr> {
|
||||
children(self)
|
||||
|
@ -685,6 +685,7 @@ impl ToOwned for DynTraitType {
|
||||
}
|
||||
|
||||
|
||||
impl ast::TypeBoundsOwner for DynTraitType {}
|
||||
impl DynTraitType {}
|
||||
|
||||
// EnumDef
|
||||
@ -1581,6 +1582,7 @@ impl ToOwned for ImplTraitType {
|
||||
}
|
||||
|
||||
|
||||
impl ast::TypeBoundsOwner for ImplTraitType {}
|
||||
impl ImplTraitType {}
|
||||
|
||||
// IndexExpr
|
||||
@ -4061,6 +4063,7 @@ impl ast::NameOwner for TraitDef {}
|
||||
impl ast::AttrsOwner for TraitDef {}
|
||||
impl ast::DocCommentsOwner for TraitDef {}
|
||||
impl ast::TypeParamsOwner for TraitDef {}
|
||||
impl ast::TypeBoundsOwner for TraitDef {}
|
||||
impl TraitDef {
|
||||
pub fn item_list(&self) -> Option<&ItemList> {
|
||||
super::child_opt(self)
|
||||
@ -4291,6 +4294,7 @@ impl ast::NameOwner for TypeAliasDef {}
|
||||
impl ast::TypeParamsOwner for TypeAliasDef {}
|
||||
impl ast::AttrsOwner for TypeAliasDef {}
|
||||
impl ast::DocCommentsOwner for TypeAliasDef {}
|
||||
impl ast::TypeBoundsOwner for TypeAliasDef {}
|
||||
impl TypeAliasDef {
|
||||
pub fn type_ref(&self) -> Option<&TypeRef> {
|
||||
super::child_opt(self)
|
||||
@ -4369,6 +4373,74 @@ impl TypeArgList {
|
||||
}
|
||||
}
|
||||
|
||||
// TypeBound
|
||||
#[derive(Debug, PartialEq, Eq, Hash)]
|
||||
#[repr(transparent)]
|
||||
pub struct TypeBound {
|
||||
pub(crate) syntax: SyntaxNode,
|
||||
}
|
||||
unsafe impl TransparentNewType for TypeBound {
|
||||
type Repr = rowan::SyntaxNode<RaTypes>;
|
||||
}
|
||||
|
||||
impl AstNode for TypeBound {
|
||||
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
|
||||
match syntax.kind() {
|
||||
TYPE_BOUND => Some(TypeBound::from_repr(syntax.into_repr())),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
||||
}
|
||||
|
||||
impl ToOwned for TypeBound {
|
||||
type Owned = TreeArc<TypeBound>;
|
||||
fn to_owned(&self) -> TreeArc<TypeBound> { TreeArc::cast(self.syntax.to_owned()) }
|
||||
}
|
||||
|
||||
|
||||
impl TypeBound {
|
||||
pub fn type_ref(&self) -> Option<&TypeRef> {
|
||||
super::child_opt(self)
|
||||
}
|
||||
|
||||
pub fn lifetime(&self) -> Option<&Lifetime> {
|
||||
super::child_opt(self)
|
||||
}
|
||||
}
|
||||
|
||||
// TypeBoundList
|
||||
#[derive(Debug, PartialEq, Eq, Hash)]
|
||||
#[repr(transparent)]
|
||||
pub struct TypeBoundList {
|
||||
pub(crate) syntax: SyntaxNode,
|
||||
}
|
||||
unsafe impl TransparentNewType for TypeBoundList {
|
||||
type Repr = rowan::SyntaxNode<RaTypes>;
|
||||
}
|
||||
|
||||
impl AstNode for TypeBoundList {
|
||||
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
|
||||
match syntax.kind() {
|
||||
TYPE_BOUND_LIST => Some(TypeBoundList::from_repr(syntax.into_repr())),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
||||
}
|
||||
|
||||
impl ToOwned for TypeBoundList {
|
||||
type Owned = TreeArc<TypeBoundList>;
|
||||
fn to_owned(&self) -> TreeArc<TypeBoundList> { TreeArc::cast(self.syntax.to_owned()) }
|
||||
}
|
||||
|
||||
|
||||
impl TypeBoundList {
|
||||
pub fn bounds(&self) -> impl Iterator<Item = &TypeBound> {
|
||||
super::children(self)
|
||||
}
|
||||
}
|
||||
|
||||
// TypeParam
|
||||
#[derive(Debug, PartialEq, Eq, Hash)]
|
||||
#[repr(transparent)]
|
||||
@ -4397,6 +4469,7 @@ impl ToOwned for TypeParam {
|
||||
|
||||
impl ast::NameOwner for TypeParam {}
|
||||
impl ast::AttrsOwner for TypeParam {}
|
||||
impl ast::TypeBoundsOwner for TypeParam {}
|
||||
impl TypeParam {}
|
||||
|
||||
// TypeParamList
|
||||
|
@ -243,6 +243,8 @@ Grammar(
|
||||
"PARAM",
|
||||
"SELF_PARAM",
|
||||
"ARG_LIST",
|
||||
"TYPE_BOUND",
|
||||
"TYPE_BOUND_LIST",
|
||||
],
|
||||
ast: {
|
||||
"SourceFile": (
|
||||
@ -293,7 +295,7 @@ Grammar(
|
||||
"EnumVariantList": ( collections: [["variants", "EnumVariant"]] ),
|
||||
"EnumVariant": ( traits: ["NameOwner", "DocCommentsOwner", "AttrsOwner"], options: ["Expr"] ),
|
||||
"TraitDef": (
|
||||
traits: ["VisibilityOwner", "NameOwner", "AttrsOwner", "DocCommentsOwner", "TypeParamsOwner"],
|
||||
traits: ["VisibilityOwner", "NameOwner", "AttrsOwner", "DocCommentsOwner", "TypeParamsOwner", "TypeBoundsOwner"],
|
||||
options: ["ItemList"]
|
||||
),
|
||||
"Module": (
|
||||
@ -330,7 +332,8 @@ Grammar(
|
||||
"NameOwner",
|
||||
"TypeParamsOwner",
|
||||
"AttrsOwner",
|
||||
"DocCommentsOwner"
|
||||
"DocCommentsOwner",
|
||||
"TypeBoundsOwner",
|
||||
],
|
||||
options: ["TypeRef"]
|
||||
),
|
||||
@ -347,8 +350,12 @@ Grammar(
|
||||
"PlaceholderType": (),
|
||||
"FnPointerType": (options: ["ParamList", "RetType"]),
|
||||
"ForType": (options: ["TypeRef"]),
|
||||
"ImplTraitType": (),
|
||||
"DynTraitType": (),
|
||||
"ImplTraitType": (
|
||||
traits: ["TypeBoundsOwner"],
|
||||
),
|
||||
"DynTraitType": (
|
||||
traits: ["TypeBoundsOwner"],
|
||||
),
|
||||
|
||||
"TypeRef": ( enum: [
|
||||
"ParenType",
|
||||
@ -571,12 +578,23 @@ Grammar(
|
||||
["lifetime_params", "LifetimeParam" ],
|
||||
]
|
||||
),
|
||||
"TypeParam": ( traits: ["NameOwner", "AttrsOwner"] ),
|
||||
"TypeParam": ( traits: ["NameOwner", "AttrsOwner", "TypeBoundsOwner"] ),
|
||||
"LifetimeParam": (
|
||||
options: [ "Lifetime"],
|
||||
traits: ["AttrsOwner"],
|
||||
),
|
||||
"Lifetime": ( traits: ["AstToken"] ),
|
||||
"TypeBound": (
|
||||
options: [
|
||||
"TypeRef",
|
||||
"Lifetime",
|
||||
]
|
||||
),
|
||||
"TypeBoundList": (
|
||||
collections: [
|
||||
["bounds", "TypeBound"],
|
||||
]
|
||||
),
|
||||
"WhereClause": (),
|
||||
"ExprStmt": (
|
||||
options: [ ["expr", "Expr"] ]
|
||||
|
@ -11,47 +11,51 @@ SOURCE_FILE@[0; 240)
|
||||
IDENT@[5; 6) "T"
|
||||
COLON@[6; 7)
|
||||
WHITESPACE@[7; 8)
|
||||
L_PAREN@[8; 9)
|
||||
PATH_TYPE@[9; 13)
|
||||
PATH@[9; 13)
|
||||
PATH_SEGMENT@[9; 13)
|
||||
NAME_REF@[9; 13)
|
||||
IDENT@[9; 13) "Copy"
|
||||
R_PAREN@[13; 14)
|
||||
WHITESPACE@[14; 15)
|
||||
PLUS@[15; 16)
|
||||
WHITESPACE@[16; 17)
|
||||
L_PAREN@[17; 18)
|
||||
QUESTION@[18; 19)
|
||||
PATH_TYPE@[19; 24)
|
||||
PATH@[19; 24)
|
||||
PATH_SEGMENT@[19; 24)
|
||||
NAME_REF@[19; 24)
|
||||
IDENT@[19; 24) "Sized"
|
||||
R_PAREN@[24; 25)
|
||||
WHITESPACE@[25; 26)
|
||||
PLUS@[26; 27)
|
||||
WHITESPACE@[27; 28)
|
||||
L_PAREN@[28; 29)
|
||||
FOR_TYPE@[29; 46)
|
||||
FOR_KW@[29; 32)
|
||||
TYPE_PARAM_LIST@[32; 36)
|
||||
L_ANGLE@[32; 33)
|
||||
LIFETIME_PARAM@[33; 35)
|
||||
LIFETIME@[33; 35) "'a"
|
||||
R_ANGLE@[35; 36)
|
||||
WHITESPACE@[36; 37)
|
||||
PATH_TYPE@[37; 46)
|
||||
PATH@[37; 46)
|
||||
PATH_SEGMENT@[37; 46)
|
||||
NAME_REF@[37; 42)
|
||||
IDENT@[37; 42) "Trait"
|
||||
TYPE_ARG_LIST@[42; 46)
|
||||
L_ANGLE@[42; 43)
|
||||
LIFETIME_ARG@[43; 45)
|
||||
LIFETIME@[43; 45) "'a"
|
||||
R_ANGLE@[45; 46)
|
||||
R_PAREN@[46; 47)
|
||||
TYPE_BOUND_LIST@[8; 47)
|
||||
TYPE_BOUND@[8; 14)
|
||||
L_PAREN@[8; 9)
|
||||
PATH_TYPE@[9; 13)
|
||||
PATH@[9; 13)
|
||||
PATH_SEGMENT@[9; 13)
|
||||
NAME_REF@[9; 13)
|
||||
IDENT@[9; 13) "Copy"
|
||||
R_PAREN@[13; 14)
|
||||
WHITESPACE@[14; 15)
|
||||
PLUS@[15; 16)
|
||||
WHITESPACE@[16; 17)
|
||||
TYPE_BOUND@[17; 25)
|
||||
L_PAREN@[17; 18)
|
||||
QUESTION@[18; 19)
|
||||
PATH_TYPE@[19; 24)
|
||||
PATH@[19; 24)
|
||||
PATH_SEGMENT@[19; 24)
|
||||
NAME_REF@[19; 24)
|
||||
IDENT@[19; 24) "Sized"
|
||||
R_PAREN@[24; 25)
|
||||
WHITESPACE@[25; 26)
|
||||
PLUS@[26; 27)
|
||||
WHITESPACE@[27; 28)
|
||||
TYPE_BOUND@[28; 47)
|
||||
L_PAREN@[28; 29)
|
||||
FOR_TYPE@[29; 46)
|
||||
FOR_KW@[29; 32)
|
||||
TYPE_PARAM_LIST@[32; 36)
|
||||
L_ANGLE@[32; 33)
|
||||
LIFETIME_PARAM@[33; 35)
|
||||
LIFETIME@[33; 35) "'a"
|
||||
R_ANGLE@[35; 36)
|
||||
WHITESPACE@[36; 37)
|
||||
PATH_TYPE@[37; 46)
|
||||
PATH@[37; 46)
|
||||
PATH_SEGMENT@[37; 46)
|
||||
NAME_REF@[37; 42)
|
||||
IDENT@[37; 42) "Trait"
|
||||
TYPE_ARG_LIST@[42; 46)
|
||||
L_ANGLE@[42; 43)
|
||||
LIFETIME_ARG@[43; 45)
|
||||
LIFETIME@[43; 45) "'a"
|
||||
R_ANGLE@[45; 46)
|
||||
R_PAREN@[46; 47)
|
||||
R_ANGLE@[47; 48)
|
||||
PARAM_LIST@[48; 50)
|
||||
L_PAREN@[48; 49)
|
||||
@ -80,60 +84,65 @@ SOURCE_FILE@[0; 240)
|
||||
UNDERSCORE@[75; 76)
|
||||
COLON@[76; 77)
|
||||
WHITESPACE@[77; 78)
|
||||
PATH_TYPE@[78; 121)
|
||||
PATH@[78; 88)
|
||||
PATH_SEGMENT@[78; 88)
|
||||
NAME_REF@[78; 81)
|
||||
IDENT@[78; 81) "Box"
|
||||
TYPE_ARG_LIST@[81; 88)
|
||||
L_ANGLE@[81; 82)
|
||||
TYPE_ARG@[82; 88)
|
||||
PAREN_TYPE@[82; 88)
|
||||
L_PAREN@[82; 83)
|
||||
PATH_TYPE@[83; 87)
|
||||
PATH@[83; 87)
|
||||
PATH_SEGMENT@[83; 87)
|
||||
NAME_REF@[83; 87)
|
||||
IDENT@[83; 87) "Copy"
|
||||
R_PAREN@[87; 88)
|
||||
err: `expected COMMA`
|
||||
err: `expected R_ANGLE`
|
||||
WHITESPACE@[88; 89)
|
||||
PLUS@[89; 90)
|
||||
WHITESPACE@[90; 91)
|
||||
L_PAREN@[91; 92)
|
||||
QUESTION@[92; 93)
|
||||
PATH_TYPE@[93; 98)
|
||||
PATH@[93; 98)
|
||||
PATH_SEGMENT@[93; 98)
|
||||
NAME_REF@[93; 98)
|
||||
IDENT@[93; 98) "Sized"
|
||||
R_PAREN@[98; 99)
|
||||
WHITESPACE@[99; 100)
|
||||
PLUS@[100; 101)
|
||||
WHITESPACE@[101; 102)
|
||||
L_PAREN@[102; 103)
|
||||
FOR_TYPE@[103; 120)
|
||||
FOR_KW@[103; 106)
|
||||
TYPE_PARAM_LIST@[106; 110)
|
||||
L_ANGLE@[106; 107)
|
||||
LIFETIME_PARAM@[107; 109)
|
||||
LIFETIME@[107; 109) "'a"
|
||||
R_ANGLE@[109; 110)
|
||||
WHITESPACE@[110; 111)
|
||||
PATH_TYPE@[111; 120)
|
||||
PATH@[111; 120)
|
||||
PATH_SEGMENT@[111; 120)
|
||||
NAME_REF@[111; 116)
|
||||
IDENT@[111; 116) "Trait"
|
||||
TYPE_ARG_LIST@[116; 120)
|
||||
L_ANGLE@[116; 117)
|
||||
LIFETIME_ARG@[117; 119)
|
||||
LIFETIME@[117; 119) "'a"
|
||||
R_ANGLE@[119; 120)
|
||||
R_PAREN@[120; 121)
|
||||
err: `expected SEMI`
|
||||
err: `expected expression`
|
||||
DYN_TRAIT_TYPE@[78; 121)
|
||||
TYPE_BOUND_LIST@[78; 121)
|
||||
TYPE_BOUND@[78; 88)
|
||||
PATH_TYPE@[78; 88)
|
||||
PATH@[78; 88)
|
||||
PATH_SEGMENT@[78; 88)
|
||||
NAME_REF@[78; 81)
|
||||
IDENT@[78; 81) "Box"
|
||||
TYPE_ARG_LIST@[81; 88)
|
||||
L_ANGLE@[81; 82)
|
||||
TYPE_ARG@[82; 88)
|
||||
PAREN_TYPE@[82; 88)
|
||||
L_PAREN@[82; 83)
|
||||
PATH_TYPE@[83; 87)
|
||||
PATH@[83; 87)
|
||||
PATH_SEGMENT@[83; 87)
|
||||
NAME_REF@[83; 87)
|
||||
IDENT@[83; 87) "Copy"
|
||||
R_PAREN@[87; 88)
|
||||
err: `expected COMMA`
|
||||
err: `expected R_ANGLE`
|
||||
WHITESPACE@[88; 89)
|
||||
PLUS@[89; 90)
|
||||
WHITESPACE@[90; 91)
|
||||
TYPE_BOUND@[91; 99)
|
||||
L_PAREN@[91; 92)
|
||||
QUESTION@[92; 93)
|
||||
PATH_TYPE@[93; 98)
|
||||
PATH@[93; 98)
|
||||
PATH_SEGMENT@[93; 98)
|
||||
NAME_REF@[93; 98)
|
||||
IDENT@[93; 98) "Sized"
|
||||
R_PAREN@[98; 99)
|
||||
WHITESPACE@[99; 100)
|
||||
PLUS@[100; 101)
|
||||
WHITESPACE@[101; 102)
|
||||
TYPE_BOUND@[102; 121)
|
||||
L_PAREN@[102; 103)
|
||||
FOR_TYPE@[103; 120)
|
||||
FOR_KW@[103; 106)
|
||||
TYPE_PARAM_LIST@[106; 110)
|
||||
L_ANGLE@[106; 107)
|
||||
LIFETIME_PARAM@[107; 109)
|
||||
LIFETIME@[107; 109) "'a"
|
||||
R_ANGLE@[109; 110)
|
||||
WHITESPACE@[110; 111)
|
||||
PATH_TYPE@[111; 120)
|
||||
PATH@[111; 120)
|
||||
PATH_SEGMENT@[111; 120)
|
||||
NAME_REF@[111; 116)
|
||||
IDENT@[111; 116) "Trait"
|
||||
TYPE_ARG_LIST@[116; 120)
|
||||
L_ANGLE@[116; 117)
|
||||
LIFETIME_ARG@[117; 119)
|
||||
LIFETIME@[117; 119) "'a"
|
||||
R_ANGLE@[119; 120)
|
||||
R_PAREN@[120; 121)
|
||||
err: `expected SEMI`
|
||||
err: `expected expression`
|
||||
EXPR_STMT@[121; 123)
|
||||
ERROR@[121; 122)
|
||||
R_ANGLE@[121; 122)
|
||||
@ -247,60 +256,65 @@ SOURCE_FILE@[0; 240)
|
||||
UNDERSCORE@[189; 190)
|
||||
COLON@[190; 191)
|
||||
WHITESPACE@[191; 192)
|
||||
PATH_TYPE@[192; 235)
|
||||
PATH@[192; 215)
|
||||
PATH_SEGMENT@[192; 215)
|
||||
NAME_REF@[192; 195)
|
||||
IDENT@[192; 195) "Box"
|
||||
TYPE_ARG_LIST@[195; 215)
|
||||
L_ANGLE@[195; 196)
|
||||
TYPE_ARG@[196; 215)
|
||||
PAREN_TYPE@[196; 215)
|
||||
L_PAREN@[196; 197)
|
||||
FOR_TYPE@[197; 214)
|
||||
FOR_KW@[197; 200)
|
||||
TYPE_PARAM_LIST@[200; 204)
|
||||
L_ANGLE@[200; 201)
|
||||
LIFETIME_PARAM@[201; 203)
|
||||
LIFETIME@[201; 203) "'a"
|
||||
R_ANGLE@[203; 204)
|
||||
WHITESPACE@[204; 205)
|
||||
PATH_TYPE@[205; 214)
|
||||
PATH@[205; 214)
|
||||
PATH_SEGMENT@[205; 214)
|
||||
NAME_REF@[205; 210)
|
||||
IDENT@[205; 210) "Trait"
|
||||
TYPE_ARG_LIST@[210; 214)
|
||||
L_ANGLE@[210; 211)
|
||||
LIFETIME_ARG@[211; 213)
|
||||
LIFETIME@[211; 213) "'a"
|
||||
R_ANGLE@[213; 214)
|
||||
R_PAREN@[214; 215)
|
||||
err: `expected COMMA`
|
||||
err: `expected R_ANGLE`
|
||||
WHITESPACE@[215; 216)
|
||||
PLUS@[216; 217)
|
||||
WHITESPACE@[217; 218)
|
||||
L_PAREN@[218; 219)
|
||||
PATH_TYPE@[219; 223)
|
||||
PATH@[219; 223)
|
||||
PATH_SEGMENT@[219; 223)
|
||||
NAME_REF@[219; 223)
|
||||
IDENT@[219; 223) "Copy"
|
||||
R_PAREN@[223; 224)
|
||||
WHITESPACE@[224; 225)
|
||||
PLUS@[225; 226)
|
||||
WHITESPACE@[226; 227)
|
||||
L_PAREN@[227; 228)
|
||||
QUESTION@[228; 229)
|
||||
PATH_TYPE@[229; 234)
|
||||
PATH@[229; 234)
|
||||
PATH_SEGMENT@[229; 234)
|
||||
NAME_REF@[229; 234)
|
||||
IDENT@[229; 234) "Sized"
|
||||
R_PAREN@[234; 235)
|
||||
err: `expected SEMI`
|
||||
err: `expected expression`
|
||||
DYN_TRAIT_TYPE@[192; 235)
|
||||
TYPE_BOUND_LIST@[192; 235)
|
||||
TYPE_BOUND@[192; 215)
|
||||
PATH_TYPE@[192; 215)
|
||||
PATH@[192; 215)
|
||||
PATH_SEGMENT@[192; 215)
|
||||
NAME_REF@[192; 195)
|
||||
IDENT@[192; 195) "Box"
|
||||
TYPE_ARG_LIST@[195; 215)
|
||||
L_ANGLE@[195; 196)
|
||||
TYPE_ARG@[196; 215)
|
||||
PAREN_TYPE@[196; 215)
|
||||
L_PAREN@[196; 197)
|
||||
FOR_TYPE@[197; 214)
|
||||
FOR_KW@[197; 200)
|
||||
TYPE_PARAM_LIST@[200; 204)
|
||||
L_ANGLE@[200; 201)
|
||||
LIFETIME_PARAM@[201; 203)
|
||||
LIFETIME@[201; 203) "'a"
|
||||
R_ANGLE@[203; 204)
|
||||
WHITESPACE@[204; 205)
|
||||
PATH_TYPE@[205; 214)
|
||||
PATH@[205; 214)
|
||||
PATH_SEGMENT@[205; 214)
|
||||
NAME_REF@[205; 210)
|
||||
IDENT@[205; 210) "Trait"
|
||||
TYPE_ARG_LIST@[210; 214)
|
||||
L_ANGLE@[210; 211)
|
||||
LIFETIME_ARG@[211; 213)
|
||||
LIFETIME@[211; 213) "'a"
|
||||
R_ANGLE@[213; 214)
|
||||
R_PAREN@[214; 215)
|
||||
err: `expected COMMA`
|
||||
err: `expected R_ANGLE`
|
||||
WHITESPACE@[215; 216)
|
||||
PLUS@[216; 217)
|
||||
WHITESPACE@[217; 218)
|
||||
TYPE_BOUND@[218; 224)
|
||||
L_PAREN@[218; 219)
|
||||
PATH_TYPE@[219; 223)
|
||||
PATH@[219; 223)
|
||||
PATH_SEGMENT@[219; 223)
|
||||
NAME_REF@[219; 223)
|
||||
IDENT@[219; 223) "Copy"
|
||||
R_PAREN@[223; 224)
|
||||
WHITESPACE@[224; 225)
|
||||
PLUS@[225; 226)
|
||||
WHITESPACE@[226; 227)
|
||||
TYPE_BOUND@[227; 235)
|
||||
L_PAREN@[227; 228)
|
||||
QUESTION@[228; 229)
|
||||
PATH_TYPE@[229; 234)
|
||||
PATH@[229; 234)
|
||||
PATH_SEGMENT@[229; 234)
|
||||
NAME_REF@[229; 234)
|
||||
IDENT@[229; 234) "Sized"
|
||||
R_PAREN@[234; 235)
|
||||
err: `expected SEMI`
|
||||
err: `expected expression`
|
||||
EXPR_STMT@[235; 237)
|
||||
ERROR@[235; 236)
|
||||
R_ANGLE@[235; 236)
|
||||
|
@ -8,11 +8,13 @@ SOURCE_FILE@[0; 38)
|
||||
IDENT@[5; 6) "T"
|
||||
COLON@[6; 7)
|
||||
WHITESPACE@[7; 8)
|
||||
PATH_TYPE@[8; 13)
|
||||
PATH@[8; 13)
|
||||
PATH_SEGMENT@[8; 13)
|
||||
NAME_REF@[8; 13)
|
||||
IDENT@[8; 13) "Clone"
|
||||
TYPE_BOUND_LIST@[8; 13)
|
||||
TYPE_BOUND@[8; 13)
|
||||
PATH_TYPE@[8; 13)
|
||||
PATH@[8; 13)
|
||||
PATH_SEGMENT@[8; 13)
|
||||
NAME_REF@[8; 13)
|
||||
IDENT@[8; 13) "Clone"
|
||||
R_ANGLE@[13; 14)
|
||||
err: `expected trait or type`
|
||||
err: `expected `{``
|
||||
|
@ -18,11 +18,13 @@ SOURCE_FILE@[0; 83)
|
||||
IDENT@[18; 19) "A"
|
||||
COLON@[19; 20)
|
||||
WHITESPACE@[20; 21)
|
||||
PATH_TYPE@[21; 26)
|
||||
PATH@[21; 26)
|
||||
PATH_SEGMENT@[21; 26)
|
||||
NAME_REF@[21; 26)
|
||||
IDENT@[21; 26) "Clone"
|
||||
TYPE_BOUND_LIST@[21; 26)
|
||||
TYPE_BOUND@[21; 26)
|
||||
PATH_TYPE@[21; 26)
|
||||
PATH@[21; 26)
|
||||
PATH_SEGMENT@[21; 26)
|
||||
NAME_REF@[21; 26)
|
||||
IDENT@[21; 26) "Clone"
|
||||
SEMI@[26; 27)
|
||||
WHITESPACE@[27; 32)
|
||||
CONST_DEF@[32; 45)
|
||||
|
@ -33,24 +33,26 @@ SOURCE_FILE@[0; 49)
|
||||
IDENT@[30; 31) "F"
|
||||
COLON@[31; 32)
|
||||
WHITESPACE@[32; 33)
|
||||
PATH_TYPE@[33; 44)
|
||||
PATH@[33; 44)
|
||||
PATH_SEGMENT@[33; 44)
|
||||
NAME_REF@[33; 35)
|
||||
IDENT@[33; 35) "Fn"
|
||||
PARAM_LIST@[35; 44)
|
||||
L_PAREN@[35; 36)
|
||||
PARAM@[36; 43)
|
||||
REFERENCE_TYPE@[36; 43)
|
||||
AMP@[36; 37)
|
||||
LIFETIME@[37; 39) "'a"
|
||||
WHITESPACE@[39; 40)
|
||||
PATH_TYPE@[40; 43)
|
||||
PATH@[40; 43)
|
||||
PATH_SEGMENT@[40; 43)
|
||||
NAME_REF@[40; 43)
|
||||
IDENT@[40; 43) "str"
|
||||
R_PAREN@[43; 44)
|
||||
TYPE_BOUND_LIST@[33; 44)
|
||||
TYPE_BOUND@[33; 44)
|
||||
PATH_TYPE@[33; 44)
|
||||
PATH@[33; 44)
|
||||
PATH_SEGMENT@[33; 44)
|
||||
NAME_REF@[33; 35)
|
||||
IDENT@[33; 35) "Fn"
|
||||
PARAM_LIST@[35; 44)
|
||||
L_PAREN@[35; 36)
|
||||
PARAM@[36; 43)
|
||||
REFERENCE_TYPE@[36; 43)
|
||||
AMP@[36; 37)
|
||||
LIFETIME@[37; 39) "'a"
|
||||
WHITESPACE@[39; 40)
|
||||
PATH_TYPE@[40; 43)
|
||||
PATH@[40; 43)
|
||||
PATH_SEGMENT@[40; 43)
|
||||
NAME_REF@[40; 43)
|
||||
IDENT@[40; 43) "str"
|
||||
R_PAREN@[43; 44)
|
||||
WHITESPACE@[44; 45)
|
||||
BLOCK@[45; 48)
|
||||
L_CURLY@[45; 46)
|
||||
|
@ -11,19 +11,22 @@ SOURCE_FILE@[0; 28)
|
||||
IDENT@[7; 8) "T"
|
||||
COLON@[8; 9)
|
||||
WHITESPACE@[9; 10)
|
||||
PATH_TYPE@[10; 22)
|
||||
PATH@[10; 15)
|
||||
PATH_SEGMENT@[10; 15)
|
||||
NAME_REF@[10; 15)
|
||||
IDENT@[10; 15) "Clone"
|
||||
TYPE_BOUND_LIST@[10; 22)
|
||||
TYPE_BOUND@[10; 15)
|
||||
PATH_TYPE@[10; 15)
|
||||
PATH@[10; 15)
|
||||
PATH_SEGMENT@[10; 15)
|
||||
NAME_REF@[10; 15)
|
||||
IDENT@[10; 15) "Clone"
|
||||
WHITESPACE@[15; 16)
|
||||
PLUS@[16; 17)
|
||||
WHITESPACE@[17; 18)
|
||||
PATH_TYPE@[18; 22)
|
||||
PATH@[18; 22)
|
||||
PATH_SEGMENT@[18; 22)
|
||||
NAME_REF@[18; 22)
|
||||
IDENT@[18; 22) "Copy"
|
||||
TYPE_BOUND@[18; 22)
|
||||
PATH_TYPE@[18; 22)
|
||||
PATH@[18; 22)
|
||||
PATH_SEGMENT@[18; 22)
|
||||
NAME_REF@[18; 22)
|
||||
IDENT@[18; 22) "Copy"
|
||||
R_ANGLE@[22; 23)
|
||||
PARAM_LIST@[23; 25)
|
||||
L_PAREN@[23; 24)
|
||||
|
@ -11,26 +11,30 @@ SOURCE_FILE@[0; 35)
|
||||
IDENT@[9; 10) "T"
|
||||
COLON@[10; 11)
|
||||
WHITESPACE@[11; 12)
|
||||
LIFETIME@[12; 14) "'a"
|
||||
WHITESPACE@[14; 15)
|
||||
PLUS@[15; 16)
|
||||
WHITESPACE@[16; 17)
|
||||
QUESTION@[17; 18)
|
||||
PATH_TYPE@[18; 32)
|
||||
PATH@[18; 23)
|
||||
PATH_SEGMENT@[18; 23)
|
||||
NAME_REF@[18; 23)
|
||||
IDENT@[18; 23) "Sized"
|
||||
TYPE_BOUND_LIST@[12; 32)
|
||||
TYPE_BOUND@[12; 14)
|
||||
LIFETIME@[12; 14) "'a"
|
||||
WHITESPACE@[14; 15)
|
||||
PLUS@[15; 16)
|
||||
WHITESPACE@[16; 17)
|
||||
TYPE_BOUND@[17; 23)
|
||||
QUESTION@[17; 18)
|
||||
PATH_TYPE@[18; 23)
|
||||
PATH@[18; 23)
|
||||
PATH_SEGMENT@[18; 23)
|
||||
NAME_REF@[18; 23)
|
||||
IDENT@[18; 23) "Sized"
|
||||
WHITESPACE@[23; 24)
|
||||
PLUS@[24; 25)
|
||||
WHITESPACE@[25; 26)
|
||||
L_PAREN@[26; 27)
|
||||
PATH_TYPE@[27; 31)
|
||||
PATH@[27; 31)
|
||||
PATH_SEGMENT@[27; 31)
|
||||
NAME_REF@[27; 31)
|
||||
IDENT@[27; 31) "Copy"
|
||||
R_PAREN@[31; 32)
|
||||
TYPE_BOUND@[26; 32)
|
||||
L_PAREN@[26; 27)
|
||||
PATH_TYPE@[27; 31)
|
||||
PATH@[27; 31)
|
||||
PATH_SEGMENT@[27; 31)
|
||||
NAME_REF@[27; 31)
|
||||
IDENT@[27; 31) "Copy"
|
||||
R_PAREN@[31; 32)
|
||||
R_ANGLE@[32; 33)
|
||||
SEMI@[33; 34)
|
||||
WHITESPACE@[34; 35)
|
||||
|
@ -16,11 +16,13 @@ SOURCE_FILE@[0; 31)
|
||||
IDENT@[15; 18) "Foo"
|
||||
COLON@[18; 19)
|
||||
WHITESPACE@[19; 20)
|
||||
PATH_TYPE@[20; 24)
|
||||
PATH@[20; 24)
|
||||
PATH_SEGMENT@[20; 24)
|
||||
NAME_REF@[20; 24)
|
||||
IDENT@[20; 24) "Copy"
|
||||
TYPE_BOUND_LIST@[20; 24)
|
||||
TYPE_BOUND@[20; 24)
|
||||
PATH_TYPE@[20; 24)
|
||||
PATH@[20; 24)
|
||||
PATH_SEGMENT@[20; 24)
|
||||
NAME_REF@[20; 24)
|
||||
IDENT@[20; 24) "Copy"
|
||||
WHITESPACE@[24; 25)
|
||||
EQ@[25; 26)
|
||||
WHITESPACE@[26; 27)
|
||||
|
@ -10,31 +10,34 @@ SOURCE_FILE@[0; 43)
|
||||
IMPL_TRAIT_TYPE@[9; 41)
|
||||
IMPL_KW@[9; 13)
|
||||
WHITESPACE@[13; 14)
|
||||
PATH_TYPE@[14; 41)
|
||||
PATH@[14; 36)
|
||||
PATH_SEGMENT@[14; 36)
|
||||
NAME_REF@[14; 22)
|
||||
IDENT@[14; 22) "Iterator"
|
||||
TYPE_ARG_LIST@[22; 36)
|
||||
L_ANGLE@[22; 23)
|
||||
ASSOC_TYPE_ARG@[23; 35)
|
||||
NAME_REF@[23; 27)
|
||||
IDENT@[23; 27) "Item"
|
||||
EQ@[27; 28)
|
||||
PATH_TYPE@[28; 35)
|
||||
PATH@[28; 35)
|
||||
PATH_SEGMENT@[28; 35)
|
||||
NAME_REF@[28; 31)
|
||||
IDENT@[28; 31) "Foo"
|
||||
TYPE_ARG_LIST@[31; 35)
|
||||
L_ANGLE@[31; 32)
|
||||
LIFETIME_ARG@[32; 34)
|
||||
LIFETIME@[32; 34) "'a"
|
||||
R_ANGLE@[34; 35)
|
||||
R_ANGLE@[35; 36)
|
||||
TYPE_BOUND_LIST@[14; 41)
|
||||
TYPE_BOUND@[14; 36)
|
||||
PATH_TYPE@[14; 36)
|
||||
PATH@[14; 36)
|
||||
PATH_SEGMENT@[14; 36)
|
||||
NAME_REF@[14; 22)
|
||||
IDENT@[14; 22) "Iterator"
|
||||
TYPE_ARG_LIST@[22; 36)
|
||||
L_ANGLE@[22; 23)
|
||||
ASSOC_TYPE_ARG@[23; 35)
|
||||
NAME_REF@[23; 27)
|
||||
IDENT@[23; 27) "Item"
|
||||
EQ@[27; 28)
|
||||
PATH_TYPE@[28; 35)
|
||||
PATH@[28; 35)
|
||||
PATH_SEGMENT@[28; 35)
|
||||
NAME_REF@[28; 31)
|
||||
IDENT@[28; 31) "Foo"
|
||||
TYPE_ARG_LIST@[31; 35)
|
||||
L_ANGLE@[31; 32)
|
||||
LIFETIME_ARG@[32; 34)
|
||||
LIFETIME@[32; 34) "'a"
|
||||
R_ANGLE@[34; 35)
|
||||
R_ANGLE@[35; 36)
|
||||
WHITESPACE@[36; 37)
|
||||
PLUS@[37; 38)
|
||||
WHITESPACE@[38; 39)
|
||||
LIFETIME@[39; 41) "'a"
|
||||
TYPE_BOUND@[39; 41)
|
||||
LIFETIME@[39; 41) "'a"
|
||||
SEMI@[41; 42)
|
||||
WHITESPACE@[42; 43)
|
||||
|
@ -1 +1,2 @@
|
||||
trait T<U>: Hash + Clone where U: Copy {}
|
||||
trait X<U: Debug + Display>: Hash + Clone where U: Copy {}
|
||||
|
@ -1,4 +1,4 @@
|
||||
SOURCE_FILE@[0; 42)
|
||||
SOURCE_FILE@[0; 101)
|
||||
TRAIT_DEF@[0; 41)
|
||||
TRAIT_KW@[0; 5)
|
||||
WHITESPACE@[5; 6)
|
||||
@ -12,19 +12,22 @@ SOURCE_FILE@[0; 42)
|
||||
R_ANGLE@[9; 10)
|
||||
COLON@[10; 11)
|
||||
WHITESPACE@[11; 12)
|
||||
PATH_TYPE@[12; 24)
|
||||
PATH@[12; 16)
|
||||
PATH_SEGMENT@[12; 16)
|
||||
NAME_REF@[12; 16)
|
||||
IDENT@[12; 16) "Hash"
|
||||
TYPE_BOUND_LIST@[12; 24)
|
||||
TYPE_BOUND@[12; 16)
|
||||
PATH_TYPE@[12; 16)
|
||||
PATH@[12; 16)
|
||||
PATH_SEGMENT@[12; 16)
|
||||
NAME_REF@[12; 16)
|
||||
IDENT@[12; 16) "Hash"
|
||||
WHITESPACE@[16; 17)
|
||||
PLUS@[17; 18)
|
||||
WHITESPACE@[18; 19)
|
||||
PATH_TYPE@[19; 24)
|
||||
PATH@[19; 24)
|
||||
PATH_SEGMENT@[19; 24)
|
||||
NAME_REF@[19; 24)
|
||||
IDENT@[19; 24) "Clone"
|
||||
TYPE_BOUND@[19; 24)
|
||||
PATH_TYPE@[19; 24)
|
||||
PATH@[19; 24)
|
||||
PATH_SEGMENT@[19; 24)
|
||||
NAME_REF@[19; 24)
|
||||
IDENT@[19; 24) "Clone"
|
||||
WHITESPACE@[24; 25)
|
||||
WHERE_CLAUSE@[25; 38)
|
||||
WHERE_KW@[25; 30)
|
||||
@ -37,13 +40,86 @@ SOURCE_FILE@[0; 42)
|
||||
IDENT@[31; 32) "U"
|
||||
COLON@[32; 33)
|
||||
WHITESPACE@[33; 34)
|
||||
PATH_TYPE@[34; 38)
|
||||
PATH@[34; 38)
|
||||
PATH_SEGMENT@[34; 38)
|
||||
NAME_REF@[34; 38)
|
||||
IDENT@[34; 38) "Copy"
|
||||
TYPE_BOUND_LIST@[34; 38)
|
||||
TYPE_BOUND@[34; 38)
|
||||
PATH_TYPE@[34; 38)
|
||||
PATH@[34; 38)
|
||||
PATH_SEGMENT@[34; 38)
|
||||
NAME_REF@[34; 38)
|
||||
IDENT@[34; 38) "Copy"
|
||||
WHITESPACE@[38; 39)
|
||||
ITEM_LIST@[39; 41)
|
||||
L_CURLY@[39; 40)
|
||||
R_CURLY@[40; 41)
|
||||
WHITESPACE@[41; 42)
|
||||
TRAIT_DEF@[42; 100)
|
||||
TRAIT_KW@[42; 47)
|
||||
WHITESPACE@[47; 48)
|
||||
NAME@[48; 49)
|
||||
IDENT@[48; 49) "X"
|
||||
TYPE_PARAM_LIST@[49; 69)
|
||||
L_ANGLE@[49; 50)
|
||||
TYPE_PARAM@[50; 68)
|
||||
NAME@[50; 51)
|
||||
IDENT@[50; 51) "U"
|
||||
COLON@[51; 52)
|
||||
WHITESPACE@[52; 53)
|
||||
TYPE_BOUND_LIST@[53; 68)
|
||||
TYPE_BOUND@[53; 58)
|
||||
PATH_TYPE@[53; 58)
|
||||
PATH@[53; 58)
|
||||
PATH_SEGMENT@[53; 58)
|
||||
NAME_REF@[53; 58)
|
||||
IDENT@[53; 58) "Debug"
|
||||
WHITESPACE@[58; 59)
|
||||
PLUS@[59; 60)
|
||||
WHITESPACE@[60; 61)
|
||||
TYPE_BOUND@[61; 68)
|
||||
PATH_TYPE@[61; 68)
|
||||
PATH@[61; 68)
|
||||
PATH_SEGMENT@[61; 68)
|
||||
NAME_REF@[61; 68)
|
||||
IDENT@[61; 68) "Display"
|
||||
R_ANGLE@[68; 69)
|
||||
COLON@[69; 70)
|
||||
WHITESPACE@[70; 71)
|
||||
TYPE_BOUND_LIST@[71; 83)
|
||||
TYPE_BOUND@[71; 75)
|
||||
PATH_TYPE@[71; 75)
|
||||
PATH@[71; 75)
|
||||
PATH_SEGMENT@[71; 75)
|
||||
NAME_REF@[71; 75)
|
||||
IDENT@[71; 75) "Hash"
|
||||
WHITESPACE@[75; 76)
|
||||
PLUS@[76; 77)
|
||||
WHITESPACE@[77; 78)
|
||||
TYPE_BOUND@[78; 83)
|
||||
PATH_TYPE@[78; 83)
|
||||
PATH@[78; 83)
|
||||
PATH_SEGMENT@[78; 83)
|
||||
NAME_REF@[78; 83)
|
||||
IDENT@[78; 83) "Clone"
|
||||
WHITESPACE@[83; 84)
|
||||
WHERE_CLAUSE@[84; 97)
|
||||
WHERE_KW@[84; 89)
|
||||
WHITESPACE@[89; 90)
|
||||
WHERE_PRED@[90; 97)
|
||||
PATH_TYPE@[90; 91)
|
||||
PATH@[90; 91)
|
||||
PATH_SEGMENT@[90; 91)
|
||||
NAME_REF@[90; 91)
|
||||
IDENT@[90; 91) "U"
|
||||
COLON@[91; 92)
|
||||
WHITESPACE@[92; 93)
|
||||
TYPE_BOUND_LIST@[93; 97)
|
||||
TYPE_BOUND@[93; 97)
|
||||
PATH_TYPE@[93; 97)
|
||||
PATH@[93; 97)
|
||||
PATH_SEGMENT@[93; 97)
|
||||
NAME_REF@[93; 97)
|
||||
IDENT@[93; 97) "Copy"
|
||||
WHITESPACE@[97; 98)
|
||||
ITEM_LIST@[98; 100)
|
||||
L_CURLY@[98; 99)
|
||||
R_CURLY@[99; 100)
|
||||
WHITESPACE@[100; 101)
|
||||
|
@ -11,29 +11,31 @@ SOURCE_FILE@[0; 35)
|
||||
IDENT@[7; 8) "F"
|
||||
COLON@[8; 9)
|
||||
WHITESPACE@[9; 10)
|
||||
PATH_TYPE@[10; 29)
|
||||
PATH@[10; 29)
|
||||
PATH_SEGMENT@[10; 29)
|
||||
NAME_REF@[10; 15)
|
||||
IDENT@[10; 15) "FnMut"
|
||||
PARAM_LIST@[15; 29)
|
||||
L_PAREN@[15; 16)
|
||||
PARAM@[16; 28)
|
||||
REFERENCE_TYPE@[16; 28)
|
||||
AMP@[16; 17)
|
||||
MUT_KW@[17; 20)
|
||||
WHITESPACE@[20; 21)
|
||||
PATH_TYPE@[21; 28)
|
||||
PATH@[21; 28)
|
||||
PATH_SEGMENT@[21; 28)
|
||||
NAME_REF@[21; 24)
|
||||
IDENT@[21; 24) "Foo"
|
||||
TYPE_ARG_LIST@[24; 28)
|
||||
L_ANGLE@[24; 25)
|
||||
LIFETIME_ARG@[25; 27)
|
||||
LIFETIME@[25; 27) "'a"
|
||||
R_ANGLE@[27; 28)
|
||||
R_PAREN@[28; 29)
|
||||
TYPE_BOUND_LIST@[10; 29)
|
||||
TYPE_BOUND@[10; 29)
|
||||
PATH_TYPE@[10; 29)
|
||||
PATH@[10; 29)
|
||||
PATH_SEGMENT@[10; 29)
|
||||
NAME_REF@[10; 15)
|
||||
IDENT@[10; 15) "FnMut"
|
||||
PARAM_LIST@[15; 29)
|
||||
L_PAREN@[15; 16)
|
||||
PARAM@[16; 28)
|
||||
REFERENCE_TYPE@[16; 28)
|
||||
AMP@[16; 17)
|
||||
MUT_KW@[17; 20)
|
||||
WHITESPACE@[20; 21)
|
||||
PATH_TYPE@[21; 28)
|
||||
PATH@[21; 28)
|
||||
PATH_SEGMENT@[21; 28)
|
||||
NAME_REF@[21; 24)
|
||||
IDENT@[21; 24) "Foo"
|
||||
TYPE_ARG_LIST@[24; 28)
|
||||
L_ANGLE@[24; 25)
|
||||
LIFETIME_ARG@[25; 27)
|
||||
LIFETIME@[25; 27) "'a"
|
||||
R_ANGLE@[27; 28)
|
||||
R_PAREN@[28; 29)
|
||||
R_ANGLE@[29; 30)
|
||||
PARAM_LIST@[30; 32)
|
||||
L_PAREN@[30; 31)
|
||||
|
@ -1 +1,2 @@
|
||||
fn foo() -> Box<T + 'f> {}
|
||||
fn foo() -> Box<dyn T + 'f> {}
|
||||
|
@ -1,4 +1,4 @@
|
||||
SOURCE_FILE@[0; 27)
|
||||
SOURCE_FILE@[0; 58)
|
||||
FN_DEF@[0; 26)
|
||||
FN_KW@[0; 2)
|
||||
WHITESPACE@[2; 3)
|
||||
@ -19,18 +19,63 @@ SOURCE_FILE@[0; 27)
|
||||
TYPE_ARG_LIST@[15; 23)
|
||||
L_ANGLE@[15; 16)
|
||||
TYPE_ARG@[16; 22)
|
||||
PATH_TYPE@[16; 22)
|
||||
PATH@[16; 17)
|
||||
PATH_SEGMENT@[16; 17)
|
||||
NAME_REF@[16; 17)
|
||||
IDENT@[16; 17) "T"
|
||||
WHITESPACE@[17; 18)
|
||||
PLUS@[18; 19)
|
||||
WHITESPACE@[19; 20)
|
||||
LIFETIME@[20; 22) "'f"
|
||||
DYN_TRAIT_TYPE@[16; 22)
|
||||
TYPE_BOUND_LIST@[16; 22)
|
||||
TYPE_BOUND@[16; 17)
|
||||
PATH_TYPE@[16; 17)
|
||||
PATH@[16; 17)
|
||||
PATH_SEGMENT@[16; 17)
|
||||
NAME_REF@[16; 17)
|
||||
IDENT@[16; 17) "T"
|
||||
WHITESPACE@[17; 18)
|
||||
PLUS@[18; 19)
|
||||
WHITESPACE@[19; 20)
|
||||
TYPE_BOUND@[20; 22)
|
||||
LIFETIME@[20; 22) "'f"
|
||||
R_ANGLE@[22; 23)
|
||||
WHITESPACE@[23; 24)
|
||||
BLOCK@[24; 26)
|
||||
L_CURLY@[24; 25)
|
||||
R_CURLY@[25; 26)
|
||||
WHITESPACE@[26; 27)
|
||||
FN_DEF@[27; 57)
|
||||
FN_KW@[27; 29)
|
||||
WHITESPACE@[29; 30)
|
||||
NAME@[30; 33)
|
||||
IDENT@[30; 33) "foo"
|
||||
PARAM_LIST@[33; 35)
|
||||
L_PAREN@[33; 34)
|
||||
R_PAREN@[34; 35)
|
||||
WHITESPACE@[35; 36)
|
||||
RET_TYPE@[36; 54)
|
||||
THIN_ARROW@[36; 38)
|
||||
WHITESPACE@[38; 39)
|
||||
PATH_TYPE@[39; 54)
|
||||
PATH@[39; 54)
|
||||
PATH_SEGMENT@[39; 54)
|
||||
NAME_REF@[39; 42)
|
||||
IDENT@[39; 42) "Box"
|
||||
TYPE_ARG_LIST@[42; 54)
|
||||
L_ANGLE@[42; 43)
|
||||
TYPE_ARG@[43; 53)
|
||||
DYN_TRAIT_TYPE@[43; 53)
|
||||
DYN_KW@[43; 46)
|
||||
WHITESPACE@[46; 47)
|
||||
TYPE_BOUND_LIST@[47; 53)
|
||||
TYPE_BOUND@[47; 48)
|
||||
PATH_TYPE@[47; 48)
|
||||
PATH@[47; 48)
|
||||
PATH_SEGMENT@[47; 48)
|
||||
NAME_REF@[47; 48)
|
||||
IDENT@[47; 48) "T"
|
||||
WHITESPACE@[48; 49)
|
||||
PLUS@[49; 50)
|
||||
WHITESPACE@[50; 51)
|
||||
TYPE_BOUND@[51; 53)
|
||||
LIFETIME@[51; 53) "'f"
|
||||
R_ANGLE@[53; 54)
|
||||
WHITESPACE@[54; 55)
|
||||
BLOCK@[55; 57)
|
||||
L_CURLY@[55; 56)
|
||||
R_CURLY@[56; 57)
|
||||
WHITESPACE@[57; 58)
|
||||
|
@ -30,22 +30,26 @@ SOURCE_FILE@[0; 116)
|
||||
IDENT@[34; 35) "T"
|
||||
COLON@[35; 36)
|
||||
WHITESPACE@[36; 37)
|
||||
PATH_TYPE@[37; 59)
|
||||
PATH@[37; 42)
|
||||
PATH_SEGMENT@[37; 42)
|
||||
NAME_REF@[37; 42)
|
||||
IDENT@[37; 42) "Clone"
|
||||
TYPE_BOUND_LIST@[37; 59)
|
||||
TYPE_BOUND@[37; 42)
|
||||
PATH_TYPE@[37; 42)
|
||||
PATH@[37; 42)
|
||||
PATH_SEGMENT@[37; 42)
|
||||
NAME_REF@[37; 42)
|
||||
IDENT@[37; 42) "Clone"
|
||||
WHITESPACE@[42; 43)
|
||||
PLUS@[43; 44)
|
||||
WHITESPACE@[44; 45)
|
||||
PATH_TYPE@[45; 59)
|
||||
PATH@[45; 49)
|
||||
PATH_SEGMENT@[45; 49)
|
||||
NAME_REF@[45; 49)
|
||||
IDENT@[45; 49) "Copy"
|
||||
WHITESPACE@[49; 50)
|
||||
PLUS@[50; 51)
|
||||
WHITESPACE@[51; 52)
|
||||
TYPE_BOUND@[45; 49)
|
||||
PATH_TYPE@[45; 49)
|
||||
PATH@[45; 49)
|
||||
PATH_SEGMENT@[45; 49)
|
||||
NAME_REF@[45; 49)
|
||||
IDENT@[45; 49) "Copy"
|
||||
WHITESPACE@[49; 50)
|
||||
PLUS@[50; 51)
|
||||
WHITESPACE@[51; 52)
|
||||
TYPE_BOUND@[52; 59)
|
||||
LIFETIME@[52; 59) "'static"
|
||||
COMMA@[59; 60)
|
||||
WHITESPACE@[60; 64)
|
||||
@ -62,7 +66,9 @@ SOURCE_FILE@[0; 116)
|
||||
IDENT@[74; 78) "Item"
|
||||
COLON@[78; 79)
|
||||
WHITESPACE@[79; 80)
|
||||
LIFETIME@[80; 82) "'a"
|
||||
TYPE_BOUND_LIST@[80; 82)
|
||||
TYPE_BOUND@[80; 82)
|
||||
LIFETIME@[80; 82) "'a"
|
||||
COMMA@[82; 83)
|
||||
WHITESPACE@[83; 87)
|
||||
WHERE_PRED@[87; 112)
|
||||
@ -91,7 +97,9 @@ SOURCE_FILE@[0; 116)
|
||||
IDENT@[104; 108) "Item"
|
||||
COLON@[108; 109)
|
||||
WHITESPACE@[109; 110)
|
||||
LIFETIME@[110; 112) "'a"
|
||||
TYPE_BOUND_LIST@[110; 112)
|
||||
TYPE_BOUND@[110; 112)
|
||||
LIFETIME@[110; 112) "'a"
|
||||
WHITESPACE@[112; 113)
|
||||
BLOCK@[113; 115)
|
||||
L_CURLY@[113; 114)
|
||||
|
@ -10,31 +10,34 @@ SOURCE_FILE@[0; 42)
|
||||
DYN_TRAIT_TYPE@[9; 40)
|
||||
DYN_KW@[9; 12)
|
||||
WHITESPACE@[12; 13)
|
||||
PATH_TYPE@[13; 40)
|
||||
PATH@[13; 35)
|
||||
PATH_SEGMENT@[13; 35)
|
||||
NAME_REF@[13; 21)
|
||||
IDENT@[13; 21) "Iterator"
|
||||
TYPE_ARG_LIST@[21; 35)
|
||||
L_ANGLE@[21; 22)
|
||||
ASSOC_TYPE_ARG@[22; 34)
|
||||
NAME_REF@[22; 26)
|
||||
IDENT@[22; 26) "Item"
|
||||
EQ@[26; 27)
|
||||
PATH_TYPE@[27; 34)
|
||||
PATH@[27; 34)
|
||||
PATH_SEGMENT@[27; 34)
|
||||
NAME_REF@[27; 30)
|
||||
IDENT@[27; 30) "Foo"
|
||||
TYPE_ARG_LIST@[30; 34)
|
||||
L_ANGLE@[30; 31)
|
||||
LIFETIME_ARG@[31; 33)
|
||||
LIFETIME@[31; 33) "'a"
|
||||
R_ANGLE@[33; 34)
|
||||
R_ANGLE@[34; 35)
|
||||
TYPE_BOUND_LIST@[13; 40)
|
||||
TYPE_BOUND@[13; 35)
|
||||
PATH_TYPE@[13; 35)
|
||||
PATH@[13; 35)
|
||||
PATH_SEGMENT@[13; 35)
|
||||
NAME_REF@[13; 21)
|
||||
IDENT@[13; 21) "Iterator"
|
||||
TYPE_ARG_LIST@[21; 35)
|
||||
L_ANGLE@[21; 22)
|
||||
ASSOC_TYPE_ARG@[22; 34)
|
||||
NAME_REF@[22; 26)
|
||||
IDENT@[22; 26) "Item"
|
||||
EQ@[26; 27)
|
||||
PATH_TYPE@[27; 34)
|
||||
PATH@[27; 34)
|
||||
PATH_SEGMENT@[27; 34)
|
||||
NAME_REF@[27; 30)
|
||||
IDENT@[27; 30) "Foo"
|
||||
TYPE_ARG_LIST@[30; 34)
|
||||
L_ANGLE@[30; 31)
|
||||
LIFETIME_ARG@[31; 33)
|
||||
LIFETIME@[31; 33) "'a"
|
||||
R_ANGLE@[33; 34)
|
||||
R_ANGLE@[34; 35)
|
||||
WHITESPACE@[35; 36)
|
||||
PLUS@[36; 37)
|
||||
WHITESPACE@[37; 38)
|
||||
LIFETIME@[38; 40) "'a"
|
||||
TYPE_BOUND@[38; 40)
|
||||
LIFETIME@[38; 40) "'a"
|
||||
SEMI@[40; 41)
|
||||
WHITESPACE@[41; 42)
|
||||
|
@ -25,11 +25,13 @@ SOURCE_FILE@[0; 29)
|
||||
IDENT@[18; 19) "T"
|
||||
COLON@[19; 20)
|
||||
WHITESPACE@[20; 21)
|
||||
PATH_TYPE@[21; 25)
|
||||
PATH@[21; 25)
|
||||
PATH_SEGMENT@[21; 25)
|
||||
NAME_REF@[21; 25)
|
||||
IDENT@[21; 25) "Copy"
|
||||
TYPE_BOUND_LIST@[21; 25)
|
||||
TYPE_BOUND@[21; 25)
|
||||
PATH_TYPE@[21; 25)
|
||||
PATH@[21; 25)
|
||||
PATH_SEGMENT@[21; 25)
|
||||
NAME_REF@[21; 25)
|
||||
IDENT@[21; 25) "Copy"
|
||||
WHITESPACE@[25; 26)
|
||||
BLOCK@[26; 28)
|
||||
L_CURLY@[26; 27)
|
||||
|
@ -80,11 +80,13 @@ SOURCE_FILE@[0; 135)
|
||||
IDENT@[65; 66) "T"
|
||||
COLON@[66; 67)
|
||||
WHITESPACE@[67; 68)
|
||||
PATH_TYPE@[68; 76)
|
||||
PATH@[68; 76)
|
||||
PATH_SEGMENT@[68; 76)
|
||||
NAME_REF@[68; 76)
|
||||
IDENT@[68; 76) "Iterator"
|
||||
TYPE_BOUND_LIST@[68; 76)
|
||||
TYPE_BOUND@[68; 76)
|
||||
PATH_TYPE@[68; 76)
|
||||
PATH@[68; 76)
|
||||
PATH_SEGMENT@[68; 76)
|
||||
NAME_REF@[68; 76)
|
||||
IDENT@[68; 76) "Iterator"
|
||||
WHITESPACE@[76; 77)
|
||||
BLOCK@[77; 79)
|
||||
L_CURLY@[77; 78)
|
||||
@ -143,11 +145,13 @@ SOURCE_FILE@[0; 135)
|
||||
IDENT@[120; 121) "T"
|
||||
COLON@[121; 122)
|
||||
WHITESPACE@[122; 123)
|
||||
PATH_TYPE@[123; 131)
|
||||
PATH@[123; 131)
|
||||
PATH_SEGMENT@[123; 131)
|
||||
NAME_REF@[123; 131)
|
||||
IDENT@[123; 131) "Iterator"
|
||||
TYPE_BOUND_LIST@[123; 131)
|
||||
TYPE_BOUND@[123; 131)
|
||||
PATH_TYPE@[123; 131)
|
||||
PATH@[123; 131)
|
||||
PATH_SEGMENT@[123; 131)
|
||||
NAME_REF@[123; 131)
|
||||
IDENT@[123; 131) "Iterator"
|
||||
WHITESPACE@[131; 132)
|
||||
BLOCK@[132; 134)
|
||||
L_CURLY@[132; 133)
|
||||
|
@ -31,11 +31,13 @@ SOURCE_FILE@[0; 53)
|
||||
IDENT@[24; 25) "T"
|
||||
COLON@[25; 26)
|
||||
WHITESPACE@[26; 27)
|
||||
PATH_TYPE@[27; 32)
|
||||
PATH@[27; 32)
|
||||
PATH_SEGMENT@[27; 32)
|
||||
NAME_REF@[27; 32)
|
||||
IDENT@[27; 32) "Clone"
|
||||
TYPE_BOUND_LIST@[27; 32)
|
||||
TYPE_BOUND@[27; 32)
|
||||
PATH_TYPE@[27; 32)
|
||||
PATH@[27; 32)
|
||||
PATH_SEGMENT@[27; 32)
|
||||
NAME_REF@[27; 32)
|
||||
IDENT@[27; 32) "Clone"
|
||||
SEMI@[32; 33)
|
||||
WHITESPACE@[33; 34)
|
||||
STRUCT_DEF@[34; 52)
|
||||
|
@ -11,11 +11,13 @@ SOURCE_FILE@[0; 32)
|
||||
IDENT@[9; 10) "T"
|
||||
COLON@[10; 11)
|
||||
WHITESPACE@[11; 12)
|
||||
PATH_TYPE@[12; 16)
|
||||
PATH@[12; 16)
|
||||
PATH_SEGMENT@[12; 16)
|
||||
NAME_REF@[12; 16)
|
||||
IDENT@[12; 16) "Copy"
|
||||
TYPE_BOUND_LIST@[12; 16)
|
||||
TYPE_BOUND@[12; 16)
|
||||
PATH_TYPE@[12; 16)
|
||||
PATH@[12; 16)
|
||||
PATH_SEGMENT@[12; 16)
|
||||
NAME_REF@[12; 16)
|
||||
IDENT@[12; 16) "Copy"
|
||||
R_ANGLE@[16; 17)
|
||||
WHITESPACE@[17; 18)
|
||||
NAMED_FIELD_DEF_LIST@[18; 31)
|
||||
|
@ -7,3 +7,4 @@ struct F<T: 'a + 'd + Clone>;
|
||||
struct G<T: Clone + Copy>;
|
||||
struct H<T: ::Foo + self::Bar + 'a>;
|
||||
struct I<T:, U:,>;
|
||||
struct K<'a: 'd, 'd: 'a + 'b, T: 'a + 'd + Clone>;
|
@ -1,4 +1,4 @@
|
||||
SOURCE_FILE@[0; 200)
|
||||
SOURCE_FILE@[0; 250)
|
||||
STRUCT_DEF@[0; 12)
|
||||
STRUCT_KW@[0; 6)
|
||||
WHITESPACE@[6; 7)
|
||||
@ -23,6 +23,7 @@ SOURCE_FILE@[0; 200)
|
||||
NAME@[22; 23)
|
||||
IDENT@[22; 23) "T"
|
||||
COLON@[23; 24)
|
||||
TYPE_BOUND_LIST@[24; 24)
|
||||
R_ANGLE@[24; 25)
|
||||
SEMI@[25; 26)
|
||||
WHITESPACE@[26; 27)
|
||||
@ -38,7 +39,9 @@ SOURCE_FILE@[0; 200)
|
||||
IDENT@[36; 37) "T"
|
||||
COLON@[37; 38)
|
||||
WHITESPACE@[38; 39)
|
||||
LIFETIME@[39; 41) "'a"
|
||||
TYPE_BOUND_LIST@[39; 41)
|
||||
TYPE_BOUND@[39; 41)
|
||||
LIFETIME@[39; 41) "'a"
|
||||
R_ANGLE@[41; 42)
|
||||
SEMI@[42; 43)
|
||||
WHITESPACE@[43; 44)
|
||||
@ -54,9 +57,11 @@ SOURCE_FILE@[0; 200)
|
||||
IDENT@[53; 54) "T"
|
||||
COLON@[54; 55)
|
||||
WHITESPACE@[55; 56)
|
||||
LIFETIME@[56; 58) "'a"
|
||||
WHITESPACE@[58; 59)
|
||||
PLUS@[59; 60)
|
||||
TYPE_BOUND_LIST@[56; 60)
|
||||
TYPE_BOUND@[56; 58)
|
||||
LIFETIME@[56; 58) "'a"
|
||||
WHITESPACE@[58; 59)
|
||||
PLUS@[59; 60)
|
||||
WHITESPACE@[60; 61)
|
||||
R_ANGLE@[61; 62)
|
||||
SEMI@[62; 63)
|
||||
@ -73,11 +78,14 @@ SOURCE_FILE@[0; 200)
|
||||
IDENT@[73; 74) "T"
|
||||
COLON@[74; 75)
|
||||
WHITESPACE@[75; 76)
|
||||
LIFETIME@[76; 78) "'a"
|
||||
WHITESPACE@[78; 79)
|
||||
PLUS@[79; 80)
|
||||
WHITESPACE@[80; 81)
|
||||
LIFETIME@[81; 83) "'d"
|
||||
TYPE_BOUND_LIST@[76; 83)
|
||||
TYPE_BOUND@[76; 78)
|
||||
LIFETIME@[76; 78) "'a"
|
||||
WHITESPACE@[78; 79)
|
||||
PLUS@[79; 80)
|
||||
WHITESPACE@[80; 81)
|
||||
TYPE_BOUND@[81; 83)
|
||||
LIFETIME@[81; 83) "'d"
|
||||
WHITESPACE@[83; 84)
|
||||
R_ANGLE@[84; 85)
|
||||
SEMI@[85; 86)
|
||||
@ -94,19 +102,23 @@ SOURCE_FILE@[0; 200)
|
||||
IDENT@[96; 97) "T"
|
||||
COLON@[97; 98)
|
||||
WHITESPACE@[98; 99)
|
||||
LIFETIME@[99; 101) "'a"
|
||||
WHITESPACE@[101; 102)
|
||||
PLUS@[102; 103)
|
||||
WHITESPACE@[103; 104)
|
||||
LIFETIME@[104; 106) "'d"
|
||||
WHITESPACE@[106; 107)
|
||||
PLUS@[107; 108)
|
||||
WHITESPACE@[108; 109)
|
||||
PATH_TYPE@[109; 114)
|
||||
PATH@[109; 114)
|
||||
PATH_SEGMENT@[109; 114)
|
||||
NAME_REF@[109; 114)
|
||||
IDENT@[109; 114) "Clone"
|
||||
TYPE_BOUND_LIST@[99; 114)
|
||||
TYPE_BOUND@[99; 101)
|
||||
LIFETIME@[99; 101) "'a"
|
||||
WHITESPACE@[101; 102)
|
||||
PLUS@[102; 103)
|
||||
WHITESPACE@[103; 104)
|
||||
TYPE_BOUND@[104; 106)
|
||||
LIFETIME@[104; 106) "'d"
|
||||
WHITESPACE@[106; 107)
|
||||
PLUS@[107; 108)
|
||||
WHITESPACE@[108; 109)
|
||||
TYPE_BOUND@[109; 114)
|
||||
PATH_TYPE@[109; 114)
|
||||
PATH@[109; 114)
|
||||
PATH_SEGMENT@[109; 114)
|
||||
NAME_REF@[109; 114)
|
||||
IDENT@[109; 114) "Clone"
|
||||
R_ANGLE@[114; 115)
|
||||
SEMI@[115; 116)
|
||||
WHITESPACE@[116; 117)
|
||||
@ -122,19 +134,22 @@ SOURCE_FILE@[0; 200)
|
||||
IDENT@[126; 127) "T"
|
||||
COLON@[127; 128)
|
||||
WHITESPACE@[128; 129)
|
||||
PATH_TYPE@[129; 141)
|
||||
PATH@[129; 134)
|
||||
PATH_SEGMENT@[129; 134)
|
||||
NAME_REF@[129; 134)
|
||||
IDENT@[129; 134) "Clone"
|
||||
TYPE_BOUND_LIST@[129; 141)
|
||||
TYPE_BOUND@[129; 134)
|
||||
PATH_TYPE@[129; 134)
|
||||
PATH@[129; 134)
|
||||
PATH_SEGMENT@[129; 134)
|
||||
NAME_REF@[129; 134)
|
||||
IDENT@[129; 134) "Clone"
|
||||
WHITESPACE@[134; 135)
|
||||
PLUS@[135; 136)
|
||||
WHITESPACE@[136; 137)
|
||||
PATH_TYPE@[137; 141)
|
||||
PATH@[137; 141)
|
||||
PATH_SEGMENT@[137; 141)
|
||||
NAME_REF@[137; 141)
|
||||
IDENT@[137; 141) "Copy"
|
||||
TYPE_BOUND@[137; 141)
|
||||
PATH_TYPE@[137; 141)
|
||||
PATH@[137; 141)
|
||||
PATH_SEGMENT@[137; 141)
|
||||
NAME_REF@[137; 141)
|
||||
IDENT@[137; 141) "Copy"
|
||||
R_ANGLE@[141; 142)
|
||||
SEMI@[142; 143)
|
||||
WHITESPACE@[143; 144)
|
||||
@ -150,27 +165,31 @@ SOURCE_FILE@[0; 200)
|
||||
IDENT@[153; 154) "T"
|
||||
COLON@[154; 155)
|
||||
WHITESPACE@[155; 156)
|
||||
PATH_TYPE@[156; 178)
|
||||
PATH@[156; 161)
|
||||
PATH_SEGMENT@[156; 161)
|
||||
COLONCOLON@[156; 158)
|
||||
NAME_REF@[158; 161)
|
||||
IDENT@[158; 161) "Foo"
|
||||
TYPE_BOUND_LIST@[156; 178)
|
||||
TYPE_BOUND@[156; 161)
|
||||
PATH_TYPE@[156; 161)
|
||||
PATH@[156; 161)
|
||||
PATH_SEGMENT@[156; 161)
|
||||
COLONCOLON@[156; 158)
|
||||
NAME_REF@[158; 161)
|
||||
IDENT@[158; 161) "Foo"
|
||||
WHITESPACE@[161; 162)
|
||||
PLUS@[162; 163)
|
||||
WHITESPACE@[163; 164)
|
||||
PATH_TYPE@[164; 178)
|
||||
PATH@[164; 173)
|
||||
PATH@[164; 168)
|
||||
PATH_SEGMENT@[164; 168)
|
||||
SELF_KW@[164; 168)
|
||||
COLONCOLON@[168; 170)
|
||||
PATH_SEGMENT@[170; 173)
|
||||
NAME_REF@[170; 173)
|
||||
IDENT@[170; 173) "Bar"
|
||||
WHITESPACE@[173; 174)
|
||||
PLUS@[174; 175)
|
||||
WHITESPACE@[175; 176)
|
||||
TYPE_BOUND@[164; 173)
|
||||
PATH_TYPE@[164; 173)
|
||||
PATH@[164; 173)
|
||||
PATH@[164; 168)
|
||||
PATH_SEGMENT@[164; 168)
|
||||
SELF_KW@[164; 168)
|
||||
COLONCOLON@[168; 170)
|
||||
PATH_SEGMENT@[170; 173)
|
||||
NAME_REF@[170; 173)
|
||||
IDENT@[170; 173) "Bar"
|
||||
WHITESPACE@[173; 174)
|
||||
PLUS@[174; 175)
|
||||
WHITESPACE@[175; 176)
|
||||
TYPE_BOUND@[176; 178)
|
||||
LIFETIME@[176; 178) "'a"
|
||||
R_ANGLE@[178; 179)
|
||||
SEMI@[179; 180)
|
||||
@ -186,13 +205,64 @@ SOURCE_FILE@[0; 200)
|
||||
NAME@[190; 191)
|
||||
IDENT@[190; 191) "T"
|
||||
COLON@[191; 192)
|
||||
TYPE_BOUND_LIST@[192; 192)
|
||||
COMMA@[192; 193)
|
||||
WHITESPACE@[193; 194)
|
||||
TYPE_PARAM@[194; 196)
|
||||
NAME@[194; 195)
|
||||
IDENT@[194; 195) "U"
|
||||
COLON@[195; 196)
|
||||
TYPE_BOUND_LIST@[196; 196)
|
||||
COMMA@[196; 197)
|
||||
R_ANGLE@[197; 198)
|
||||
SEMI@[198; 199)
|
||||
WHITESPACE@[199; 200)
|
||||
STRUCT_DEF@[200; 250)
|
||||
STRUCT_KW@[200; 206)
|
||||
WHITESPACE@[206; 207)
|
||||
NAME@[207; 208)
|
||||
IDENT@[207; 208) "K"
|
||||
TYPE_PARAM_LIST@[208; 249)
|
||||
L_ANGLE@[208; 209)
|
||||
LIFETIME_PARAM@[209; 215)
|
||||
LIFETIME@[209; 211) "'a"
|
||||
COLON@[211; 212)
|
||||
WHITESPACE@[212; 213)
|
||||
LIFETIME@[213; 215) "'d"
|
||||
COMMA@[215; 216)
|
||||
WHITESPACE@[216; 217)
|
||||
LIFETIME_PARAM@[217; 228)
|
||||
LIFETIME@[217; 219) "'d"
|
||||
COLON@[219; 220)
|
||||
WHITESPACE@[220; 221)
|
||||
LIFETIME@[221; 223) "'a"
|
||||
WHITESPACE@[223; 224)
|
||||
PLUS@[224; 225)
|
||||
WHITESPACE@[225; 226)
|
||||
LIFETIME@[226; 228) "'b"
|
||||
COMMA@[228; 229)
|
||||
WHITESPACE@[229; 230)
|
||||
TYPE_PARAM@[230; 248)
|
||||
NAME@[230; 231)
|
||||
IDENT@[230; 231) "T"
|
||||
COLON@[231; 232)
|
||||
WHITESPACE@[232; 233)
|
||||
TYPE_BOUND_LIST@[233; 248)
|
||||
TYPE_BOUND@[233; 235)
|
||||
LIFETIME@[233; 235) "'a"
|
||||
WHITESPACE@[235; 236)
|
||||
PLUS@[236; 237)
|
||||
WHITESPACE@[237; 238)
|
||||
TYPE_BOUND@[238; 240)
|
||||
LIFETIME@[238; 240) "'d"
|
||||
WHITESPACE@[240; 241)
|
||||
PLUS@[241; 242)
|
||||
WHITESPACE@[242; 243)
|
||||
TYPE_BOUND@[243; 248)
|
||||
PATH_TYPE@[243; 248)
|
||||
PATH@[243; 248)
|
||||
PATH_SEGMENT@[243; 248)
|
||||
NAME_REF@[243; 248)
|
||||
IDENT@[243; 248) "Clone"
|
||||
R_ANGLE@[248; 249)
|
||||
SEMI@[249; 250)
|
||||
|
@ -25,43 +25,48 @@ SOURCE_FILE@[0; 116)
|
||||
IDENT@[39; 42) "SER"
|
||||
COLON@[42; 43)
|
||||
WHITESPACE@[43; 44)
|
||||
PATH_TYPE@[44; 111)
|
||||
PATH@[44; 53)
|
||||
PATH_SEGMENT@[44; 53)
|
||||
NAME_REF@[44; 53)
|
||||
IDENT@[44; 53) "Serialize"
|
||||
TYPE_BOUND_LIST@[44; 111)
|
||||
TYPE_BOUND@[44; 53)
|
||||
PATH_TYPE@[44; 53)
|
||||
PATH@[44; 53)
|
||||
PATH_SEGMENT@[44; 53)
|
||||
NAME_REF@[44; 53)
|
||||
IDENT@[44; 53) "Serialize"
|
||||
WHITESPACE@[53; 54)
|
||||
PLUS@[54; 55)
|
||||
WHITESPACE@[55; 56)
|
||||
FOR_TYPE@[56; 81)
|
||||
FOR_KW@[56; 59)
|
||||
TYPE_PARAM_LIST@[59; 64)
|
||||
L_ANGLE@[59; 60)
|
||||
LIFETIME_PARAM@[60; 63)
|
||||
LIFETIME@[60; 63) "'de"
|
||||
R_ANGLE@[63; 64)
|
||||
WHITESPACE@[64; 65)
|
||||
PATH_TYPE@[65; 81)
|
||||
PATH@[65; 81)
|
||||
PATH_SEGMENT@[65; 81)
|
||||
NAME_REF@[65; 76)
|
||||
IDENT@[65; 76) "Deserialize"
|
||||
TYPE_ARG_LIST@[76; 81)
|
||||
L_ANGLE@[76; 77)
|
||||
LIFETIME_ARG@[77; 80)
|
||||
LIFETIME@[77; 80) "'de"
|
||||
R_ANGLE@[80; 81)
|
||||
TYPE_BOUND@[56; 81)
|
||||
FOR_TYPE@[56; 81)
|
||||
FOR_KW@[56; 59)
|
||||
TYPE_PARAM_LIST@[59; 64)
|
||||
L_ANGLE@[59; 60)
|
||||
LIFETIME_PARAM@[60; 63)
|
||||
LIFETIME@[60; 63) "'de"
|
||||
R_ANGLE@[63; 64)
|
||||
WHITESPACE@[64; 65)
|
||||
PATH_TYPE@[65; 81)
|
||||
PATH@[65; 81)
|
||||
PATH_SEGMENT@[65; 81)
|
||||
NAME_REF@[65; 76)
|
||||
IDENT@[65; 76) "Deserialize"
|
||||
TYPE_ARG_LIST@[76; 81)
|
||||
L_ANGLE@[76; 77)
|
||||
LIFETIME_ARG@[77; 80)
|
||||
LIFETIME@[77; 80) "'de"
|
||||
R_ANGLE@[80; 81)
|
||||
WHITESPACE@[81; 82)
|
||||
PLUS@[82; 83)
|
||||
WHITESPACE@[83; 84)
|
||||
PATH_TYPE@[84; 111)
|
||||
PATH@[84; 93)
|
||||
PATH_SEGMENT@[84; 93)
|
||||
NAME_REF@[84; 93)
|
||||
IDENT@[84; 93) "PartialEq"
|
||||
WHITESPACE@[93; 94)
|
||||
PLUS@[94; 95)
|
||||
WHITESPACE@[95; 96)
|
||||
TYPE_BOUND@[84; 93)
|
||||
PATH_TYPE@[84; 93)
|
||||
PATH@[84; 93)
|
||||
PATH_SEGMENT@[84; 93)
|
||||
NAME_REF@[84; 93)
|
||||
IDENT@[84; 93) "PartialEq"
|
||||
WHITESPACE@[93; 94)
|
||||
PLUS@[94; 95)
|
||||
WHITESPACE@[95; 96)
|
||||
TYPE_BOUND@[96; 111)
|
||||
PATH_TYPE@[96; 111)
|
||||
PATH@[96; 111)
|
||||
PATH@[96; 104)
|
||||
|
@ -1694,21 +1694,23 @@ SOURCE_FILE@[0; 3813)
|
||||
IMPL_TRAIT_TYPE@[3063; 3083)
|
||||
IMPL_KW@[3063; 3067)
|
||||
WHITESPACE@[3067; 3068)
|
||||
PATH_TYPE@[3068; 3083)
|
||||
PATH@[3068; 3083)
|
||||
PATH@[3068; 3076)
|
||||
PATH@[3068; 3071)
|
||||
PATH_SEGMENT@[3068; 3071)
|
||||
NAME_REF@[3068; 3071)
|
||||
IDENT@[3068; 3071) "std"
|
||||
COLONCOLON@[3071; 3073)
|
||||
PATH_SEGMENT@[3073; 3076)
|
||||
NAME_REF@[3073; 3076)
|
||||
IDENT@[3073; 3076) "fmt"
|
||||
COLONCOLON@[3076; 3078)
|
||||
PATH_SEGMENT@[3078; 3083)
|
||||
NAME_REF@[3078; 3083)
|
||||
IDENT@[3078; 3083) "Debug"
|
||||
TYPE_BOUND_LIST@[3068; 3083)
|
||||
TYPE_BOUND@[3068; 3083)
|
||||
PATH_TYPE@[3068; 3083)
|
||||
PATH@[3068; 3083)
|
||||
PATH@[3068; 3076)
|
||||
PATH@[3068; 3071)
|
||||
PATH_SEGMENT@[3068; 3071)
|
||||
NAME_REF@[3068; 3071)
|
||||
IDENT@[3068; 3071) "std"
|
||||
COLONCOLON@[3071; 3073)
|
||||
PATH_SEGMENT@[3073; 3076)
|
||||
NAME_REF@[3073; 3076)
|
||||
IDENT@[3073; 3076) "fmt"
|
||||
COLONCOLON@[3076; 3078)
|
||||
PATH_SEGMENT@[3078; 3083)
|
||||
NAME_REF@[3078; 3083)
|
||||
IDENT@[3078; 3083) "Debug"
|
||||
WHITESPACE@[3083; 3084)
|
||||
BLOCK@[3084; 3514)
|
||||
L_CURLY@[3084; 3085)
|
||||
|
@ -16,11 +16,13 @@ SOURCE_FILE@[0; 157)
|
||||
IDENT@[73; 74) "S"
|
||||
COLON@[74; 75)
|
||||
WHITESPACE@[75; 76)
|
||||
PATH_TYPE@[76; 84)
|
||||
PATH@[76; 84)
|
||||
PATH_SEGMENT@[76; 84)
|
||||
NAME_REF@[76; 84)
|
||||
IDENT@[76; 84) "Iterator"
|
||||
TYPE_BOUND_LIST@[76; 84)
|
||||
TYPE_BOUND@[76; 84)
|
||||
PATH_TYPE@[76; 84)
|
||||
PATH@[76; 84)
|
||||
PATH_SEGMENT@[76; 84)
|
||||
NAME_REF@[76; 84)
|
||||
IDENT@[76; 84) "Iterator"
|
||||
R_ANGLE@[84; 85)
|
||||
PARAM_LIST@[85; 87)
|
||||
L_PAREN@[85; 86)
|
||||
@ -64,11 +66,13 @@ SOURCE_FILE@[0; 157)
|
||||
IDENT@[125; 129) "Item"
|
||||
COLON@[129; 130)
|
||||
WHITESPACE@[130; 131)
|
||||
PATH_TYPE@[131; 133)
|
||||
PATH@[131; 133)
|
||||
PATH_SEGMENT@[131; 133)
|
||||
NAME_REF@[131; 133)
|
||||
IDENT@[131; 133) "Eq"
|
||||
TYPE_BOUND_LIST@[131; 133)
|
||||
TYPE_BOUND@[131; 133)
|
||||
PATH_TYPE@[131; 133)
|
||||
PATH@[131; 133)
|
||||
PATH_SEGMENT@[131; 133)
|
||||
NAME_REF@[131; 133)
|
||||
IDENT@[131; 133) "Eq"
|
||||
COMMA@[133; 134)
|
||||
WHITESPACE@[134; 135)
|
||||
BLOCK@[135; 156)
|
||||
|
@ -29,11 +29,13 @@ SOURCE_FILE@[0; 34)
|
||||
R_PAREN@[25; 26)
|
||||
COLON@[26; 27)
|
||||
WHITESPACE@[27; 28)
|
||||
PATH_TYPE@[28; 31)
|
||||
PATH@[28; 31)
|
||||
PATH_SEGMENT@[28; 31)
|
||||
NAME_REF@[28; 31)
|
||||
IDENT@[28; 31) "Foo"
|
||||
TYPE_BOUND_LIST@[28; 31)
|
||||
TYPE_BOUND@[28; 31)
|
||||
PATH_TYPE@[28; 31)
|
||||
PATH@[28; 31)
|
||||
PATH_SEGMENT@[28; 31)
|
||||
NAME_REF@[28; 31)
|
||||
IDENT@[28; 31) "Foo"
|
||||
WHITESPACE@[31; 32)
|
||||
BLOCK@[32; 34)
|
||||
L_CURLY@[32; 33)
|
||||
|
@ -116,32 +116,34 @@ SOURCE_FILE@[0; 686)
|
||||
IMPL_TRAIT_TYPE@[576; 600)
|
||||
IMPL_KW@[576; 580)
|
||||
WHITESPACE@[580; 581)
|
||||
PATH_TYPE@[581; 600)
|
||||
PATH@[581; 600)
|
||||
PATH_SEGMENT@[581; 600)
|
||||
NAME_REF@[581; 583)
|
||||
IDENT@[581; 583) "Fn"
|
||||
PARAM_LIST@[583; 585)
|
||||
L_PAREN@[583; 584)
|
||||
R_PAREN@[584; 585)
|
||||
WHITESPACE@[585; 586)
|
||||
RET_TYPE@[586; 600)
|
||||
THIN_ARROW@[586; 588)
|
||||
WHITESPACE@[588; 589)
|
||||
PATH_TYPE@[589; 600)
|
||||
PATH@[589; 600)
|
||||
PATH_SEGMENT@[589; 600)
|
||||
NAME_REF@[589; 594)
|
||||
IDENT@[589; 594) "Event"
|
||||
TYPE_ARG_LIST@[594; 600)
|
||||
L_ANGLE@[594; 595)
|
||||
TYPE_ARG@[595; 599)
|
||||
PATH_TYPE@[595; 599)
|
||||
PATH@[595; 599)
|
||||
PATH_SEGMENT@[595; 599)
|
||||
NAME_REF@[595; 599)
|
||||
IDENT@[595; 599) "Self"
|
||||
R_ANGLE@[599; 600)
|
||||
TYPE_BOUND_LIST@[581; 600)
|
||||
TYPE_BOUND@[581; 600)
|
||||
PATH_TYPE@[581; 600)
|
||||
PATH@[581; 600)
|
||||
PATH_SEGMENT@[581; 600)
|
||||
NAME_REF@[581; 583)
|
||||
IDENT@[581; 583) "Fn"
|
||||
PARAM_LIST@[583; 585)
|
||||
L_PAREN@[583; 584)
|
||||
R_PAREN@[584; 585)
|
||||
WHITESPACE@[585; 586)
|
||||
RET_TYPE@[586; 600)
|
||||
THIN_ARROW@[586; 588)
|
||||
WHITESPACE@[588; 589)
|
||||
PATH_TYPE@[589; 600)
|
||||
PATH@[589; 600)
|
||||
PATH_SEGMENT@[589; 600)
|
||||
NAME_REF@[589; 594)
|
||||
IDENT@[589; 594) "Event"
|
||||
TYPE_ARG_LIST@[594; 600)
|
||||
L_ANGLE@[594; 595)
|
||||
TYPE_ARG@[595; 599)
|
||||
PATH_TYPE@[595; 599)
|
||||
PATH@[595; 599)
|
||||
PATH_SEGMENT@[595; 599)
|
||||
NAME_REF@[595; 599)
|
||||
IDENT@[595; 599) "Self"
|
||||
R_ANGLE@[599; 600)
|
||||
R_PAREN@[600; 601)
|
||||
WHITESPACE@[601; 602)
|
||||
BLOCK@[602; 683)
|
||||
|
Loading…
x
Reference in New Issue
Block a user