nodes for blocks

This commit is contained in:
Aleksey Kladov 2018-08-24 19:27:30 +03:00
parent 4d29300396
commit 7edab6ae6b
122 changed files with 1743 additions and 1535 deletions

View file

@ -93,7 +93,7 @@ fn structure_node(node: SyntaxNodeRef) -> Option<StructureNode> {
visitor() visitor()
.visit(decl::<ast::FnDef>) .visit(decl::<ast::FnDef>)
.visit(decl::<ast::StructDef>) .visit(decl::<ast::StructDef>)
.visit(decl::<ast::NamedField>) .visit(decl::<ast::NamedFieldDef>)
.visit(decl::<ast::EnumDef>) .visit(decl::<ast::EnumDef>)
.visit(decl::<ast::TraitDef>) .visit(decl::<ast::TraitDef>)
.visit(decl::<ast::Module>) .visit(decl::<ast::Module>)

View file

@ -104,7 +104,7 @@ impl fmt::Debug for E {}
let symbols = file_structure(&file); let symbols = file_structure(&file);
assert_eq_dbg( assert_eq_dbg(
r#"[StructureNode { parent: None, label: "Foo", navigation_range: [8; 11), node_range: [1; 26), kind: STRUCT_DEF }, r#"[StructureNode { parent: None, label: "Foo", navigation_range: [8; 11), node_range: [1; 26), kind: STRUCT_DEF },
StructureNode { parent: Some(0), label: "x", navigation_range: [18; 19), node_range: [18; 24), kind: NAMED_FIELD }, StructureNode { parent: Some(0), label: "x", navigation_range: [18; 19), node_range: [18; 24), kind: NAMED_FIELD_DEF },
StructureNode { parent: None, label: "m", navigation_range: [32; 33), node_range: [28; 53), kind: MODULE }, StructureNode { parent: None, label: "m", navigation_range: [32; 33), node_range: [28; 53), kind: MODULE },
StructureNode { parent: Some(2), label: "bar", navigation_range: [43; 46), node_range: [40; 51), kind: FN_DEF }, StructureNode { parent: Some(2), label: "bar", navigation_range: [43; 46), node_range: [40; 51), kind: FN_DEF },
StructureNode { parent: None, label: "E", navigation_range: [60; 61), node_range: [55; 75), kind: ENUM_DEF }, StructureNode { parent: None, label: "E", navigation_range: [60; 61), node_range: [55; 75), kind: ENUM_DEF },

View file

@ -283,25 +283,25 @@ impl<'a> AstNode<'a> for NameRef<'a> {
impl<'a> NameRef<'a> {} impl<'a> NameRef<'a> {}
// NamedField // NamedFieldDef
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub struct NamedField<'a> { pub struct NamedFieldDef<'a> {
syntax: SyntaxNodeRef<'a>, syntax: SyntaxNodeRef<'a>,
} }
impl<'a> AstNode<'a> for NamedField<'a> { impl<'a> AstNode<'a> for NamedFieldDef<'a> {
fn cast(syntax: SyntaxNodeRef<'a>) -> Option<Self> { fn cast(syntax: SyntaxNodeRef<'a>) -> Option<Self> {
match syntax.kind() { match syntax.kind() {
NAMED_FIELD => Some(NamedField { syntax }), NAMED_FIELD_DEF => Some(NamedFieldDef { syntax }),
_ => None, _ => None,
} }
} }
fn syntax(self) -> SyntaxNodeRef<'a> { self.syntax } fn syntax(self) -> SyntaxNodeRef<'a> { self.syntax }
} }
impl<'a> ast::NameOwner<'a> for NamedField<'a> {} impl<'a> ast::NameOwner<'a> for NamedFieldDef<'a> {}
impl<'a> ast::AttrsOwner<'a> for NamedField<'a> {} impl<'a> ast::AttrsOwner<'a> for NamedFieldDef<'a> {}
impl<'a> NamedField<'a> {} impl<'a> NamedFieldDef<'a> {}
// NeverType // NeverType
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
@ -498,7 +498,7 @@ impl<'a> ast::NameOwner<'a> for StructDef<'a> {}
impl<'a> ast::TypeParamsOwner<'a> for StructDef<'a> {} impl<'a> ast::TypeParamsOwner<'a> for StructDef<'a> {}
impl<'a> ast::AttrsOwner<'a> for StructDef<'a> {} impl<'a> ast::AttrsOwner<'a> for StructDef<'a> {}
impl<'a> StructDef<'a> { impl<'a> StructDef<'a> {
pub fn fields(self) -> impl Iterator<Item = NamedField<'a>> + 'a { pub fn fields(self) -> impl Iterator<Item = NamedFieldDef<'a>> + 'a {
super::children(self) super::children(self)
} }
} }

View file

@ -149,6 +149,7 @@ Grammar(
"PLACEHOLDER_PAT", "PLACEHOLDER_PAT",
"PATH_PAT", "PATH_PAT",
"STRUCT_PAT", "STRUCT_PAT",
"FIELD_PAT_LIST",
"TUPLE_STRUCT_PAT", "TUPLE_STRUCT_PAT",
"TUPLE_PAT", "TUPLE_PAT",
"SLICE_PAT", "SLICE_PAT",
@ -170,10 +171,12 @@ Grammar(
"BLOCK_EXPR", "BLOCK_EXPR",
"RETURN_EXPR", "RETURN_EXPR",
"MATCH_EXPR", "MATCH_EXPR",
"MATCH_ARM_LIST",
"MATCH_ARM", "MATCH_ARM",
"MATCH_GUARD", "MATCH_GUARD",
"STRUCT_LIT", "STRUCT_LIT",
"STRUCT_LIT_FIELD", "NAMED_FIELD_LIST",
"NAMED_FIELD",
// postfix // postfix
"CALL_EXPR", "CALL_EXPR",
@ -190,14 +193,20 @@ Grammar(
"RANGE_EXPR", // just weird "RANGE_EXPR", // just weird
"BIN_EXPR", "BIN_EXPR",
"BLOCK",
"EXTERN_BLOCK_EXPR", "EXTERN_BLOCK",
"EXTERN_ITEM_LIST",
"ENUM_VARIANT", "ENUM_VARIANT",
"NAMED_FIELD", "NAMED_FIELD_DEF_LIST",
"NAMED_FIELD_DEF",
"POS_FIELD_LIST",
"POS_FIELD", "POS_FIELD",
"ENUM_VARIANT_LIST",
"ITEM_LIST",
"ATTR", "ATTR",
"META_ITEM", // not an item actually "META_ITEM", // not an item actually
"USE_TREE", "USE_TREE",
"USE_TREE_LIST",
"PATH", "PATH",
"PATH_SEGMENT", "PATH_SEGMENT",
"LITERAL", "LITERAL",
@ -244,10 +253,10 @@ Grammar(
"AttrsOwner", "AttrsOwner",
], ],
collections: [ collections: [
["fields", "NamedField"] ["fields", "NamedFieldDef"]
] ]
), ),
"NamedField": ( traits: ["NameOwner", "AttrsOwner"] ), "NamedFieldDef": ( traits: ["NameOwner", "AttrsOwner"] ),
"EnumDef": ( traits: [ "EnumDef": ( traits: [
"NameOwner", "NameOwner",
"TypeParamsOwner", "TypeParamsOwner",

View file

@ -148,7 +148,11 @@ fn lambda_expr(p: &mut Parser) -> CompletedMarker {
p.eat(MOVE_KW); p.eat(MOVE_KW);
params::param_list_opt_types(p); params::param_list_opt_types(p);
if opt_fn_ret_type(p) { if opt_fn_ret_type(p) {
block(p); if p.at(L_CURLY) {
block(p);
} else {
p.error("expected a block");
}
} else { } else {
expr(p); expr(p);
} }
@ -254,6 +258,17 @@ fn match_expr(p: &mut Parser) -> CompletedMarker {
let m = p.start(); let m = p.start();
p.bump(); p.bump();
expr_no_struct(p); expr_no_struct(p);
if p.at(L_CURLY) {
match_arm_list(p);
} else {
p.error("expected `{`")
}
m.complete(p, MATCH_EXPR)
}
fn match_arm_list(p: &mut Parser) {
assert!(p.at(L_CURLY));
let m = p.start();
p.eat(L_CURLY); p.eat(L_CURLY);
while !p.at(EOF) && !p.at(R_CURLY) { while !p.at(EOF) && !p.at(R_CURLY) {
// test match_arms_commas // test match_arms_commas
@ -271,7 +286,7 @@ fn match_expr(p: &mut Parser) -> CompletedMarker {
} }
} }
p.expect(R_CURLY); p.expect(R_CURLY);
m.complete(p, MATCH_EXPR) m.complete(p, MATCH_ARM_LIST);
} }
// test match_arm // test match_arm
@ -307,62 +322,10 @@ pub(super) fn block_expr(p: &mut Parser) -> CompletedMarker {
assert!(p.at(L_CURLY) || p.at(UNSAFE_KW) && p.nth(1) == L_CURLY); assert!(p.at(L_CURLY) || p.at(UNSAFE_KW) && p.nth(1) == L_CURLY);
let m = p.start(); let m = p.start();
p.eat(UNSAFE_KW); p.eat(UNSAFE_KW);
p.bump(); block(p);
while !p.at(EOF) && !p.at(R_CURLY) {
match p.current() {
LET_KW => let_stmt(p),
_ => {
// test block_items
// fn a() { fn b() {} }
let m = p.start();
match items::maybe_item(p, items::ItemFlavor::Mod) {
items::MaybeItem::Item(kind) => {
m.complete(p, kind);
}
items::MaybeItem::Modifiers => {
m.abandon(p);
p.error("expected an item");
}
// test pub_expr
// fn foo() { pub 92; } //FIXME
items::MaybeItem::None => {
let is_blocklike = expressions::expr_stmt(p) == BlockLike::Block;
if p.eat(SEMI) || (is_blocklike && !p.at(R_CURLY)) {
m.complete(p, EXPR_STMT);
} else {
m.abandon(p);
}
}
}
}
}
}
p.expect(R_CURLY);
m.complete(p, BLOCK_EXPR) m.complete(p, BLOCK_EXPR)
} }
// test let_stmt;
// fn foo() {
// let a;
// let b: i32;
// let c = 92;
// let d: i32 = 92;
// }
fn let_stmt(p: &mut Parser) {
assert!(p.at(LET_KW));
let m = p.start();
p.bump();
patterns::pattern(p);
if p.at(COLON) {
types::ascription(p);
}
if p.eat(EQ) {
expressions::expr(p);
}
p.expect(SEMI);
m.complete(p, LET_STMT);
}
// test return_expr // test return_expr
// fn foo() { // fn foo() {
// return; // return;

View file

@ -26,11 +26,62 @@ fn expr_no_struct(p: &mut Parser) {
// fn c() { 1; 2; } // fn c() { 1; 2; }
// fn d() { 1; 2 } // fn d() { 1; 2 }
pub(super) fn block(p: &mut Parser) { pub(super) fn block(p: &mut Parser) {
if !p.at(L_CURLY) { assert!(p.at(L_CURLY));
p.error("expected block"); let m = p.start();
return; p.bump();
while !p.at(EOF) && !p.at(R_CURLY) {
match p.current() {
LET_KW => let_stmt(p),
_ => {
// test block_items
// fn a() { fn b() {} }
let m = p.start();
match items::maybe_item(p, items::ItemFlavor::Mod) {
items::MaybeItem::Item(kind) => {
m.complete(p, kind);
}
items::MaybeItem::Modifiers => {
m.abandon(p);
p.error("expected an item");
}
// test pub_expr
// fn foo() { pub 92; } //FIXME
items::MaybeItem::None => {
let is_blocklike = expressions::expr_stmt(p) == BlockLike::Block;
if p.eat(SEMI) || (is_blocklike && !p.at(R_CURLY)) {
m.complete(p, EXPR_STMT);
} else {
m.abandon(p);
}
}
}
}
}
}
p.expect(R_CURLY);
m.complete(p, BLOCK);
// test let_stmt;
// fn foo() {
// let a;
// let b: i32;
// let c = 92;
// let d: i32 = 92;
// }
fn let_stmt(p: &mut Parser) {
assert!(p.at(LET_KW));
let m = p.start();
p.bump();
patterns::pattern(p);
if p.at(COLON) {
types::ascription(p);
}
if p.eat(EQ) {
expressions::expr(p);
}
p.expect(SEMI);
m.complete(p, LET_STMT);
} }
atom::block_expr(p);
} }
#[derive(Clone, Copy)] #[derive(Clone, Copy)]
@ -339,7 +390,7 @@ fn path_expr(p: &mut Parser, r: Restrictions) -> CompletedMarker {
paths::expr_path(p); paths::expr_path(p);
match p.current() { match p.current() {
L_CURLY if !r.forbid_structs => { L_CURLY if !r.forbid_structs => {
struct_lit(p); named_field_list(p);
m.complete(p, STRUCT_LIT) m.complete(p, STRUCT_LIT)
} }
EXCL => { EXCL => {
@ -356,8 +407,9 @@ fn path_expr(p: &mut Parser, r: Restrictions) -> CompletedMarker {
// S { x, y: 32, }; // S { x, y: 32, };
// S { x, y: 32, ..Default::default() }; // S { x, y: 32, ..Default::default() };
// } // }
fn struct_lit(p: &mut Parser) { fn named_field_list(p: &mut Parser) {
assert!(p.at(L_CURLY)); assert!(p.at(L_CURLY));
let m = p.start();
p.bump(); p.bump();
while !p.at(EOF) && !p.at(R_CURLY) { while !p.at(EOF) && !p.at(R_CURLY) {
match p.current() { match p.current() {
@ -367,7 +419,7 @@ fn struct_lit(p: &mut Parser) {
if p.eat(COLON) { if p.eat(COLON) {
expr(p); expr(p);
} }
m.complete(p, STRUCT_LIT_FIELD); m.complete(p, NAMED_FIELD);
} }
DOTDOT => { DOTDOT => {
p.bump(); p.bump();
@ -380,4 +432,5 @@ fn struct_lit(p: &mut Parser) {
} }
} }
p.expect(R_CURLY); p.expect(R_CURLY);
m.complete(p, NAMED_FIELD_LIST);
} }

View file

@ -194,8 +194,8 @@ fn items_without_modifiers(p: &mut Parser) -> Option<SyntaxKind> {
// extern {} // extern {}
EXTERN_KW if la == L_CURLY || ((la == STRING || la == RAW_STRING) && p.nth(2) == L_CURLY) => { EXTERN_KW if la == L_CURLY || ((la == STRING || la == RAW_STRING) && p.nth(2) == L_CURLY) => {
abi(p); abi(p);
extern_block(p); extern_item_list(p);
EXTERN_BLOCK_EXPR EXTERN_BLOCK
} }
_ => return None, _ => return None,
}; };
@ -212,10 +212,12 @@ fn extern_crate_item(p: &mut Parser) {
p.expect(SEMI); p.expect(SEMI);
} }
fn extern_block(p: &mut Parser) { fn extern_item_list(p: &mut Parser) {
assert!(p.at(L_CURLY)); assert!(p.at(L_CURLY));
let m = p.start();
p.bump(); p.bump();
p.expect(R_CURLY); p.expect(R_CURLY);
m.complete(p, EXTERN_ITEM_LIST);
} }
fn function(p: &mut Parser, flavor: ItemFlavor) { fn function(p: &mut Parser, flavor: ItemFlavor) {
@ -284,14 +286,22 @@ fn mod_item(p: &mut Parser) {
p.bump(); p.bump();
name(p); name(p);
if !p.eat(SEMI) { if p.at(L_CURLY) {
if p.expect(L_CURLY) { mod_item_list(p);
mod_contents(p, true); } else if !p.eat(SEMI) {
p.expect(R_CURLY); p.error("expected `;` or `{`");
}
} }
} }
fn mod_item_list(p: &mut Parser) {
assert!(p.at(L_CURLY));
let m = p.start();
p.bump();
mod_contents(p, true);
p.expect(R_CURLY);
m.complete(p, ITEM_LIST);
}
fn macro_call(p: &mut Parser) -> BlockLike { fn macro_call(p: &mut Parser) -> BlockLike {
assert!(paths::is_path_start(p)); assert!(paths::is_path_start(p));
paths::use_path(p); paths::use_path(p);

View file

@ -14,7 +14,7 @@ pub(super) fn struct_def(p: &mut Parser) {
p.bump(); p.bump();
return; return;
} }
L_CURLY => named_fields(p), L_CURLY => named_field_def_list(p),
_ => { _ => {
//TODO: special case `(` error message //TODO: special case `(` error message
p.error("expected `;` or `{`"); p.error("expected `;` or `{`");
@ -26,9 +26,9 @@ pub(super) fn struct_def(p: &mut Parser) {
p.bump(); p.bump();
return; return;
} }
L_CURLY => named_fields(p), L_CURLY => named_field_def_list(p),
L_PAREN => { L_PAREN => {
pos_fields(p); pos_field_list(p);
p.expect(SEMI); p.expect(SEMI);
} }
_ => { _ => {
@ -44,46 +44,58 @@ pub(super) fn enum_def(p: &mut Parser) {
name(p); name(p);
type_params::opt_type_param_list(p); type_params::opt_type_param_list(p);
type_params::opt_where_clause(p); type_params::opt_where_clause(p);
if p.expect(L_CURLY) { if p.at(L_CURLY) {
while !p.at(EOF) && !p.at(R_CURLY) { enum_variant_list(p);
let var = p.start(); } else {
attributes::outer_attributes(p); p.error("expected `{`")
if p.at(IDENT) {
name(p);
match p.current() {
L_CURLY => named_fields(p),
L_PAREN => pos_fields(p),
EQ => {
p.bump();
expressions::expr(p);
}
_ => (),
}
var.complete(p, ENUM_VARIANT);
} else {
var.abandon(p);
p.err_and_bump("expected enum variant");
}
if !p.at(R_CURLY) {
p.expect(COMMA);
}
}
p.expect(R_CURLY);
} }
} }
fn named_fields(p: &mut Parser) { fn enum_variant_list(p: &mut Parser) {
assert!(p.at(L_CURLY)); assert!(p.at(L_CURLY));
let m = p.start();
p.bump(); p.bump();
while !p.at(R_CURLY) && !p.at(EOF) { while !p.at(EOF) && !p.at(R_CURLY) {
named_field(p); let var = p.start();
attributes::outer_attributes(p);
if p.at(IDENT) {
name(p);
match p.current() {
L_CURLY => named_field_def_list(p),
L_PAREN => pos_field_list(p),
EQ => {
p.bump();
expressions::expr(p);
}
_ => (),
}
var.complete(p, ENUM_VARIANT);
} else {
var.abandon(p);
p.err_and_bump("expected enum variant");
}
if !p.at(R_CURLY) { if !p.at(R_CURLY) {
p.expect(COMMA); p.expect(COMMA);
} }
} }
p.expect(R_CURLY); p.expect(R_CURLY);
m.complete(p, ENUM_VARIANT_LIST);
}
fn named_field(p: &mut Parser) { fn named_field_def_list(p: &mut Parser) {
assert!(p.at(L_CURLY));
let m = p.start();
p.bump();
while !p.at(R_CURLY) && !p.at(EOF) {
named_field_def(p);
if !p.at(R_CURLY) {
p.expect(COMMA);
}
}
p.expect(R_CURLY);
m.complete(p, NAMED_FIELD_DEF_LIST);
fn named_field_def(p: &mut Parser) {
let m = p.start(); let m = p.start();
// test field_attrs // test field_attrs
// struct S { // struct S {
@ -96,7 +108,7 @@ fn named_fields(p: &mut Parser) {
name(p); name(p);
p.expect(COLON); p.expect(COLON);
types::type_(p); types::type_(p);
m.complete(p, NAMED_FIELD); m.complete(p, NAMED_FIELD_DEF);
} else { } else {
m.abandon(p); m.abandon(p);
p.err_and_bump("expected field declaration"); p.err_and_bump("expected field declaration");
@ -104,7 +116,9 @@ fn named_fields(p: &mut Parser) {
} }
} }
fn pos_fields(p: &mut Parser) { fn pos_field_list(p: &mut Parser) {
assert!(p.at(L_PAREN));
let m = p.start();
if !p.expect(L_PAREN) { if !p.expect(L_PAREN) {
return; return;
} }
@ -119,4 +133,5 @@ fn pos_fields(p: &mut Parser) {
} }
} }
p.expect(R_PAREN); p.expect(R_PAREN);
m.complete(p, POS_FIELD_LIST);
} }

View file

@ -11,18 +11,29 @@ pub(super) fn trait_def(p: &mut Parser) {
type_params::bounds(p); type_params::bounds(p);
} }
type_params::opt_where_clause(p); type_params::opt_where_clause(p);
p.expect(L_CURLY); if p.at(L_CURLY) {
// test trait_item_items trait_item_list(p);
// impl F { } else {
// type A: Clone; p.error("expected `{`");
// const B: i32; }
// fn foo() {} }
// fn bar(&self);
// } // test trait_item_list
// impl F {
// type A: Clone;
// const B: i32;
// fn foo() {}
// fn bar(&self);
// }
fn trait_item_list(p: &mut Parser) {
assert!(p.at(L_CURLY));
let m = p.start();
p.bump();
while !p.at(EOF) && !p.at(R_CURLY) { while !p.at(EOF) && !p.at(R_CURLY) {
item_or_macro(p, true, ItemFlavor::Trait); item_or_macro(p, true, ItemFlavor::Trait);
} }
p.expect(R_CURLY); p.expect(R_CURLY);
m.complete(p, ITEM_LIST);
} }
// test impl_item // test impl_item
@ -45,19 +56,30 @@ pub(super) fn impl_item(p: &mut Parser) {
types::type_(p); types::type_(p);
} }
type_params::opt_where_clause(p); type_params::opt_where_clause(p);
p.expect(L_CURLY); if p.at(L_CURLY) {
impl_item_list(p);
} else {
p.error("expected `{`");
}
}
// test impl_item_list
// impl F {
// type A = i32;
// const B: i32 = 92;
// fn foo() {}
// fn bar(&self) {}
// }
fn impl_item_list(p: &mut Parser) {
assert!(p.at(L_CURLY));
let m = p.start();
p.bump();
// test impl_item_items
// impl F {
// type A = i32;
// const B: i32 = 92;
// fn foo() {}
// fn bar(&self) {}
// }
while !p.at(EOF) && !p.at(R_CURLY) { while !p.at(EOF) && !p.at(R_CURLY) {
item_or_macro(p, true, ItemFlavor::Mod); item_or_macro(p, true, ItemFlavor::Mod);
} }
p.expect(R_CURLY); p.expect(R_CURLY);
m.complete(p, ITEM_LIST);
} }
fn choose_type_params_over_qpath(p: &Parser) -> bool { fn choose_type_params_over_qpath(p: &Parser) -> bool {

View file

@ -20,7 +20,7 @@ fn use_tree(p: &mut Parser) {
if p.at(COLONCOLON) { if p.at(COLONCOLON) {
p.bump(); p.bump();
} }
nested_trees(p); use_tree_list(p);
} }
_ if paths::is_path_start(p) => { _ if paths::is_path_start(p) => {
paths::use_path(p); paths::use_path(p);
@ -34,7 +34,7 @@ fn use_tree(p: &mut Parser) {
STAR => { STAR => {
p.bump(); p.bump();
} }
L_CURLY => nested_trees(p), L_CURLY => use_tree_list(p),
_ => { _ => {
// is this unreachable? // is this unreachable?
p.error("expected `{` or `*`"); p.error("expected `{` or `*`");
@ -53,8 +53,9 @@ fn use_tree(p: &mut Parser) {
m.complete(p, USE_TREE); m.complete(p, USE_TREE);
} }
fn nested_trees(p: &mut Parser) { fn use_tree_list(p: &mut Parser) {
assert!(p.at(L_CURLY)); assert!(p.at(L_CURLY));
let m = p.start();
p.bump(); p.bump();
while !p.at(EOF) && !p.at(R_CURLY) { while !p.at(EOF) && !p.at(R_CURLY) {
use_tree(p); use_tree(p);
@ -63,4 +64,5 @@ fn nested_trees(p: &mut Parser) {
} }
} }
p.expect(R_CURLY); p.expect(R_CURLY);
m.complete(p, USE_TREE_LIST);
} }

View file

@ -144,18 +144,21 @@ fn name_ref(p: &mut Parser) {
} }
fn error_block(p: &mut Parser, message: &str) { fn error_block(p: &mut Parser, message: &str) {
assert!(p.at(L_CURLY)); go(p, Some(message));
let err = p.start(); fn go(p: &mut Parser, message: Option<&str>) {
p.error(message); assert!(p.at(L_CURLY));
p.bump(); let m = p.start();
let mut level: u32 = 1; if let Some(message) = message {
while level > 0 && !p.at(EOF) { p.error(message);
match p.current() {
L_CURLY => level += 1,
R_CURLY => level -= 1,
_ => (),
} }
p.bump(); p.bump();
while !p.at(EOF) && !p.at(R_CURLY) {
match p.current() {
L_CURLY => go(p, None),
_ => p.bump(),
}
}
p.eat(R_CURLY);
m.complete(p, ERROR);
} }
err.complete(p, ERROR);
} }

View file

@ -69,7 +69,7 @@ fn path_pat(p: &mut Parser) -> CompletedMarker {
TUPLE_STRUCT_PAT TUPLE_STRUCT_PAT
} }
L_CURLY => { L_CURLY => {
struct_pat_fields(p); field_pat_list(p);
STRUCT_PAT STRUCT_PAT
} }
_ => PATH_PAT _ => PATH_PAT
@ -99,15 +99,16 @@ fn tuple_pat_fields(p: &mut Parser) {
p.expect(R_PAREN); p.expect(R_PAREN);
} }
// test struct_pat_fields // test field_pat_list
// fn foo() { // fn foo() {
// let S {} = (); // let S {} = ();
// let S { f, ref mut g } = (); // let S { f, ref mut g } = ();
// let S { h: _, ..} = (); // let S { h: _, ..} = ();
// let S { h: _, } = (); // let S { h: _, } = ();
// } // }
fn struct_pat_fields(p: &mut Parser) { fn field_pat_list(p: &mut Parser) {
assert!(p.at(L_CURLY)); assert!(p.at(L_CURLY));
let m = p.start();
p.bump(); p.bump();
while !p.at(EOF) && !p.at(R_CURLY) { while !p.at(EOF) && !p.at(R_CURLY) {
match p.current() { match p.current() {
@ -126,6 +127,7 @@ fn struct_pat_fields(p: &mut Parser) {
} }
} }
p.expect(R_CURLY); p.expect(R_CURLY);
m.complete(p, FIELD_PAT_LIST);
} }
// test placeholder_pat // test placeholder_pat

View file

@ -53,5 +53,31 @@ pub use {
pub fn parse(text: &str) -> SyntaxNode { pub fn parse(text: &str) -> SyntaxNode {
let tokens = tokenize(&text); let tokens = tokenize(&text);
parser_impl::parse::<yellow::GreenBuilder>(text, &tokens) let res = parser_impl::parse::<yellow::GreenBuilder>(text, &tokens);
validate_block_structure(res.borrowed());
res
}
fn validate_block_structure(root: SyntaxNodeRef) {
let mut stack = Vec::new();
for node in algo::walk::preorder(root) {
match node.kind() {
SyntaxKind::L_CURLY => {
stack.push(node)
}
SyntaxKind::R_CURLY => {
if let Some(pair) = stack.pop() {
assert_eq!(node.parent(), pair.parent());
assert!(
node.next_sibling().is_none() && pair.prev_sibling().is_none(),
"floating curlys at {:?}\nfile:\n{}\nerror:\n{}\n",
node,
root.text(),
node.text(),
);
}
}
_ => (),
}
}
} }

View file

@ -147,6 +147,7 @@ pub enum SyntaxKind {
PLACEHOLDER_PAT, PLACEHOLDER_PAT,
PATH_PAT, PATH_PAT,
STRUCT_PAT, STRUCT_PAT,
FIELD_PAT_LIST,
TUPLE_STRUCT_PAT, TUPLE_STRUCT_PAT,
TUPLE_PAT, TUPLE_PAT,
SLICE_PAT, SLICE_PAT,
@ -166,10 +167,12 @@ pub enum SyntaxKind {
BLOCK_EXPR, BLOCK_EXPR,
RETURN_EXPR, RETURN_EXPR,
MATCH_EXPR, MATCH_EXPR,
MATCH_ARM_LIST,
MATCH_ARM, MATCH_ARM,
MATCH_GUARD, MATCH_GUARD,
STRUCT_LIT, STRUCT_LIT,
STRUCT_LIT_FIELD, NAMED_FIELD_LIST,
NAMED_FIELD,
CALL_EXPR, CALL_EXPR,
INDEX_EXPR, INDEX_EXPR,
METHOD_CALL_EXPR, METHOD_CALL_EXPR,
@ -180,13 +183,20 @@ pub enum SyntaxKind {
PREFIX_EXPR, PREFIX_EXPR,
RANGE_EXPR, RANGE_EXPR,
BIN_EXPR, BIN_EXPR,
EXTERN_BLOCK_EXPR, BLOCK,
EXTERN_BLOCK,
EXTERN_ITEM_LIST,
ENUM_VARIANT, ENUM_VARIANT,
NAMED_FIELD, NAMED_FIELD_DEF_LIST,
NAMED_FIELD_DEF,
POS_FIELD_LIST,
POS_FIELD, POS_FIELD,
ENUM_VARIANT_LIST,
ITEM_LIST,
ATTR, ATTR,
META_ITEM, META_ITEM,
USE_TREE, USE_TREE,
USE_TREE_LIST,
PATH, PATH,
PATH_SEGMENT, PATH_SEGMENT,
LITERAL, LITERAL,
@ -397,6 +407,7 @@ impl SyntaxKind {
PLACEHOLDER_PAT => &SyntaxInfo { name: "PLACEHOLDER_PAT" }, PLACEHOLDER_PAT => &SyntaxInfo { name: "PLACEHOLDER_PAT" },
PATH_PAT => &SyntaxInfo { name: "PATH_PAT" }, PATH_PAT => &SyntaxInfo { name: "PATH_PAT" },
STRUCT_PAT => &SyntaxInfo { name: "STRUCT_PAT" }, STRUCT_PAT => &SyntaxInfo { name: "STRUCT_PAT" },
FIELD_PAT_LIST => &SyntaxInfo { name: "FIELD_PAT_LIST" },
TUPLE_STRUCT_PAT => &SyntaxInfo { name: "TUPLE_STRUCT_PAT" }, TUPLE_STRUCT_PAT => &SyntaxInfo { name: "TUPLE_STRUCT_PAT" },
TUPLE_PAT => &SyntaxInfo { name: "TUPLE_PAT" }, TUPLE_PAT => &SyntaxInfo { name: "TUPLE_PAT" },
SLICE_PAT => &SyntaxInfo { name: "SLICE_PAT" }, SLICE_PAT => &SyntaxInfo { name: "SLICE_PAT" },
@ -416,10 +427,12 @@ impl SyntaxKind {
BLOCK_EXPR => &SyntaxInfo { name: "BLOCK_EXPR" }, BLOCK_EXPR => &SyntaxInfo { name: "BLOCK_EXPR" },
RETURN_EXPR => &SyntaxInfo { name: "RETURN_EXPR" }, RETURN_EXPR => &SyntaxInfo { name: "RETURN_EXPR" },
MATCH_EXPR => &SyntaxInfo { name: "MATCH_EXPR" }, MATCH_EXPR => &SyntaxInfo { name: "MATCH_EXPR" },
MATCH_ARM_LIST => &SyntaxInfo { name: "MATCH_ARM_LIST" },
MATCH_ARM => &SyntaxInfo { name: "MATCH_ARM" }, MATCH_ARM => &SyntaxInfo { name: "MATCH_ARM" },
MATCH_GUARD => &SyntaxInfo { name: "MATCH_GUARD" }, MATCH_GUARD => &SyntaxInfo { name: "MATCH_GUARD" },
STRUCT_LIT => &SyntaxInfo { name: "STRUCT_LIT" }, STRUCT_LIT => &SyntaxInfo { name: "STRUCT_LIT" },
STRUCT_LIT_FIELD => &SyntaxInfo { name: "STRUCT_LIT_FIELD" }, NAMED_FIELD_LIST => &SyntaxInfo { name: "NAMED_FIELD_LIST" },
NAMED_FIELD => &SyntaxInfo { name: "NAMED_FIELD" },
CALL_EXPR => &SyntaxInfo { name: "CALL_EXPR" }, CALL_EXPR => &SyntaxInfo { name: "CALL_EXPR" },
INDEX_EXPR => &SyntaxInfo { name: "INDEX_EXPR" }, INDEX_EXPR => &SyntaxInfo { name: "INDEX_EXPR" },
METHOD_CALL_EXPR => &SyntaxInfo { name: "METHOD_CALL_EXPR" }, METHOD_CALL_EXPR => &SyntaxInfo { name: "METHOD_CALL_EXPR" },
@ -430,13 +443,20 @@ impl SyntaxKind {
PREFIX_EXPR => &SyntaxInfo { name: "PREFIX_EXPR" }, PREFIX_EXPR => &SyntaxInfo { name: "PREFIX_EXPR" },
RANGE_EXPR => &SyntaxInfo { name: "RANGE_EXPR" }, RANGE_EXPR => &SyntaxInfo { name: "RANGE_EXPR" },
BIN_EXPR => &SyntaxInfo { name: "BIN_EXPR" }, BIN_EXPR => &SyntaxInfo { name: "BIN_EXPR" },
EXTERN_BLOCK_EXPR => &SyntaxInfo { name: "EXTERN_BLOCK_EXPR" }, BLOCK => &SyntaxInfo { name: "BLOCK" },
EXTERN_BLOCK => &SyntaxInfo { name: "EXTERN_BLOCK" },
EXTERN_ITEM_LIST => &SyntaxInfo { name: "EXTERN_ITEM_LIST" },
ENUM_VARIANT => &SyntaxInfo { name: "ENUM_VARIANT" }, ENUM_VARIANT => &SyntaxInfo { name: "ENUM_VARIANT" },
NAMED_FIELD => &SyntaxInfo { name: "NAMED_FIELD" }, NAMED_FIELD_DEF_LIST => &SyntaxInfo { name: "NAMED_FIELD_DEF_LIST" },
NAMED_FIELD_DEF => &SyntaxInfo { name: "NAMED_FIELD_DEF" },
POS_FIELD_LIST => &SyntaxInfo { name: "POS_FIELD_LIST" },
POS_FIELD => &SyntaxInfo { name: "POS_FIELD" }, POS_FIELD => &SyntaxInfo { name: "POS_FIELD" },
ENUM_VARIANT_LIST => &SyntaxInfo { name: "ENUM_VARIANT_LIST" },
ITEM_LIST => &SyntaxInfo { name: "ITEM_LIST" },
ATTR => &SyntaxInfo { name: "ATTR" }, ATTR => &SyntaxInfo { name: "ATTR" },
META_ITEM => &SyntaxInfo { name: "META_ITEM" }, META_ITEM => &SyntaxInfo { name: "META_ITEM" },
USE_TREE => &SyntaxInfo { name: "USE_TREE" }, USE_TREE => &SyntaxInfo { name: "USE_TREE" },
USE_TREE_LIST => &SyntaxInfo { name: "USE_TREE_LIST" },
PATH => &SyntaxInfo { name: "PATH" }, PATH => &SyntaxInfo { name: "PATH" },
PATH_SEGMENT => &SyntaxInfo { name: "PATH_SEGMENT" }, PATH_SEGMENT => &SyntaxInfo { name: "PATH_SEGMENT" },
LITERAL => &SyntaxInfo { name: "LITERAL" }, LITERAL => &SyntaxInfo { name: "LITERAL" },

View file

@ -5,29 +5,30 @@ FILE@[0; 34)
NAME@[7; 8) NAME@[7; 8)
IDENT@[7; 8) "S" IDENT@[7; 8) "S"
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
L_CURLY@[9; 10) NAMED_FIELD_DEF_LIST@[9; 34)
WHITESPACE@[10; 15) L_CURLY@[9; 10)
NAMED_FIELD@[15; 21) WHITESPACE@[10; 15)
NAME@[15; 16) NAMED_FIELD_DEF@[15; 21)
IDENT@[15; 16) "a" NAME@[15; 16)
COLON@[16; 17) IDENT@[15; 16) "a"
WHITESPACE@[17; 18) COLON@[16; 17)
PATH_TYPE@[18; 21) WHITESPACE@[17; 18)
PATH@[18; 21) PATH_TYPE@[18; 21)
PATH_SEGMENT@[18; 21) PATH@[18; 21)
NAME_REF@[18; 21) PATH_SEGMENT@[18; 21)
IDENT@[18; 21) "u32" NAME_REF@[18; 21)
err: `expected COMMA` IDENT@[18; 21) "u32"
WHITESPACE@[21; 26) err: `expected COMMA`
NAMED_FIELD@[26; 32) WHITESPACE@[21; 26)
NAME@[26; 27) NAMED_FIELD_DEF@[26; 32)
IDENT@[26; 27) "b" NAME@[26; 27)
COLON@[27; 28) IDENT@[26; 27) "b"
WHITESPACE@[28; 29) COLON@[27; 28)
PATH_TYPE@[29; 32) WHITESPACE@[28; 29)
PATH@[29; 32) PATH_TYPE@[29; 32)
PATH_SEGMENT@[29; 32) PATH@[29; 32)
NAME_REF@[29; 32) PATH_SEGMENT@[29; 32)
IDENT@[29; 32) "u32" NAME_REF@[29; 32)
WHITESPACE@[32; 33) IDENT@[29; 32) "u32"
R_CURLY@[33; 34) WHITESPACE@[32; 33)
R_CURLY@[33; 34)

View file

@ -13,5 +13,6 @@ FILE@[0; 21)
NAME@[17; 18) NAME@[17; 18)
IDENT@[17; 18) "S" IDENT@[17; 18) "S"
WHITESPACE@[18; 19) WHITESPACE@[18; 19)
L_CURLY@[19; 20) NAMED_FIELD_DEF_LIST@[19; 21)
R_CURLY@[20; 21) L_CURLY@[19; 20)
R_CURLY@[20; 21)

View file

@ -5,34 +5,35 @@ FILE@[0; 40)
NAME@[7; 8) NAME@[7; 8)
IDENT@[7; 8) "S" IDENT@[7; 8) "S"
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
L_CURLY@[9; 10) NAMED_FIELD_DEF_LIST@[9; 39)
WHITESPACE@[10; 15) L_CURLY@[9; 10)
NAMED_FIELD@[15; 21) WHITESPACE@[10; 15)
NAME@[15; 16) NAMED_FIELD_DEF@[15; 21)
IDENT@[15; 16) "a" NAME@[15; 16)
COLON@[16; 17) IDENT@[15; 16) "a"
WHITESPACE@[17; 18) COLON@[16; 17)
PATH_TYPE@[18; 21) WHITESPACE@[17; 18)
PATH@[18; 21) PATH_TYPE@[18; 21)
PATH_SEGMENT@[18; 21) PATH@[18; 21)
NAME_REF@[18; 21) PATH_SEGMENT@[18; 21)
IDENT@[18; 21) "i32" NAME_REF@[18; 21)
COMMA@[21; 22) IDENT@[18; 21) "i32"
WHITESPACE@[22; 27) COMMA@[21; 22)
NAMED_FIELD@[27; 36) WHITESPACE@[22; 27)
NAME@[27; 28) NAMED_FIELD_DEF@[27; 36)
IDENT@[27; 28) "b" NAME@[27; 28)
COLON@[28; 29) IDENT@[27; 28) "b"
WHITESPACE@[29; 30) COLON@[28; 29)
PATH_TYPE@[30; 36) WHITESPACE@[29; 30)
PATH@[30; 36) PATH_TYPE@[30; 36)
PATH_SEGMENT@[30; 36) PATH@[30; 36)
NAME_REF@[30; 36) PATH_SEGMENT@[30; 36)
IDENT@[30; 36) "String" NAME_REF@[30; 36)
COMMA@[36; 37) IDENT@[30; 36) "String"
WHITESPACE@[37; 38) COMMA@[36; 37)
R_CURLY@[38; 39) WHITESPACE@[37; 38)
err: `expected item, found `;` R_CURLY@[38; 39)
err: `expected item, found `;`
consider removing this semicolon` consider removing this semicolon`
ERROR@[39; 40) ERROR@[39; 40)
SEMI@[39; 40) SEMI@[39; 40)

View file

@ -25,7 +25,7 @@ FILE@[0; 54)
L_PAREN@[25; 26) L_PAREN@[25; 26)
R_PAREN@[26; 27) R_PAREN@[26; 27)
WHITESPACE@[27; 28) WHITESPACE@[27; 28)
BLOCK_EXPR@[28; 31) BLOCK@[28; 31)
L_CURLY@[28; 29) L_CURLY@[28; 29)
WHITESPACE@[29; 30) WHITESPACE@[29; 30)
R_CURLY@[30; 31) R_CURLY@[30; 31)

View file

@ -5,69 +5,70 @@ FILE@[0; 74)
NAME@[7; 8) NAME@[7; 8)
IDENT@[7; 8) "S" IDENT@[7; 8) "S"
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
L_CURLY@[9; 10) NAMED_FIELD_DEF_LIST@[9; 73)
WHITESPACE@[10; 15) L_CURLY@[9; 10)
NAMED_FIELD@[15; 21) WHITESPACE@[10; 15)
NAME@[15; 16) NAMED_FIELD_DEF@[15; 21)
IDENT@[15; 16) "f" NAME@[15; 16)
COLON@[16; 17) IDENT@[15; 16) "f"
WHITESPACE@[17; 18) COLON@[16; 17)
PATH_TYPE@[18; 21) WHITESPACE@[17; 18)
PATH@[18; 21) PATH_TYPE@[18; 21)
PATH_SEGMENT@[18; 21) PATH@[18; 21)
NAME_REF@[18; 21) PATH_SEGMENT@[18; 21)
IDENT@[18; 21) "u32" NAME_REF@[18; 21)
COMMA@[21; 22) IDENT@[18; 21) "u32"
WHITESPACE@[22; 27) COMMA@[21; 22)
VISIBILITY@[27; 30) WHITESPACE@[22; 27)
PUB_KW@[27; 30) VISIBILITY@[27; 30)
WHITESPACE@[30; 31) PUB_KW@[27; 30)
err: `expected field declaration` WHITESPACE@[30; 31)
ERROR@[31; 33) err: `expected field declaration`
INT_NUMBER@[31; 33) "92" ERROR@[31; 33)
err: `expected COMMA` INT_NUMBER@[31; 33) "92"
WHITESPACE@[33; 38) err: `expected COMMA`
err: `expected field declaration` WHITESPACE@[33; 38)
ERROR@[38; 39) err: `expected field declaration`
PLUS@[38; 39) ERROR@[38; 39)
err: `expected COMMA` PLUS@[38; 39)
WHITESPACE@[39; 40) err: `expected COMMA`
err: `expected field declaration` WHITESPACE@[39; 40)
ERROR@[40; 41) err: `expected field declaration`
MINUS@[40; 41) ERROR@[40; 41)
err: `expected COMMA` MINUS@[40; 41)
WHITESPACE@[41; 42) err: `expected COMMA`
err: `expected field declaration` WHITESPACE@[41; 42)
ERROR@[42; 43) err: `expected field declaration`
STAR@[42; 43) ERROR@[42; 43)
err: `expected COMMA` STAR@[42; 43)
WHITESPACE@[43; 48) err: `expected COMMA`
NAMED_FIELD@[48; 58) WHITESPACE@[43; 48)
VISIBILITY@[48; 51) NAMED_FIELD_DEF@[48; 58)
PUB_KW@[48; 51) VISIBILITY@[48; 51)
WHITESPACE@[51; 52) PUB_KW@[48; 51)
NAME@[52; 53) WHITESPACE@[51; 52)
IDENT@[52; 53) "x" NAME@[52; 53)
COLON@[53; 54) IDENT@[52; 53) "x"
WHITESPACE@[54; 55) COLON@[53; 54)
PATH_TYPE@[55; 58) WHITESPACE@[54; 55)
PATH@[55; 58) PATH_TYPE@[55; 58)
PATH_SEGMENT@[55; 58) PATH@[55; 58)
NAME_REF@[55; 58) PATH_SEGMENT@[55; 58)
IDENT@[55; 58) "u32" NAME_REF@[55; 58)
COMMA@[58; 59) IDENT@[55; 58) "u32"
WHITESPACE@[59; 64) COMMA@[58; 59)
NAMED_FIELD@[64; 70) WHITESPACE@[59; 64)
NAME@[64; 65) NAMED_FIELD_DEF@[64; 70)
IDENT@[64; 65) "z" NAME@[64; 65)
COLON@[65; 66) IDENT@[64; 65) "z"
WHITESPACE@[66; 67) COLON@[65; 66)
PATH_TYPE@[67; 70) WHITESPACE@[66; 67)
PATH@[67; 70) PATH_TYPE@[67; 70)
PATH_SEGMENT@[67; 70) PATH@[67; 70)
NAME_REF@[67; 70) PATH_SEGMENT@[67; 70)
IDENT@[67; 70) "f64" NAME_REF@[67; 70)
COMMA@[70; 71) IDENT@[67; 70) "f64"
WHITESPACE@[71; 72) COMMA@[70; 71)
R_CURLY@[72; 73) WHITESPACE@[71; 72)
R_CURLY@[72; 73)
WHITESPACE@[73; 74) WHITESPACE@[73; 74)

View file

@ -22,7 +22,7 @@ FILE@[0; 31)
PARAM_LIST@[23; 25) PARAM_LIST@[23; 25)
L_PAREN@[23; 24) L_PAREN@[23; 24)
R_PAREN@[24; 25) R_PAREN@[24; 25)
BLOCK_EXPR@[25; 27) BLOCK@[25; 27)
L_CURLY@[25; 26) L_CURLY@[25; 26)
R_CURLY@[26; 27) R_CURLY@[26; 27)
WHITESPACE@[27; 29) WHITESPACE@[27; 29)

View file

@ -8,7 +8,7 @@ FILE@[0; 95)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 12) BLOCK@[9; 12)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 11) WHITESPACE@[10; 11)
R_CURLY@[11; 12) R_CURLY@[11; 12)
@ -32,23 +32,25 @@ FILE@[0; 95)
WHITESPACE@[28; 29) WHITESPACE@[28; 29)
TRUE_KW@[29; 33) TRUE_KW@[29; 33)
WHITESPACE@[33; 34) WHITESPACE@[33; 34)
L_CURLY@[34; 35) ERROR@[34; 51)
WHITESPACE@[35; 44) L_CURLY@[34; 35)
INT_NUMBER@[44; 45) "1" WHITESPACE@[35; 44)
WHITESPACE@[45; 50) INT_NUMBER@[44; 45) "1"
R_CURLY@[50; 51) WHITESPACE@[45; 50)
R_CURLY@[50; 51)
WHITESPACE@[51; 52) WHITESPACE@[51; 52)
ELSE_KW@[52; 56) ELSE_KW@[52; 56)
WHITESPACE@[56; 57) WHITESPACE@[56; 57)
L_CURLY@[57; 58) ERROR@[57; 78)
WHITESPACE@[58; 67) L_CURLY@[57; 58)
INT_NUMBER@[67; 68) "2" WHITESPACE@[58; 67)
WHITESPACE@[68; 69) INT_NUMBER@[67; 68) "2"
PLUS@[69; 70) WHITESPACE@[68; 69)
WHITESPACE@[70; 71) PLUS@[69; 70)
INT_NUMBER@[71; 72) "3" WHITESPACE@[70; 71)
WHITESPACE@[72; 77) INT_NUMBER@[71; 72) "3"
R_CURLY@[77; 78) WHITESPACE@[72; 77)
R_CURLY@[77; 78)
WHITESPACE@[78; 79) WHITESPACE@[78; 79)
R_CURLY@[79; 80) R_CURLY@[79; 80)
WHITESPACE@[80; 82) WHITESPACE@[80; 82)
@ -61,7 +63,7 @@ FILE@[0; 95)
L_PAREN@[88; 89) L_PAREN@[88; 89)
R_PAREN@[89; 90) R_PAREN@[89; 90)
WHITESPACE@[90; 91) WHITESPACE@[90; 91)
BLOCK_EXPR@[91; 94) BLOCK@[91; 94)
L_CURLY@[91; 92) L_CURLY@[91; 92)
WHITESPACE@[92; 93) WHITESPACE@[92; 93)
R_CURLY@[93; 94) R_CURLY@[93; 94)

View file

@ -8,7 +8,7 @@ FILE@[0; 42)
L_PAREN@[7; 8) L_PAREN@[7; 8)
R_PAREN@[8; 9) R_PAREN@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
BLOCK_EXPR@[10; 41) BLOCK@[10; 41)
L_CURLY@[10; 11) L_CURLY@[10; 11)
WHITESPACE@[11; 16) WHITESPACE@[11; 16)
LAMBDA_EXPR@[16; 24) LAMBDA_EXPR@[16; 24)
@ -21,19 +21,20 @@ FILE@[0; 42)
TUPLE_TYPE@[22; 24) TUPLE_TYPE@[22; 24)
L_PAREN@[22; 23) L_PAREN@[22; 23)
R_PAREN@[23; 24) R_PAREN@[23; 24)
err: `expected block` err: `expected a block`
WHITESPACE@[24; 25) WHITESPACE@[24; 25)
EXPR_STMT@[25; 39) EXPR_STMT@[25; 39)
BLOCK_EXPR@[25; 38) BLOCK_EXPR@[25; 38)
UNSAFE_KW@[25; 31) UNSAFE_KW@[25; 31)
WHITESPACE@[31; 32) WHITESPACE@[31; 32)
L_CURLY@[32; 33) BLOCK@[32; 38)
WHITESPACE@[33; 34) L_CURLY@[32; 33)
TUPLE_EXPR@[34; 36) WHITESPACE@[33; 34)
L_PAREN@[34; 35) TUPLE_EXPR@[34; 36)
R_PAREN@[35; 36) L_PAREN@[34; 35)
WHITESPACE@[36; 37) R_PAREN@[35; 36)
R_CURLY@[37; 38) WHITESPACE@[36; 37)
R_CURLY@[37; 38)
SEMI@[38; 39) SEMI@[38; 39)
WHITESPACE@[39; 40) WHITESPACE@[39; 40)
R_CURLY@[40; 41) R_CURLY@[40; 41)

View file

@ -7,76 +7,77 @@ FILE@[0; 86)
WHITESPACE@[10; 11) WHITESPACE@[10; 11)
NAME@[11; 16) NAME@[11; 16)
IDENT@[11; 16) "Cache" IDENT@[11; 16) "Cache"
L_PAREN@[16; 17) POS_FIELD_LIST@[16; 83)
WHITESPACE@[17; 22) L_PAREN@[16; 17)
POS_FIELD@[22; 68) WHITESPACE@[17; 22)
PATH_TYPE@[22; 68) POS_FIELD@[22; 68)
PATH@[22; 68) PATH_TYPE@[22; 68)
PATH_SEGMENT@[22; 68) PATH@[22; 68)
NAME_REF@[22; 29) PATH_SEGMENT@[22; 68)
IDENT@[22; 29) "RefCell" NAME_REF@[22; 29)
TYPE_ARG_LIST@[29; 68) IDENT@[22; 29) "RefCell"
L_ANGLE@[29; 30) TYPE_ARG_LIST@[29; 68)
TYPE_ARG@[30; 68) L_ANGLE@[29; 30)
PATH_TYPE@[30; 68) TYPE_ARG@[30; 68)
PATH@[30; 68) PATH_TYPE@[30; 68)
PATH_SEGMENT@[30; 68) PATH@[30; 68)
NAME_REF@[30; 37) PATH_SEGMENT@[30; 68)
IDENT@[30; 37) "HashMap" NAME_REF@[30; 37)
TYPE_ARG_LIST@[37; 68) IDENT@[30; 37) "HashMap"
L_ANGLE@[37; 38) TYPE_ARG_LIST@[37; 68)
WHITESPACE@[38; 47) L_ANGLE@[37; 38)
TYPE_ARG@[47; 53) WHITESPACE@[38; 47)
PATH_TYPE@[47; 53) TYPE_ARG@[47; 53)
PATH@[47; 53) PATH_TYPE@[47; 53)
PATH_SEGMENT@[47; 53) PATH@[47; 53)
NAME_REF@[47; 53) PATH_SEGMENT@[47; 53)
IDENT@[47; 53) "TypeId" NAME_REF@[47; 53)
COMMA@[53; 54) IDENT@[47; 53) "TypeId"
WHITESPACE@[54; 63) COMMA@[53; 54)
TYPE_ARG@[63; 68) WHITESPACE@[54; 63)
PATH_TYPE@[63; 68) TYPE_ARG@[63; 68)
PATH@[63; 68) PATH_TYPE@[63; 68)
PATH_SEGMENT@[63; 68) PATH@[63; 68)
NAME_REF@[63; 66) PATH_SEGMENT@[63; 68)
IDENT@[63; 66) "Box" NAME_REF@[63; 66)
TYPE_ARG_LIST@[66; 68) IDENT@[63; 66) "Box"
L_ANGLE@[66; 67) TYPE_ARG_LIST@[66; 68)
err: `expected type` L_ANGLE@[66; 67)
TYPE_ARG@[67; 68) err: `expected type`
ERROR@[67; 68) TYPE_ARG@[67; 68)
AT@[67; 68) ERROR@[67; 68)
err: `expected COMMA` AT@[67; 68)
err: `expected R_ANGLE` err: `expected COMMA`
err: `expected COMMA` err: `expected R_ANGLE`
err: `expected R_ANGLE` err: `expected COMMA`
err: `expected COMMA` err: `expected R_ANGLE`
err: `expected R_ANGLE` err: `expected COMMA`
err: `expected COMMA` err: `expected R_ANGLE`
WHITESPACE@[68; 69) err: `expected COMMA`
POS_FIELD@[69; 72) WHITESPACE@[68; 69)
PATH_TYPE@[69; 72) POS_FIELD@[69; 72)
PATH@[69; 72) PATH_TYPE@[69; 72)
PATH_SEGMENT@[69; 72) PATH@[69; 72)
NAME_REF@[69; 72) PATH_SEGMENT@[69; 72)
IDENT@[69; 72) "Any" NAME_REF@[69; 72)
err: `expected COMMA` IDENT@[69; 72) "Any"
err: `expected type` err: `expected COMMA`
POS_FIELD@[72; 73) err: `expected type`
ERROR@[72; 73) POS_FIELD@[72; 73)
R_ANGLE@[72; 73) ERROR@[72; 73)
COMMA@[73; 74) R_ANGLE@[72; 73)
WHITESPACE@[74; 79) COMMA@[73; 74)
err: `expected type` WHITESPACE@[74; 79)
POS_FIELD@[79; 80) err: `expected type`
ERROR@[79; 80) POS_FIELD@[79; 80)
R_ANGLE@[79; 80) ERROR@[79; 80)
err: `expected COMMA` R_ANGLE@[79; 80)
err: `expected type` err: `expected COMMA`
POS_FIELD@[80; 81) err: `expected type`
ERROR@[80; 81) POS_FIELD@[80; 81)
R_ANGLE@[80; 81) ERROR@[80; 81)
WHITESPACE@[81; 82) R_ANGLE@[80; 81)
R_PAREN@[82; 83) WHITESPACE@[81; 82)
R_PAREN@[82; 83)
SEMI@[83; 84) SEMI@[83; 84)
WHITESPACE@[84; 86) WHITESPACE@[84; 86)

View file

@ -25,7 +25,7 @@ FILE@[0; 23)
IDENT@[18; 19) "T" IDENT@[18; 19) "T"
err: `expected colon` err: `expected colon`
WHITESPACE@[19; 20) WHITESPACE@[19; 20)
BLOCK_EXPR@[20; 22) BLOCK@[20; 22)
L_CURLY@[20; 21) L_CURLY@[20; 21)
R_CURLY@[21; 22) R_CURLY@[21; 22)
WHITESPACE@[22; 23) WHITESPACE@[22; 23)

View file

@ -12,7 +12,7 @@ FILE@[0; 25)
L_PAREN@[19; 20) L_PAREN@[19; 20)
R_PAREN@[20; 21) R_PAREN@[20; 21)
WHITESPACE@[21; 22) WHITESPACE@[21; 22)
BLOCK_EXPR@[22; 24) BLOCK@[22; 24)
L_CURLY@[22; 23) L_CURLY@[22; 23)
R_CURLY@[23; 24) R_CURLY@[23; 24)
WHITESPACE@[24; 25) WHITESPACE@[24; 25)

View file

@ -10,7 +10,7 @@ FILE@[0; 18)
L_PAREN@[12; 13) L_PAREN@[12; 13)
R_PAREN@[13; 14) R_PAREN@[13; 14)
WHITESPACE@[14; 15) WHITESPACE@[14; 15)
BLOCK_EXPR@[15; 17) BLOCK@[15; 17)
L_CURLY@[15; 16) L_CURLY@[15; 16)
R_CURLY@[16; 17) R_CURLY@[16; 17)
WHITESPACE@[17; 18) WHITESPACE@[17; 18)

View file

@ -1,8 +1,9 @@
FILE@[0; 10) FILE@[0; 10)
EXTERN_BLOCK_EXPR@[0; 9) EXTERN_BLOCK@[0; 9)
ABI@[0; 6) ABI@[0; 6)
EXTERN_KW@[0; 6) EXTERN_KW@[0; 6)
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
L_CURLY@[7; 8) EXTERN_ITEM_LIST@[7; 9)
R_CURLY@[8; 9) L_CURLY@[7; 8)
R_CURLY@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)

View file

@ -11,7 +11,7 @@ FILE@[0; 19)
L_PAREN@[13; 14) L_PAREN@[13; 14)
R_PAREN@[14; 15) R_PAREN@[14; 15)
WHITESPACE@[15; 16) WHITESPACE@[15; 16)
BLOCK_EXPR@[16; 18) BLOCK@[16; 18)
L_CURLY@[16; 17) L_CURLY@[16; 17)
R_CURLY@[17; 18) R_CURLY@[17; 18)
WHITESPACE@[18; 19) WHITESPACE@[18; 19)

View file

@ -7,6 +7,7 @@ FILE@[0; 18)
NAME@[13; 14) NAME@[13; 14)
IDENT@[13; 14) "T" IDENT@[13; 14) "T"
WHITESPACE@[14; 15) WHITESPACE@[14; 15)
L_CURLY@[15; 16) ITEM_LIST@[15; 17)
R_CURLY@[16; 17) L_CURLY@[15; 16)
R_CURLY@[16; 17)
WHITESPACE@[17; 18) WHITESPACE@[17; 18)

View file

@ -10,6 +10,7 @@ FILE@[0; 19)
NAME_REF@[12; 15) NAME_REF@[12; 15)
IDENT@[12; 15) "Foo" IDENT@[12; 15) "Foo"
WHITESPACE@[15; 16) WHITESPACE@[15; 16)
L_CURLY@[16; 17) ITEM_LIST@[16; 18)
R_CURLY@[17; 18) L_CURLY@[16; 17)
R_CURLY@[17; 18)
WHITESPACE@[18; 19) WHITESPACE@[18; 19)

View file

@ -9,6 +9,7 @@ FILE@[0; 23)
NAME@[18; 19) NAME@[18; 19)
IDENT@[18; 19) "T" IDENT@[18; 19) "T"
WHITESPACE@[19; 20) WHITESPACE@[19; 20)
L_CURLY@[20; 21) ITEM_LIST@[20; 22)
R_CURLY@[21; 22) L_CURLY@[20; 21)
R_CURLY@[21; 22)
WHITESPACE@[22; 23) WHITESPACE@[22; 23)

View file

@ -12,6 +12,7 @@ FILE@[0; 27)
NAME_REF@[20; 23) NAME_REF@[20; 23)
IDENT@[20; 23) "Foo" IDENT@[20; 23) "Foo"
WHITESPACE@[23; 24) WHITESPACE@[23; 24)
L_CURLY@[24; 25) ITEM_LIST@[24; 26)
R_CURLY@[25; 26) L_CURLY@[24; 25)
R_CURLY@[25; 26)
WHITESPACE@[26; 27) WHITESPACE@[26; 27)

View file

@ -10,7 +10,7 @@ FILE@[0; 19)
L_PAREN@[13; 14) L_PAREN@[13; 14)
R_PAREN@[14; 15) R_PAREN@[14; 15)
WHITESPACE@[15; 16) WHITESPACE@[15; 16)
BLOCK_EXPR@[16; 18) BLOCK@[16; 18)
L_CURLY@[16; 17) L_CURLY@[16; 17)
R_CURLY@[17; 18) R_CURLY@[17; 18)
WHITESPACE@[18; 19) WHITESPACE@[18; 19)

View file

@ -15,7 +15,7 @@ FILE@[0; 30)
L_PAREN@[24; 25) L_PAREN@[24; 25)
R_PAREN@[25; 26) R_PAREN@[25; 26)
WHITESPACE@[26; 27) WHITESPACE@[26; 27)
BLOCK_EXPR@[27; 29) BLOCK@[27; 29)
L_CURLY@[27; 28) L_CURLY@[27; 28)
R_CURLY@[28; 29) R_CURLY@[28; 29)
WHITESPACE@[29; 30) WHITESPACE@[29; 30)

View file

@ -7,7 +7,7 @@ FILE@[0; 33)
PARAM_LIST@[6; 8) PARAM_LIST@[6; 8)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
BLOCK_EXPR@[8; 10) BLOCK@[8; 10)
L_CURLY@[8; 9) L_CURLY@[8; 9)
R_CURLY@[9; 10) R_CURLY@[9; 10)
WHITESPACE@[10; 11) WHITESPACE@[10; 11)
@ -29,7 +29,7 @@ FILE@[0; 33)
PARAM_LIST@[28; 30) PARAM_LIST@[28; 30)
L_PAREN@[28; 29) L_PAREN@[28; 29)
R_PAREN@[29; 30) R_PAREN@[29; 30)
BLOCK_EXPR@[30; 32) BLOCK@[30; 32)
L_CURLY@[30; 31) L_CURLY@[30; 31)
R_CURLY@[31; 32) R_CURLY@[31; 32)
WHITESPACE@[32; 33) WHITESPACE@[32; 33)

View file

@ -8,7 +8,7 @@ FILE@[0; 146)
L_PAREN@[7; 8) L_PAREN@[7; 8)
R_PAREN@[8; 9) R_PAREN@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
BLOCK_EXPR@[10; 145) BLOCK@[10; 145)
L_CURLY@[10; 11) L_CURLY@[10; 11)
WHITESPACE@[11; 16) WHITESPACE@[11; 16)
LET_STMT@[16; 27) LET_STMT@[16; 27)

View file

@ -8,7 +8,7 @@ FILE@[0; 52)
L_PAREN@[7; 8) L_PAREN@[7; 8)
R_PAREN@[8; 9) R_PAREN@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
BLOCK_EXPR@[10; 51) BLOCK@[10; 51)
L_CURLY@[10; 11) L_CURLY@[10; 11)
WHITESPACE@[11; 16) WHITESPACE@[11; 16)
LET_STMT@[16; 28) LET_STMT@[16; 28)

View file

@ -8,7 +8,7 @@ FILE@[0; 26)
L_PAREN@[7; 8) L_PAREN@[7; 8)
R_PAREN@[8; 9) R_PAREN@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
BLOCK_EXPR@[10; 25) BLOCK@[10; 25)
L_CURLY@[10; 11) L_CURLY@[10; 11)
WHITESPACE@[11; 12) WHITESPACE@[11; 12)
LET_STMT@[12; 23) LET_STMT@[12; 23)

View file

@ -8,7 +8,7 @@ FILE@[0; 30)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 11) BLOCK@[9; 11)
L_CURLY@[9; 10) L_CURLY@[9; 10)
R_CURLY@[10; 11) R_CURLY@[10; 11)
WHITESPACE@[11; 12) WHITESPACE@[11; 12)
@ -27,7 +27,7 @@ FILE@[0; 30)
L_PAREN@[24; 25) L_PAREN@[24; 25)
R_PAREN@[25; 26) R_PAREN@[25; 26)
WHITESPACE@[26; 27) WHITESPACE@[26; 27)
BLOCK_EXPR@[27; 29) BLOCK@[27; 29)
L_CURLY@[27; 28) L_CURLY@[27; 28)
R_CURLY@[28; 29) R_CURLY@[28; 29)
WHITESPACE@[29; 30) WHITESPACE@[29; 30)

View file

@ -8,7 +8,7 @@ FILE@[0; 91)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 90) BLOCK@[9; 90)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
LET_STMT@[15; 25) LET_STMT@[15; 25)

View file

@ -8,7 +8,7 @@ FILE@[0; 189)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 188) BLOCK@[9; 188)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
LET_STMT@[15; 28) LET_STMT@[15; 28)

View file

@ -8,7 +8,7 @@ FILE@[0; 57)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 56) BLOCK@[9; 56)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
LET_STMT@[15; 27) LET_STMT@[15; 27)

View file

@ -8,7 +8,7 @@ FILE@[0; 52)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 51) BLOCK@[9; 51)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
LET_STMT@[15; 26) LET_STMT@[15; 26)

View file

@ -8,7 +8,7 @@ FILE@[0; 65)
L_PAREN@[4; 5) L_PAREN@[4; 5)
R_PAREN@[5; 6) R_PAREN@[5; 6)
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
BLOCK_EXPR@[7; 9) BLOCK@[7; 9)
L_CURLY@[7; 8) L_CURLY@[7; 8)
R_CURLY@[8; 9) R_CURLY@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
@ -21,7 +21,7 @@ FILE@[0; 65)
L_PAREN@[14; 15) L_PAREN@[14; 15)
R_PAREN@[15; 16) R_PAREN@[15; 16)
WHITESPACE@[16; 17) WHITESPACE@[16; 17)
BLOCK_EXPR@[17; 31) BLOCK@[17; 31)
L_CURLY@[17; 18) L_CURLY@[17; 18)
WHITESPACE@[18; 19) WHITESPACE@[18; 19)
LET_STMT@[19; 29) LET_STMT@[19; 29)
@ -47,7 +47,7 @@ FILE@[0; 65)
L_PAREN@[36; 37) L_PAREN@[36; 37)
R_PAREN@[37; 38) R_PAREN@[37; 38)
WHITESPACE@[38; 39) WHITESPACE@[38; 39)
BLOCK_EXPR@[39; 48) BLOCK@[39; 48)
L_CURLY@[39; 40) L_CURLY@[39; 40)
WHITESPACE@[40; 41) WHITESPACE@[40; 41)
EXPR_STMT@[41; 43) EXPR_STMT@[41; 43)
@ -71,7 +71,7 @@ FILE@[0; 65)
L_PAREN@[53; 54) L_PAREN@[53; 54)
R_PAREN@[54; 55) R_PAREN@[54; 55)
WHITESPACE@[55; 56) WHITESPACE@[55; 56)
BLOCK_EXPR@[56; 64) BLOCK@[56; 64)
L_CURLY@[56; 57) L_CURLY@[56; 57)
WHITESPACE@[57; 58) WHITESPACE@[57; 58)
EXPR_STMT@[58; 60) EXPR_STMT@[58; 60)

View file

@ -10,6 +10,7 @@ FILE@[0; 20)
NAME_REF@[13; 16) NAME_REF@[13; 16)
IDENT@[13; 16) "Foo" IDENT@[13; 16) "Foo"
WHITESPACE@[16; 17) WHITESPACE@[16; 17)
L_CURLY@[17; 18) ITEM_LIST@[17; 19)
R_CURLY@[18; 19) L_CURLY@[17; 18)
R_CURLY@[18; 19)
WHITESPACE@[19; 20) WHITESPACE@[19; 20)

View file

@ -8,6 +8,7 @@ FILE@[0; 12)
NAME_REF@[5; 8) NAME_REF@[5; 8)
IDENT@[5; 8) "Foo" IDENT@[5; 8) "Foo"
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
L_CURLY@[9; 10) ITEM_LIST@[9; 11)
R_CURLY@[10; 11) L_CURLY@[9; 10)
R_CURLY@[10; 11)
WHITESPACE@[11; 12) WHITESPACE@[11; 12)

View file

@ -17,6 +17,7 @@ FILE@[0; 20)
NAME_REF@[15; 16) NAME_REF@[15; 16)
IDENT@[15; 16) "X" IDENT@[15; 16) "X"
WHITESPACE@[16; 17) WHITESPACE@[16; 17)
L_CURLY@[17; 18) ITEM_LIST@[17; 19)
R_CURLY@[18; 19) L_CURLY@[17; 18)
R_CURLY@[18; 19)
WHITESPACE@[19; 20) WHITESPACE@[19; 20)

View file

@ -8,7 +8,7 @@ FILE@[0; 77)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 76) BLOCK@[9; 76)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
LET_STMT@[15; 21) LET_STMT@[15; 21)

View file

@ -8,7 +8,7 @@ FILE@[0; 49)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 48) BLOCK@[9; 48)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 23) EXPR_STMT@[15; 23)

View file

@ -8,7 +8,7 @@ FILE@[0; 37)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 36) BLOCK@[9; 36)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 21) EXPR_STMT@[15; 21)

View file

@ -8,7 +8,7 @@ FILE@[0; 21)
L_PAREN@[4; 5) L_PAREN@[4; 5)
R_PAREN@[5; 6) R_PAREN@[5; 6)
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
BLOCK_EXPR@[7; 20) BLOCK@[7; 20)
L_CURLY@[7; 8) L_CURLY@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
FN_DEF@[9; 18) FN_DEF@[9; 18)
@ -20,7 +20,7 @@ FILE@[0; 21)
L_PAREN@[13; 14) L_PAREN@[13; 14)
R_PAREN@[14; 15) R_PAREN@[14; 15)
WHITESPACE@[15; 16) WHITESPACE@[15; 16)
BLOCK_EXPR@[16; 18) BLOCK@[16; 18)
L_CURLY@[16; 17) L_CURLY@[16; 17)
R_CURLY@[17; 18) R_CURLY@[17; 18)
WHITESPACE@[18; 19) WHITESPACE@[18; 19)

View file

@ -8,70 +8,71 @@ FILE@[0; 89)
NAME_REF@[5; 6) NAME_REF@[5; 6)
IDENT@[5; 6) "F" IDENT@[5; 6) "F"
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
L_CURLY@[7; 8) ITEM_LIST@[7; 88)
WHITESPACE@[8; 13) L_CURLY@[7; 8)
TYPE_DEF@[13; 26) WHITESPACE@[8; 13)
TYPE_KW@[13; 17) TYPE_DEF@[13; 26)
WHITESPACE@[17; 18) TYPE_KW@[13; 17)
NAME@[18; 19) WHITESPACE@[17; 18)
IDENT@[18; 19) "A" NAME@[18; 19)
WHITESPACE@[19; 20) IDENT@[18; 19) "A"
EQ@[20; 21) WHITESPACE@[19; 20)
WHITESPACE@[21; 22) EQ@[20; 21)
PATH_TYPE@[22; 25) WHITESPACE@[21; 22)
PATH@[22; 25) PATH_TYPE@[22; 25)
PATH_SEGMENT@[22; 25) PATH@[22; 25)
NAME_REF@[22; 25) PATH_SEGMENT@[22; 25)
IDENT@[22; 25) "i32" NAME_REF@[22; 25)
SEMI@[25; 26) IDENT@[22; 25) "i32"
WHITESPACE@[26; 31) SEMI@[25; 26)
CONST_DEF@[31; 49) WHITESPACE@[26; 31)
CONST_KW@[31; 36) CONST_DEF@[31; 49)
WHITESPACE@[36; 37) CONST_KW@[31; 36)
NAME@[37; 38) WHITESPACE@[36; 37)
IDENT@[37; 38) "B" NAME@[37; 38)
COLON@[38; 39) IDENT@[37; 38) "B"
WHITESPACE@[39; 40) COLON@[38; 39)
PATH_TYPE@[40; 43) WHITESPACE@[39; 40)
PATH@[40; 43) PATH_TYPE@[40; 43)
PATH_SEGMENT@[40; 43) PATH@[40; 43)
NAME_REF@[40; 43) PATH_SEGMENT@[40; 43)
IDENT@[40; 43) "i32" NAME_REF@[40; 43)
WHITESPACE@[43; 44) IDENT@[40; 43) "i32"
EQ@[44; 45) WHITESPACE@[43; 44)
WHITESPACE@[45; 46) EQ@[44; 45)
LITERAL@[46; 48) WHITESPACE@[45; 46)
INT_NUMBER@[46; 48) "92" LITERAL@[46; 48)
SEMI@[48; 49) INT_NUMBER@[46; 48) "92"
WHITESPACE@[49; 54) SEMI@[48; 49)
FN_DEF@[54; 65) WHITESPACE@[49; 54)
FN_KW@[54; 56) FN_DEF@[54; 65)
WHITESPACE@[56; 57) FN_KW@[54; 56)
NAME@[57; 60) WHITESPACE@[56; 57)
IDENT@[57; 60) "foo" NAME@[57; 60)
PARAM_LIST@[60; 62) IDENT@[57; 60) "foo"
L_PAREN@[60; 61) PARAM_LIST@[60; 62)
R_PAREN@[61; 62) L_PAREN@[60; 61)
WHITESPACE@[62; 63) R_PAREN@[61; 62)
BLOCK_EXPR@[63; 65) WHITESPACE@[62; 63)
L_CURLY@[63; 64) BLOCK@[63; 65)
R_CURLY@[64; 65) L_CURLY@[63; 64)
WHITESPACE@[65; 70) R_CURLY@[64; 65)
FN_DEF@[70; 86) WHITESPACE@[65; 70)
FN_KW@[70; 72) FN_DEF@[70; 86)
WHITESPACE@[72; 73) FN_KW@[70; 72)
NAME@[73; 76) WHITESPACE@[72; 73)
IDENT@[73; 76) "bar" NAME@[73; 76)
PARAM_LIST@[76; 83) IDENT@[73; 76) "bar"
L_PAREN@[76; 77) PARAM_LIST@[76; 83)
SELF_PARAM@[77; 82) L_PAREN@[76; 77)
AMP@[77; 78) SELF_PARAM@[77; 82)
SELF_KW@[78; 82) AMP@[77; 78)
R_PAREN@[82; 83) SELF_KW@[78; 82)
WHITESPACE@[83; 84) R_PAREN@[82; 83)
BLOCK_EXPR@[84; 86) WHITESPACE@[83; 84)
L_CURLY@[84; 85) BLOCK@[84; 86)
R_CURLY@[85; 86) L_CURLY@[84; 85)
WHITESPACE@[86; 87) R_CURLY@[85; 86)
R_CURLY@[87; 88) WHITESPACE@[86; 87)
R_CURLY@[87; 88)
WHITESPACE@[88; 89) WHITESPACE@[88; 89)

View file

@ -8,108 +8,109 @@ FILE@[0; 128)
NAME_REF@[5; 6) NAME_REF@[5; 6)
IDENT@[5; 6) "S" IDENT@[5; 6) "S"
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
L_CURLY@[7; 8) ITEM_LIST@[7; 127)
WHITESPACE@[8; 13) L_CURLY@[7; 8)
FN_DEF@[13; 26) WHITESPACE@[8; 13)
FN_KW@[13; 15) FN_DEF@[13; 26)
WHITESPACE@[15; 16) FN_KW@[13; 15)
NAME@[16; 17) WHITESPACE@[15; 16)
IDENT@[16; 17) "a" NAME@[16; 17)
PARAM_LIST@[17; 23) IDENT@[16; 17) "a"
L_PAREN@[17; 18) PARAM_LIST@[17; 23)
SELF_PARAM@[18; 22) L_PAREN@[17; 18)
SELF_KW@[18; 22) SELF_PARAM@[18; 22)
R_PAREN@[22; 23) SELF_KW@[18; 22)
WHITESPACE@[23; 24) R_PAREN@[22; 23)
BLOCK_EXPR@[24; 26) WHITESPACE@[23; 24)
L_CURLY@[24; 25) BLOCK@[24; 26)
R_CURLY@[25; 26) L_CURLY@[24; 25)
WHITESPACE@[26; 31) R_CURLY@[25; 26)
FN_DEF@[31; 46) WHITESPACE@[26; 31)
FN_KW@[31; 33) FN_DEF@[31; 46)
WHITESPACE@[33; 34) FN_KW@[31; 33)
NAME@[34; 35) WHITESPACE@[33; 34)
IDENT@[34; 35) "b" NAME@[34; 35)
PARAM_LIST@[35; 43) IDENT@[34; 35) "b"
L_PAREN@[35; 36) PARAM_LIST@[35; 43)
SELF_PARAM@[36; 41) L_PAREN@[35; 36)
AMP@[36; 37) SELF_PARAM@[36; 41)
SELF_KW@[37; 41) AMP@[36; 37)
COMMA@[41; 42) SELF_KW@[37; 41)
R_PAREN@[42; 43) COMMA@[41; 42)
WHITESPACE@[43; 44) R_PAREN@[42; 43)
BLOCK_EXPR@[44; 46) WHITESPACE@[43; 44)
L_CURLY@[44; 45) BLOCK@[44; 46)
R_CURLY@[45; 46) L_CURLY@[44; 45)
WHITESPACE@[46; 51) R_CURLY@[45; 46)
FN_DEF@[51; 69) WHITESPACE@[46; 51)
FN_KW@[51; 53) FN_DEF@[51; 69)
WHITESPACE@[53; 54) FN_KW@[51; 53)
NAME@[54; 55) WHITESPACE@[53; 54)
IDENT@[54; 55) "c" NAME@[54; 55)
PARAM_LIST@[55; 66) IDENT@[54; 55) "c"
L_PAREN@[55; 56) PARAM_LIST@[55; 66)
SELF_PARAM@[56; 64) L_PAREN@[55; 56)
AMP@[56; 57) SELF_PARAM@[56; 64)
LIFETIME@[57; 59) "'a" AMP@[56; 57)
WHITESPACE@[59; 60) LIFETIME@[57; 59) "'a"
SELF_KW@[60; 64) WHITESPACE@[59; 60)
COMMA@[64; 65) SELF_KW@[60; 64)
R_PAREN@[65; 66) COMMA@[64; 65)
WHITESPACE@[66; 67) R_PAREN@[65; 66)
BLOCK_EXPR@[67; 69) WHITESPACE@[66; 67)
L_CURLY@[67; 68) BLOCK@[67; 69)
R_CURLY@[68; 69) L_CURLY@[67; 68)
WHITESPACE@[69; 74) R_CURLY@[68; 69)
FN_DEF@[74; 103) WHITESPACE@[69; 74)
FN_KW@[74; 76) FN_DEF@[74; 103)
WHITESPACE@[76; 77) FN_KW@[74; 76)
NAME@[77; 78) WHITESPACE@[76; 77)
IDENT@[77; 78) "d" NAME@[77; 78)
PARAM_LIST@[78; 100) IDENT@[77; 78) "d"
L_PAREN@[78; 79) PARAM_LIST@[78; 100)
SELF_PARAM@[79; 91) L_PAREN@[78; 79)
AMP@[79; 80) SELF_PARAM@[79; 91)
LIFETIME@[80; 82) "'a" AMP@[79; 80)
WHITESPACE@[82; 83) LIFETIME@[80; 82) "'a"
MUT_KW@[83; 86) WHITESPACE@[82; 83)
WHITESPACE@[86; 87) MUT_KW@[83; 86)
SELF_KW@[87; 91) WHITESPACE@[86; 87)
COMMA@[91; 92) SELF_KW@[87; 91)
WHITESPACE@[92; 93) COMMA@[91; 92)
PARAM@[93; 99) WHITESPACE@[92; 93)
BIND_PAT@[93; 94) PARAM@[93; 99)
NAME@[93; 94) BIND_PAT@[93; 94)
IDENT@[93; 94) "x" NAME@[93; 94)
COLON@[94; 95) IDENT@[93; 94) "x"
WHITESPACE@[95; 96) COLON@[94; 95)
PATH_TYPE@[96; 99) WHITESPACE@[95; 96)
PATH@[96; 99) PATH_TYPE@[96; 99)
PATH_SEGMENT@[96; 99) PATH@[96; 99)
NAME_REF@[96; 99) PATH_SEGMENT@[96; 99)
IDENT@[96; 99) "i32" NAME_REF@[96; 99)
R_PAREN@[99; 100) IDENT@[96; 99) "i32"
WHITESPACE@[100; 101) R_PAREN@[99; 100)
BLOCK_EXPR@[101; 103) WHITESPACE@[100; 101)
L_CURLY@[101; 102) BLOCK@[101; 103)
R_CURLY@[102; 103) L_CURLY@[101; 102)
WHITESPACE@[103; 108) R_CURLY@[102; 103)
FN_DEF@[108; 125) WHITESPACE@[103; 108)
FN_KW@[108; 110) FN_DEF@[108; 125)
WHITESPACE@[110; 111) FN_KW@[108; 110)
NAME@[111; 112) WHITESPACE@[110; 111)
IDENT@[111; 112) "e" NAME@[111; 112)
PARAM_LIST@[112; 122) IDENT@[111; 112) "e"
L_PAREN@[112; 113) PARAM_LIST@[112; 122)
SELF_PARAM@[113; 121) L_PAREN@[112; 113)
MUT_KW@[113; 116) SELF_PARAM@[113; 121)
WHITESPACE@[116; 117) MUT_KW@[113; 116)
SELF_KW@[117; 121) WHITESPACE@[116; 117)
R_PAREN@[121; 122) SELF_KW@[117; 121)
WHITESPACE@[122; 123) R_PAREN@[121; 122)
BLOCK_EXPR@[123; 125) WHITESPACE@[122; 123)
L_CURLY@[123; 124) BLOCK@[123; 125)
R_CURLY@[124; 125) L_CURLY@[123; 124)
WHITESPACE@[125; 126) R_CURLY@[124; 125)
R_CURLY@[126; 127) WHITESPACE@[125; 126)
R_CURLY@[126; 127)
WHITESPACE@[127; 128) WHITESPACE@[127; 128)

View file

@ -40,6 +40,7 @@ FILE@[0; 42)
NAME_REF@[34; 38) NAME_REF@[34; 38)
IDENT@[34; 38) "Copy" IDENT@[34; 38) "Copy"
WHITESPACE@[38; 39) WHITESPACE@[38; 39)
L_CURLY@[39; 40) ITEM_LIST@[39; 41)
R_CURLY@[40; 41) L_CURLY@[39; 40)
R_CURLY@[40; 41)
WHITESPACE@[41; 42) WHITESPACE@[41; 42)

View file

@ -7,6 +7,7 @@ FILE@[0; 16)
NAME@[11; 12) NAME@[11; 12)
IDENT@[11; 12) "T" IDENT@[11; 12) "T"
WHITESPACE@[12; 13) WHITESPACE@[12; 13)
L_CURLY@[13; 14) ITEM_LIST@[13; 15)
R_CURLY@[14; 15) L_CURLY@[13; 14)
R_CURLY@[14; 15)
WHITESPACE@[15; 16) WHITESPACE@[15; 16)

View file

@ -30,7 +30,7 @@ FILE@[0; 29)
NAME_REF@[21; 25) NAME_REF@[21; 25)
IDENT@[21; 25) "Copy" IDENT@[21; 25) "Copy"
WHITESPACE@[25; 26) WHITESPACE@[25; 26)
BLOCK_EXPR@[26; 28) BLOCK@[26; 28)
L_CURLY@[26; 27) L_CURLY@[26; 27)
R_CURLY@[27; 28) R_CURLY@[27; 28)
WHITESPACE@[28; 29) WHITESPACE@[28; 29)

View file

@ -26,7 +26,7 @@ FILE@[0; 28)
PARAM_LIST@[23; 25) PARAM_LIST@[23; 25)
L_PAREN@[23; 24) L_PAREN@[23; 24)
R_PAREN@[24; 25) R_PAREN@[24; 25)
BLOCK_EXPR@[25; 27) BLOCK@[25; 27)
L_CURLY@[25; 26) L_CURLY@[25; 26)
R_CURLY@[26; 27) R_CURLY@[26; 27)
WHITESPACE@[27; 28) WHITESPACE@[27; 28)

View file

@ -8,7 +8,7 @@ FILE@[0; 86)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 85) BLOCK@[9; 85)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 20) EXPR_STMT@[15; 20)
@ -18,8 +18,9 @@ FILE@[0; 86)
NAME_REF@[15; 16) NAME_REF@[15; 16)
IDENT@[15; 16) "S" IDENT@[15; 16) "S"
WHITESPACE@[16; 17) WHITESPACE@[16; 17)
L_CURLY@[17; 18) NAMED_FIELD_LIST@[17; 19)
R_CURLY@[18; 19) L_CURLY@[17; 18)
R_CURLY@[18; 19)
SEMI@[19; 20) SEMI@[19; 20)
WHITESPACE@[20; 25) WHITESPACE@[20; 25)
EXPR_STMT@[25; 41) EXPR_STMT@[25; 41)
@ -29,23 +30,24 @@ FILE@[0; 86)
NAME_REF@[25; 26) NAME_REF@[25; 26)
IDENT@[25; 26) "S" IDENT@[25; 26) "S"
WHITESPACE@[26; 27) WHITESPACE@[26; 27)
L_CURLY@[27; 28) NAMED_FIELD_LIST@[27; 40)
WHITESPACE@[28; 29) L_CURLY@[27; 28)
STRUCT_LIT_FIELD@[29; 30) WHITESPACE@[28; 29)
NAME_REF@[29; 30) NAMED_FIELD@[29; 30)
IDENT@[29; 30) "x" NAME_REF@[29; 30)
COMMA@[30; 31) IDENT@[29; 30) "x"
WHITESPACE@[31; 32) COMMA@[30; 31)
STRUCT_LIT_FIELD@[32; 37) WHITESPACE@[31; 32)
NAME_REF@[32; 33) NAMED_FIELD@[32; 37)
IDENT@[32; 33) "y" NAME_REF@[32; 33)
COLON@[33; 34) IDENT@[32; 33) "y"
WHITESPACE@[34; 35) COLON@[33; 34)
LITERAL@[35; 37) WHITESPACE@[34; 35)
INT_NUMBER@[35; 37) "32" LITERAL@[35; 37)
COMMA@[37; 38) INT_NUMBER@[35; 37) "32"
WHITESPACE@[38; 39) COMMA@[37; 38)
R_CURLY@[39; 40) WHITESPACE@[38; 39)
R_CURLY@[39; 40)
SEMI@[40; 41) SEMI@[40; 41)
WHITESPACE@[41; 46) WHITESPACE@[41; 46)
EXPR_STMT@[46; 83) EXPR_STMT@[46; 83)
@ -55,39 +57,40 @@ FILE@[0; 86)
NAME_REF@[46; 47) NAME_REF@[46; 47)
IDENT@[46; 47) "S" IDENT@[46; 47) "S"
WHITESPACE@[47; 48) WHITESPACE@[47; 48)
L_CURLY@[48; 49) NAMED_FIELD_LIST@[48; 82)
WHITESPACE@[49; 50) L_CURLY@[48; 49)
STRUCT_LIT_FIELD@[50; 51) WHITESPACE@[49; 50)
NAME_REF@[50; 51) NAMED_FIELD@[50; 51)
IDENT@[50; 51) "x" NAME_REF@[50; 51)
COMMA@[51; 52) IDENT@[50; 51) "x"
WHITESPACE@[52; 53) COMMA@[51; 52)
STRUCT_LIT_FIELD@[53; 58) WHITESPACE@[52; 53)
NAME_REF@[53; 54) NAMED_FIELD@[53; 58)
IDENT@[53; 54) "y" NAME_REF@[53; 54)
COLON@[54; 55) IDENT@[53; 54) "y"
WHITESPACE@[55; 56) COLON@[54; 55)
LITERAL@[56; 58) WHITESPACE@[55; 56)
INT_NUMBER@[56; 58) "32" LITERAL@[56; 58)
COMMA@[58; 59) INT_NUMBER@[56; 58) "32"
WHITESPACE@[59; 60) COMMA@[58; 59)
DOTDOT@[60; 62) WHITESPACE@[59; 60)
CALL_EXPR@[62; 80) DOTDOT@[60; 62)
PATH_EXPR@[62; 78) CALL_EXPR@[62; 80)
PATH@[62; 78) PATH_EXPR@[62; 78)
PATH@[62; 69) PATH@[62; 78)
PATH_SEGMENT@[62; 69) PATH@[62; 69)
NAME_REF@[62; 69) PATH_SEGMENT@[62; 69)
IDENT@[62; 69) "Default" NAME_REF@[62; 69)
COLONCOLON@[69; 71) IDENT@[62; 69) "Default"
PATH_SEGMENT@[71; 78) COLONCOLON@[69; 71)
NAME_REF@[71; 78) PATH_SEGMENT@[71; 78)
IDENT@[71; 78) "default" NAME_REF@[71; 78)
ARG_LIST@[78; 80) IDENT@[71; 78) "default"
L_PAREN@[78; 79) ARG_LIST@[78; 80)
R_PAREN@[79; 80) L_PAREN@[78; 79)
WHITESPACE@[80; 81) R_PAREN@[79; 80)
R_CURLY@[81; 82) WHITESPACE@[80; 81)
R_CURLY@[81; 82)
SEMI@[82; 83) SEMI@[82; 83)
WHITESPACE@[83; 84) WHITESPACE@[83; 84)
R_CURLY@[84; 85) R_CURLY@[84; 85)

View file

@ -8,7 +8,7 @@ FILE@[0; 67)
L_PAREN@[4; 5) L_PAREN@[4; 5)
R_PAREN@[5; 6) R_PAREN@[5; 6)
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
BLOCK_EXPR@[7; 9) BLOCK@[7; 9)
L_CURLY@[7; 8) L_CURLY@[7; 8)
R_CURLY@[8; 9) R_CURLY@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
@ -32,7 +32,7 @@ FILE@[0; 67)
IDENT@[18; 21) "i32" IDENT@[18; 21) "i32"
R_PAREN@[21; 22) R_PAREN@[21; 22)
WHITESPACE@[22; 23) WHITESPACE@[22; 23)
BLOCK_EXPR@[23; 25) BLOCK@[23; 25)
L_CURLY@[23; 24) L_CURLY@[23; 24)
R_CURLY@[24; 25) R_CURLY@[24; 25)
WHITESPACE@[25; 26) WHITESPACE@[25; 26)
@ -58,7 +58,7 @@ FILE@[0; 67)
WHITESPACE@[38; 39) WHITESPACE@[38; 39)
R_PAREN@[39; 40) R_PAREN@[39; 40)
WHITESPACE@[40; 41) WHITESPACE@[40; 41)
BLOCK_EXPR@[41; 43) BLOCK@[41; 43)
L_CURLY@[41; 42) L_CURLY@[41; 42)
R_CURLY@[42; 43) R_CURLY@[42; 43)
WHITESPACE@[43; 44) WHITESPACE@[43; 44)
@ -93,7 +93,7 @@ FILE@[0; 67)
R_PAREN@[61; 62) R_PAREN@[61; 62)
R_PAREN@[62; 63) R_PAREN@[62; 63)
WHITESPACE@[63; 64) WHITESPACE@[63; 64)
BLOCK_EXPR@[64; 66) BLOCK@[64; 66)
L_CURLY@[64; 65) L_CURLY@[64; 65)
R_CURLY@[65; 66) R_CURLY@[65; 66)
WHITESPACE@[66; 67) WHITESPACE@[66; 67)

View file

@ -8,7 +8,7 @@ FILE@[0; 107)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 106) BLOCK@[9; 106)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 26) EXPR_STMT@[15; 26)
@ -18,7 +18,7 @@ FILE@[0; 107)
LITERAL@[18; 22) LITERAL@[18; 22)
TRUE_KW@[18; 22) TRUE_KW@[18; 22)
WHITESPACE@[22; 23) WHITESPACE@[22; 23)
BLOCK_EXPR@[23; 25) BLOCK@[23; 25)
L_CURLY@[23; 24) L_CURLY@[23; 24)
R_CURLY@[24; 25) R_CURLY@[24; 25)
SEMI@[25; 26) SEMI@[25; 26)
@ -30,13 +30,13 @@ FILE@[0; 107)
LITERAL@[34; 38) LITERAL@[34; 38)
TRUE_KW@[34; 38) TRUE_KW@[34; 38)
WHITESPACE@[38; 39) WHITESPACE@[38; 39)
BLOCK_EXPR@[39; 41) BLOCK@[39; 41)
L_CURLY@[39; 40) L_CURLY@[39; 40)
R_CURLY@[40; 41) R_CURLY@[40; 41)
WHITESPACE@[41; 42) WHITESPACE@[41; 42)
ELSE_KW@[42; 46) ELSE_KW@[42; 46)
WHITESPACE@[46; 47) WHITESPACE@[46; 47)
BLOCK_EXPR@[47; 49) BLOCK@[47; 49)
L_CURLY@[47; 48) L_CURLY@[47; 48)
R_CURLY@[48; 49) R_CURLY@[48; 49)
SEMI@[49; 50) SEMI@[49; 50)
@ -48,7 +48,7 @@ FILE@[0; 107)
LITERAL@[58; 62) LITERAL@[58; 62)
TRUE_KW@[58; 62) TRUE_KW@[58; 62)
WHITESPACE@[62; 63) WHITESPACE@[62; 63)
BLOCK_EXPR@[63; 65) BLOCK@[63; 65)
L_CURLY@[63; 64) L_CURLY@[63; 64)
R_CURLY@[64; 65) R_CURLY@[64; 65)
WHITESPACE@[65; 66) WHITESPACE@[65; 66)
@ -60,13 +60,13 @@ FILE@[0; 107)
LITERAL@[74; 79) LITERAL@[74; 79)
FALSE_KW@[74; 79) FALSE_KW@[74; 79)
WHITESPACE@[79; 80) WHITESPACE@[79; 80)
BLOCK_EXPR@[80; 82) BLOCK@[80; 82)
L_CURLY@[80; 81) L_CURLY@[80; 81)
R_CURLY@[81; 82) R_CURLY@[81; 82)
WHITESPACE@[82; 83) WHITESPACE@[82; 83)
ELSE_KW@[83; 87) ELSE_KW@[83; 87)
WHITESPACE@[87; 88) WHITESPACE@[87; 88)
BLOCK_EXPR@[88; 90) BLOCK@[88; 90)
L_CURLY@[88; 89) L_CURLY@[88; 89)
R_CURLY@[89; 90) R_CURLY@[89; 90)
SEMI@[90; 91) SEMI@[90; 91)
@ -81,7 +81,7 @@ FILE@[0; 107)
NAME_REF@[99; 100) NAME_REF@[99; 100)
IDENT@[99; 100) "S" IDENT@[99; 100) "S"
WHITESPACE@[100; 101) WHITESPACE@[100; 101)
BLOCK_EXPR@[101; 103) BLOCK@[101; 103)
L_CURLY@[101; 102) L_CURLY@[101; 102)
R_CURLY@[102; 103) R_CURLY@[102; 103)
SEMI@[103; 104) SEMI@[103; 104)

View file

@ -8,7 +8,7 @@ FILE@[0; 79)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 78) BLOCK@[9; 78)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 21) EXPR_STMT@[15; 21)
@ -36,7 +36,7 @@ FILE@[0; 79)
NAME_REF@[32; 35) NAME_REF@[32; 35)
IDENT@[32; 35) "i32" IDENT@[32; 35) "i32"
WHITESPACE@[35; 36) WHITESPACE@[35; 36)
BLOCK_EXPR@[36; 42) BLOCK@[36; 42)
L_CURLY@[36; 37) L_CURLY@[36; 37)
WHITESPACE@[37; 38) WHITESPACE@[37; 38)
LITERAL@[38; 40) LITERAL@[38; 40)

View file

@ -8,21 +8,23 @@ FILE@[0; 36)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 35) BLOCK@[9; 35)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 18) EXPR_STMT@[15; 18)
BLOCK_EXPR@[15; 17) BLOCK_EXPR@[15; 17)
L_CURLY@[15; 16) BLOCK@[15; 17)
R_CURLY@[16; 17) L_CURLY@[15; 16)
R_CURLY@[16; 17)
SEMI@[17; 18) SEMI@[17; 18)
WHITESPACE@[18; 23) WHITESPACE@[18; 23)
EXPR_STMT@[23; 33) EXPR_STMT@[23; 33)
BLOCK_EXPR@[23; 32) BLOCK_EXPR@[23; 32)
UNSAFE_KW@[23; 29) UNSAFE_KW@[23; 29)
WHITESPACE@[29; 30) WHITESPACE@[29; 30)
L_CURLY@[30; 31) BLOCK@[30; 32)
R_CURLY@[31; 32) L_CURLY@[30; 31)
R_CURLY@[31; 32)
SEMI@[32; 33) SEMI@[32; 33)
WHITESPACE@[33; 34) WHITESPACE@[33; 34)
R_CURLY@[34; 35) R_CURLY@[34; 35)

View file

@ -8,7 +8,7 @@ FILE@[0; 29)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 20) BLOCK@[9; 20)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 11) WHITESPACE@[10; 11)
EXPR_STMT@[11; 18) EXPR_STMT@[11; 18)

View file

@ -8,7 +8,7 @@ FILE@[0; 40)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 39) BLOCK@[9; 39)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 22) EXPR_STMT@[15; 22)

View file

@ -8,7 +8,7 @@ FILE@[0; 78)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 77) BLOCK@[9; 77)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 75) EXPR_STMT@[15; 75)
@ -19,46 +19,47 @@ FILE@[0; 78)
L_PAREN@[21; 22) L_PAREN@[21; 22)
R_PAREN@[22; 23) R_PAREN@[22; 23)
WHITESPACE@[23; 24) WHITESPACE@[23; 24)
L_CURLY@[24; 25) MATCH_ARM_LIST@[24; 74)
WHITESPACE@[25; 34) L_CURLY@[24; 25)
MATCH_ARM@[34; 41) WHITESPACE@[25; 34)
PLACEHOLDER_PAT@[34; 35) MATCH_ARM@[34; 41)
UNDERSCORE@[34; 35) PLACEHOLDER_PAT@[34; 35)
WHITESPACE@[35; 36) UNDERSCORE@[34; 35)
FAT_ARROW@[36; 38) WHITESPACE@[35; 36)
WHITESPACE@[38; 39) FAT_ARROW@[36; 38)
TUPLE_EXPR@[39; 41) WHITESPACE@[38; 39)
L_PAREN@[39; 40) TUPLE_EXPR@[39; 41)
R_PAREN@[40; 41) L_PAREN@[39; 40)
COMMA@[41; 42) R_PAREN@[40; 41)
WHITESPACE@[42; 51) COMMA@[41; 42)
MATCH_ARM@[51; 67) WHITESPACE@[42; 51)
BIND_PAT@[51; 52) MATCH_ARM@[51; 67)
NAME@[51; 52) BIND_PAT@[51; 52)
IDENT@[51; 52) "X" NAME@[51; 52)
WHITESPACE@[52; 53) IDENT@[51; 52) "X"
PIPE@[53; 54) WHITESPACE@[52; 53)
WHITESPACE@[54; 55) PIPE@[53; 54)
BIND_PAT@[55; 56) WHITESPACE@[54; 55)
NAME@[55; 56) BIND_PAT@[55; 56)
IDENT@[55; 56) "Y" NAME@[55; 56)
WHITESPACE@[56; 57) IDENT@[55; 56) "Y"
IF_KW@[57; 59) WHITESPACE@[56; 57)
WHITESPACE@[59; 60) IF_KW@[57; 59)
PATH_EXPR@[60; 61) WHITESPACE@[59; 60)
PATH@[60; 61) PATH_EXPR@[60; 61)
PATH_SEGMENT@[60; 61) PATH@[60; 61)
NAME_REF@[60; 61) PATH_SEGMENT@[60; 61)
IDENT@[60; 61) "Z" NAME_REF@[60; 61)
WHITESPACE@[61; 62) IDENT@[60; 61) "Z"
FAT_ARROW@[62; 64) WHITESPACE@[61; 62)
WHITESPACE@[64; 65) FAT_ARROW@[62; 64)
TUPLE_EXPR@[65; 67) WHITESPACE@[64; 65)
L_PAREN@[65; 66) TUPLE_EXPR@[65; 67)
R_PAREN@[66; 67) L_PAREN@[65; 66)
COMMA@[67; 68) R_PAREN@[66; 67)
WHITESPACE@[68; 73) COMMA@[67; 68)
R_CURLY@[73; 74) WHITESPACE@[68; 73)
R_CURLY@[73; 74)
SEMI@[74; 75) SEMI@[74; 75)
WHITESPACE@[75; 76) WHITESPACE@[75; 76)
R_CURLY@[76; 77) R_CURLY@[76; 77)

View file

@ -8,7 +8,7 @@ FILE@[0; 47)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 46) BLOCK@[9; 46)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 28) EXPR_STMT@[15; 28)
@ -19,9 +19,10 @@ FILE@[0; 47)
L_PAREN@[21; 22) L_PAREN@[21; 22)
R_PAREN@[22; 23) R_PAREN@[22; 23)
WHITESPACE@[23; 24) WHITESPACE@[23; 24)
L_CURLY@[24; 25) MATCH_ARM_LIST@[24; 27)
WHITESPACE@[25; 26) L_CURLY@[24; 25)
R_CURLY@[26; 27) WHITESPACE@[25; 26)
R_CURLY@[26; 27)
SEMI@[27; 28) SEMI@[27; 28)
WHITESPACE@[28; 33) WHITESPACE@[28; 33)
EXPR_STMT@[33; 44) EXPR_STMT@[33; 44)
@ -34,8 +35,9 @@ FILE@[0; 47)
NAME_REF@[39; 40) NAME_REF@[39; 40)
IDENT@[39; 40) "S" IDENT@[39; 40) "S"
WHITESPACE@[40; 41) WHITESPACE@[40; 41)
L_CURLY@[41; 42) MATCH_ARM_LIST@[41; 43)
R_CURLY@[42; 43) L_CURLY@[41; 42)
R_CURLY@[42; 43)
SEMI@[43; 44) SEMI@[43; 44)
WHITESPACE@[44; 45) WHITESPACE@[44; 45)
R_CURLY@[45; 46) R_CURLY@[45; 46)

View file

@ -8,7 +8,7 @@ FILE@[0; 97)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 96) BLOCK@[9; 96)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
LET_STMT@[15; 28) LET_STMT@[15; 28)

View file

@ -8,7 +8,7 @@ FILE@[0; 103)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 102) BLOCK@[9; 102)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
LET_STMT@[15; 33) LET_STMT@[15; 33)
@ -58,11 +58,12 @@ FILE@[0; 103)
NAME_REF@[62; 65) NAME_REF@[62; 65)
IDENT@[62; 65) "Bar" IDENT@[62; 65) "Bar"
WHITESPACE@[65; 66) WHITESPACE@[65; 66)
L_CURLY@[66; 67) FIELD_PAT_LIST@[66; 72)
WHITESPACE@[67; 68) L_CURLY@[66; 67)
DOTDOT@[68; 70) WHITESPACE@[67; 68)
WHITESPACE@[70; 71) DOTDOT@[68; 70)
R_CURLY@[71; 72) WHITESPACE@[70; 71)
R_CURLY@[71; 72)
WHITESPACE@[72; 73) WHITESPACE@[72; 73)
EQ@[73; 74) EQ@[73; 74)
WHITESPACE@[74; 75) WHITESPACE@[74; 75)

View file

@ -8,7 +8,7 @@ FILE@[0; 119)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 118) BLOCK@[9; 118)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
LET_STMT@[15; 29) LET_STMT@[15; 29)
@ -20,8 +20,9 @@ FILE@[0; 119)
NAME_REF@[19; 20) NAME_REF@[19; 20)
IDENT@[19; 20) "S" IDENT@[19; 20) "S"
WHITESPACE@[20; 21) WHITESPACE@[20; 21)
L_CURLY@[21; 22) FIELD_PAT_LIST@[21; 23)
R_CURLY@[22; 23) L_CURLY@[21; 22)
R_CURLY@[22; 23)
WHITESPACE@[23; 24) WHITESPACE@[23; 24)
EQ@[24; 25) EQ@[24; 25)
WHITESPACE@[25; 26) WHITESPACE@[25; 26)
@ -39,22 +40,23 @@ FILE@[0; 119)
NAME_REF@[38; 39) NAME_REF@[38; 39)
IDENT@[38; 39) "S" IDENT@[38; 39) "S"
WHITESPACE@[39; 40) WHITESPACE@[39; 40)
L_CURLY@[40; 41) FIELD_PAT_LIST@[40; 56)
WHITESPACE@[41; 42) L_CURLY@[40; 41)
BIND_PAT@[42; 43) WHITESPACE@[41; 42)
NAME@[42; 43) BIND_PAT@[42; 43)
IDENT@[42; 43) "f" NAME@[42; 43)
COMMA@[43; 44) IDENT@[42; 43) "f"
WHITESPACE@[44; 45) COMMA@[43; 44)
BIND_PAT@[45; 54) WHITESPACE@[44; 45)
REF_KW@[45; 48) BIND_PAT@[45; 54)
WHITESPACE@[48; 49) REF_KW@[45; 48)
MUT_KW@[49; 52) WHITESPACE@[48; 49)
WHITESPACE@[52; 53) MUT_KW@[49; 52)
NAME@[53; 54) WHITESPACE@[52; 53)
IDENT@[53; 54) "g" NAME@[53; 54)
WHITESPACE@[54; 55) IDENT@[53; 54) "g"
R_CURLY@[55; 56) WHITESPACE@[54; 55)
R_CURLY@[55; 56)
WHITESPACE@[56; 57) WHITESPACE@[56; 57)
EQ@[57; 58) EQ@[57; 58)
WHITESPACE@[58; 59) WHITESPACE@[58; 59)
@ -72,17 +74,18 @@ FILE@[0; 119)
NAME_REF@[71; 72) NAME_REF@[71; 72)
IDENT@[71; 72) "S" IDENT@[71; 72) "S"
WHITESPACE@[72; 73) WHITESPACE@[72; 73)
L_CURLY@[73; 74) FIELD_PAT_LIST@[73; 84)
WHITESPACE@[74; 75) L_CURLY@[73; 74)
IDENT@[75; 76) "h" WHITESPACE@[74; 75)
COLON@[76; 77) IDENT@[75; 76) "h"
WHITESPACE@[77; 78) COLON@[76; 77)
PLACEHOLDER_PAT@[78; 79) WHITESPACE@[77; 78)
UNDERSCORE@[78; 79) PLACEHOLDER_PAT@[78; 79)
COMMA@[79; 80) UNDERSCORE@[78; 79)
WHITESPACE@[80; 81) COMMA@[79; 80)
DOTDOT@[81; 83) WHITESPACE@[80; 81)
R_CURLY@[83; 84) DOTDOT@[81; 83)
R_CURLY@[83; 84)
WHITESPACE@[84; 85) WHITESPACE@[84; 85)
EQ@[85; 86) EQ@[85; 86)
WHITESPACE@[86; 87) WHITESPACE@[86; 87)
@ -100,16 +103,17 @@ FILE@[0; 119)
NAME_REF@[99; 100) NAME_REF@[99; 100)
IDENT@[99; 100) "S" IDENT@[99; 100) "S"
WHITESPACE@[100; 101) WHITESPACE@[100; 101)
L_CURLY@[101; 102) FIELD_PAT_LIST@[101; 110)
WHITESPACE@[102; 103) L_CURLY@[101; 102)
IDENT@[103; 104) "h" WHITESPACE@[102; 103)
COLON@[104; 105) IDENT@[103; 104) "h"
WHITESPACE@[105; 106) COLON@[104; 105)
PLACEHOLDER_PAT@[106; 107) WHITESPACE@[105; 106)
UNDERSCORE@[106; 107) PLACEHOLDER_PAT@[106; 107)
COMMA@[107; 108) UNDERSCORE@[106; 107)
WHITESPACE@[108; 109) COMMA@[107; 108)
R_CURLY@[109; 110) WHITESPACE@[108; 109)
R_CURLY@[109; 110)
WHITESPACE@[110; 111) WHITESPACE@[110; 111)
EQ@[111; 112) EQ@[111; 112)
WHITESPACE@[112; 113) WHITESPACE@[112; 113)

View file

@ -8,7 +8,7 @@ FILE@[0; 44)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 43) BLOCK@[9; 43)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 20) EXPR_STMT@[15; 20)

View file

@ -8,7 +8,7 @@ FILE@[0; 21)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 20) BLOCK@[9; 20)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 18) EXPR_STMT@[15; 18)

View file

@ -8,7 +8,7 @@ FILE@[0; 38)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 37) BLOCK@[9; 37)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 11) WHITESPACE@[10; 11)
IF_EXPR@[11; 35) IF_EXPR@[11; 35)
@ -34,7 +34,7 @@ FILE@[0; 38)
NAME_REF@[28; 32) NAME_REF@[28; 32)
IDENT@[28; 32) "None" IDENT@[28; 32) "None"
WHITESPACE@[32; 33) WHITESPACE@[32; 33)
BLOCK_EXPR@[33; 35) BLOCK@[33; 35)
L_CURLY@[33; 34) L_CURLY@[33; 34)
R_CURLY@[34; 35) R_CURLY@[34; 35)
WHITESPACE@[35; 36) WHITESPACE@[35; 36)

View file

@ -8,7 +8,7 @@ FILE@[0; 70)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 69) BLOCK@[9; 69)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 29) EXPR_STMT@[15; 29)
@ -18,7 +18,7 @@ FILE@[0; 70)
LITERAL@[21; 25) LITERAL@[21; 25)
TRUE_KW@[21; 25) TRUE_KW@[21; 25)
WHITESPACE@[25; 26) WHITESPACE@[25; 26)
BLOCK_EXPR@[26; 28) BLOCK@[26; 28)
L_CURLY@[26; 27) L_CURLY@[26; 27)
R_CURLY@[27; 28) R_CURLY@[27; 28)
SEMI@[28; 29) SEMI@[28; 29)
@ -55,7 +55,7 @@ FILE@[0; 70)
L_PAREN@[61; 62) L_PAREN@[61; 62)
R_PAREN@[62; 63) R_PAREN@[62; 63)
WHITESPACE@[63; 64) WHITESPACE@[63; 64)
BLOCK_EXPR@[64; 66) BLOCK@[64; 66)
L_CURLY@[64; 65) L_CURLY@[64; 65)
R_CURLY@[65; 66) R_CURLY@[65; 66)
SEMI@[66; 67) SEMI@[66; 67)

View file

@ -8,7 +8,7 @@ FILE@[0; 70)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 11) BLOCK@[9; 11)
L_CURLY@[9; 10) L_CURLY@[9; 10)
R_CURLY@[10; 11) R_CURLY@[10; 11)
WHITESPACE@[11; 12) WHITESPACE@[11; 12)

View file

@ -8,7 +8,7 @@ FILE@[0; 28)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 27) BLOCK@[9; 27)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 25) EXPR_STMT@[15; 25)

View file

@ -8,7 +8,7 @@ FILE@[0; 40)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 39) BLOCK@[9; 39)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 18) EXPR_STMT@[15; 18)

View file

@ -8,7 +8,7 @@ FILE@[0; 26)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 25) BLOCK@[9; 25)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 23) EXPR_STMT@[15; 23)

View file

@ -8,7 +8,7 @@ FILE@[0; 39)
L_PAREN@[7; 8) L_PAREN@[7; 8)
R_PAREN@[8; 9) R_PAREN@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
BLOCK_EXPR@[10; 38) BLOCK@[10; 38)
L_CURLY@[10; 11) L_CURLY@[10; 11)
WHITESPACE@[11; 16) WHITESPACE@[11; 16)
LET_STMT@[16; 36) LET_STMT@[16; 36)

View file

@ -8,7 +8,7 @@ FILE@[0; 26)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 25) BLOCK@[9; 25)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 11) WHITESPACE@[10; 11)
LET_STMT@[11; 23) LET_STMT@[11; 23)

View file

@ -8,14 +8,14 @@ FILE@[0; 26)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 25) BLOCK@[9; 25)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 23) EXPR_STMT@[15; 23)
LOOP_EXPR@[15; 22) LOOP_EXPR@[15; 22)
LOOP_KW@[15; 19) LOOP_KW@[15; 19)
WHITESPACE@[19; 20) WHITESPACE@[19; 20)
BLOCK_EXPR@[20; 22) BLOCK@[20; 22)
L_CURLY@[20; 21) L_CURLY@[20; 21)
R_CURLY@[21; 22) R_CURLY@[21; 22)
SEMI@[22; 23) SEMI@[22; 23)

View file

@ -8,7 +8,7 @@ FILE@[0; 33)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 32) BLOCK@[9; 32)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 30) EXPR_STMT@[15; 30)
@ -25,7 +25,7 @@ FILE@[0; 33)
L_BRACK@[24; 25) L_BRACK@[24; 25)
R_BRACK@[25; 26) R_BRACK@[25; 26)
WHITESPACE@[26; 27) WHITESPACE@[26; 27)
BLOCK_EXPR@[27; 29) BLOCK@[27; 29)
L_CURLY@[27; 28) L_CURLY@[27; 28)
R_CURLY@[28; 29) R_CURLY@[28; 29)
SEMI@[29; 30) SEMI@[29; 30)

View file

@ -8,7 +8,7 @@ FILE@[0; 83)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 82) BLOCK@[9; 82)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
MATCH_EXPR@[15; 80) MATCH_EXPR@[15; 80)
@ -18,40 +18,42 @@ FILE@[0; 83)
L_PAREN@[21; 22) L_PAREN@[21; 22)
R_PAREN@[22; 23) R_PAREN@[22; 23)
WHITESPACE@[23; 24) WHITESPACE@[23; 24)
L_CURLY@[24; 25) MATCH_ARM_LIST@[24; 80)
WHITESPACE@[25; 34) L_CURLY@[24; 25)
MATCH_ARM@[34; 41) WHITESPACE@[25; 34)
PLACEHOLDER_PAT@[34; 35) MATCH_ARM@[34; 41)
UNDERSCORE@[34; 35) PLACEHOLDER_PAT@[34; 35)
WHITESPACE@[35; 36) UNDERSCORE@[34; 35)
FAT_ARROW@[36; 38) WHITESPACE@[35; 36)
WHITESPACE@[38; 39) FAT_ARROW@[36; 38)
TUPLE_EXPR@[39; 41) WHITESPACE@[38; 39)
L_PAREN@[39; 40) TUPLE_EXPR@[39; 41)
R_PAREN@[40; 41) L_PAREN@[39; 40)
COMMA@[41; 42) R_PAREN@[40; 41)
WHITESPACE@[42; 51) COMMA@[41; 42)
MATCH_ARM@[51; 58) WHITESPACE@[42; 51)
PLACEHOLDER_PAT@[51; 52) MATCH_ARM@[51; 58)
UNDERSCORE@[51; 52) PLACEHOLDER_PAT@[51; 52)
WHITESPACE@[52; 53) UNDERSCORE@[51; 52)
FAT_ARROW@[53; 55) WHITESPACE@[52; 53)
WHITESPACE@[55; 56) FAT_ARROW@[53; 55)
BLOCK_EXPR@[56; 58) WHITESPACE@[55; 56)
L_CURLY@[56; 57) BLOCK_EXPR@[56; 58)
R_CURLY@[57; 58) BLOCK@[56; 58)
WHITESPACE@[58; 67) L_CURLY@[56; 57)
MATCH_ARM@[67; 74) R_CURLY@[57; 58)
PLACEHOLDER_PAT@[67; 68) WHITESPACE@[58; 67)
UNDERSCORE@[67; 68) MATCH_ARM@[67; 74)
WHITESPACE@[68; 69) PLACEHOLDER_PAT@[67; 68)
FAT_ARROW@[69; 71) UNDERSCORE@[67; 68)
WHITESPACE@[71; 72) WHITESPACE@[68; 69)
TUPLE_EXPR@[72; 74) FAT_ARROW@[69; 71)
L_PAREN@[72; 73) WHITESPACE@[71; 72)
R_PAREN@[73; 74) TUPLE_EXPR@[72; 74)
WHITESPACE@[74; 79) L_PAREN@[72; 73)
R_CURLY@[79; 80) R_PAREN@[73; 74)
WHITESPACE@[74; 79)
R_CURLY@[79; 80)
WHITESPACE@[80; 81) WHITESPACE@[80; 81)
R_CURLY@[81; 82) R_CURLY@[81; 82)
WHITESPACE@[82; 83) WHITESPACE@[82; 83)

View file

@ -8,7 +8,7 @@ FILE@[0; 55)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 54) BLOCK@[9; 54)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 18) EXPR_STMT@[15; 18)

View file

@ -8,7 +8,7 @@ FILE@[0; 107)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 106) BLOCK@[9; 106)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
EXPR_STMT@[15; 25) EXPR_STMT@[15; 25)
@ -18,7 +18,7 @@ FILE@[0; 107)
LITERAL@[18; 22) LITERAL@[18; 22)
TRUE_KW@[18; 22) TRUE_KW@[18; 22)
WHITESPACE@[22; 23) WHITESPACE@[22; 23)
BLOCK_EXPR@[23; 25) BLOCK@[23; 25)
L_CURLY@[23; 24) L_CURLY@[23; 24)
R_CURLY@[24; 25) R_CURLY@[24; 25)
WHITESPACE@[25; 30) WHITESPACE@[25; 30)
@ -26,7 +26,7 @@ FILE@[0; 107)
LOOP_EXPR@[30; 37) LOOP_EXPR@[30; 37)
LOOP_KW@[30; 34) LOOP_KW@[30; 34)
WHITESPACE@[34; 35) WHITESPACE@[34; 35)
BLOCK_EXPR@[35; 37) BLOCK@[35; 37)
L_CURLY@[35; 36) L_CURLY@[35; 36)
R_CURLY@[36; 37) R_CURLY@[36; 37)
WHITESPACE@[37; 42) WHITESPACE@[37; 42)
@ -38,8 +38,9 @@ FILE@[0; 107)
L_PAREN@[48; 49) L_PAREN@[48; 49)
R_PAREN@[49; 50) R_PAREN@[49; 50)
WHITESPACE@[50; 51) WHITESPACE@[50; 51)
L_CURLY@[51; 52) MATCH_ARM_LIST@[51; 53)
R_CURLY@[52; 53) L_CURLY@[51; 52)
R_CURLY@[52; 53)
WHITESPACE@[53; 58) WHITESPACE@[53; 58)
EXPR_STMT@[58; 71) EXPR_STMT@[58; 71)
WHILE_EXPR@[58; 71) WHILE_EXPR@[58; 71)
@ -48,7 +49,7 @@ FILE@[0; 107)
LITERAL@[64; 68) LITERAL@[64; 68)
TRUE_KW@[64; 68) TRUE_KW@[64; 68)
WHITESPACE@[68; 69) WHITESPACE@[68; 69)
BLOCK_EXPR@[69; 71) BLOCK@[69; 71)
L_CURLY@[69; 70) L_CURLY@[69; 70)
R_CURLY@[70; 71) R_CURLY@[70; 71)
WHITESPACE@[71; 76) WHITESPACE@[71; 76)
@ -65,18 +66,20 @@ FILE@[0; 107)
L_PAREN@[85; 86) L_PAREN@[85; 86)
R_PAREN@[86; 87) R_PAREN@[86; 87)
WHITESPACE@[87; 88) WHITESPACE@[87; 88)
BLOCK_EXPR@[88; 90) BLOCK@[88; 90)
L_CURLY@[88; 89) L_CURLY@[88; 89)
R_CURLY@[89; 90) R_CURLY@[89; 90)
WHITESPACE@[90; 95) WHITESPACE@[90; 95)
EXPR_STMT@[95; 97) EXPR_STMT@[95; 97)
BLOCK_EXPR@[95; 97) BLOCK_EXPR@[95; 97)
L_CURLY@[95; 96) BLOCK@[95; 97)
R_CURLY@[96; 97) L_CURLY@[95; 96)
R_CURLY@[96; 97)
WHITESPACE@[97; 102) WHITESPACE@[97; 102)
BLOCK_EXPR@[102; 104) BLOCK_EXPR@[102; 104)
L_CURLY@[102; 103) BLOCK@[102; 104)
R_CURLY@[103; 104) L_CURLY@[102; 103)
R_CURLY@[103; 104)
WHITESPACE@[104; 105) WHITESPACE@[104; 105)
R_CURLY@[105; 106) R_CURLY@[105; 106)
WHITESPACE@[106; 107) WHITESPACE@[106; 107)

View file

@ -8,7 +8,7 @@ FILE@[0; 84)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 83) BLOCK@[9; 83)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
MATCH_EXPR@[15; 81) MATCH_EXPR@[15; 81)
@ -18,41 +18,45 @@ FILE@[0; 84)
L_PAREN@[21; 22) L_PAREN@[21; 22)
R_PAREN@[22; 23) R_PAREN@[22; 23)
WHITESPACE@[23; 24) WHITESPACE@[23; 24)
L_CURLY@[24; 25) MATCH_ARM_LIST@[24; 81)
WHITESPACE@[25; 34) L_CURLY@[24; 25)
MATCH_ARM@[34; 41) WHITESPACE@[25; 34)
PLACEHOLDER_PAT@[34; 35) MATCH_ARM@[34; 41)
UNDERSCORE@[34; 35) PLACEHOLDER_PAT@[34; 35)
WHITESPACE@[35; 36) UNDERSCORE@[34; 35)
FAT_ARROW@[36; 38) WHITESPACE@[35; 36)
WHITESPACE@[38; 39) FAT_ARROW@[36; 38)
BLOCK_EXPR@[39; 41) WHITESPACE@[38; 39)
L_CURLY@[39; 40) BLOCK_EXPR@[39; 41)
R_CURLY@[40; 41) BLOCK@[39; 41)
WHITESPACE@[41; 50) L_CURLY@[39; 40)
MATCH_ARM@[50; 58) R_CURLY@[40; 41)
TUPLE_PAT@[50; 52) WHITESPACE@[41; 50)
L_PAREN@[50; 51) MATCH_ARM@[50; 58)
R_PAREN@[51; 52) TUPLE_PAT@[50; 52)
WHITESPACE@[52; 53) L_PAREN@[50; 51)
FAT_ARROW@[53; 55) R_PAREN@[51; 52)
WHITESPACE@[55; 56) WHITESPACE@[52; 53)
BLOCK_EXPR@[56; 58) FAT_ARROW@[53; 55)
L_CURLY@[56; 57) WHITESPACE@[55; 56)
R_CURLY@[57; 58) BLOCK_EXPR@[56; 58)
WHITESPACE@[58; 67) BLOCK@[56; 58)
MATCH_ARM@[67; 75) L_CURLY@[56; 57)
SLICE_PAT@[67; 69) R_CURLY@[57; 58)
L_BRACK@[67; 68) WHITESPACE@[58; 67)
R_BRACK@[68; 69) MATCH_ARM@[67; 75)
WHITESPACE@[69; 70) SLICE_PAT@[67; 69)
FAT_ARROW@[70; 72) L_BRACK@[67; 68)
WHITESPACE@[72; 73) R_BRACK@[68; 69)
BLOCK_EXPR@[73; 75) WHITESPACE@[69; 70)
L_CURLY@[73; 74) FAT_ARROW@[70; 72)
R_CURLY@[74; 75) WHITESPACE@[72; 73)
WHITESPACE@[75; 80) BLOCK_EXPR@[73; 75)
R_CURLY@[80; 81) BLOCK@[73; 75)
L_CURLY@[73; 74)
R_CURLY@[74; 75)
WHITESPACE@[75; 80)
R_CURLY@[80; 81)
WHITESPACE@[81; 82) WHITESPACE@[81; 82)
R_CURLY@[82; 83) R_CURLY@[82; 83)
WHITESPACE@[83; 84) WHITESPACE@[83; 84)

View file

@ -8,7 +8,7 @@ FILE@[0; 46)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 45) BLOCK@[9; 45)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
LET_STMT@[15; 31) LET_STMT@[15; 31)
@ -21,10 +21,11 @@ FILE@[0; 46)
WHITESPACE@[22; 23) WHITESPACE@[22; 23)
BIN_EXPR@[23; 30) BIN_EXPR@[23; 30)
BLOCK_EXPR@[23; 26) BLOCK_EXPR@[23; 26)
L_CURLY@[23; 24) BLOCK@[23; 26)
LITERAL@[24; 25) L_CURLY@[23; 24)
INT_NUMBER@[24; 25) "1" LITERAL@[24; 25)
R_CURLY@[25; 26) INT_NUMBER@[24; 25) "1"
R_CURLY@[25; 26)
WHITESPACE@[26; 27) WHITESPACE@[26; 27)
AMP@[27; 28) AMP@[27; 28)
WHITESPACE@[28; 29) WHITESPACE@[28; 29)
@ -34,10 +35,11 @@ FILE@[0; 46)
WHITESPACE@[31; 36) WHITESPACE@[31; 36)
EXPR_STMT@[36; 39) EXPR_STMT@[36; 39)
BLOCK_EXPR@[36; 39) BLOCK_EXPR@[36; 39)
L_CURLY@[36; 37) BLOCK@[36; 39)
LITERAL@[37; 38) L_CURLY@[36; 37)
INT_NUMBER@[37; 38) "1" LITERAL@[37; 38)
R_CURLY@[38; 39) INT_NUMBER@[37; 38) "1"
R_CURLY@[38; 39)
WHITESPACE@[39; 40) WHITESPACE@[39; 40)
EXPR_STMT@[40; 43) EXPR_STMT@[40; 43)
REF_EXPR@[40; 42) REF_EXPR@[40; 42)

View file

@ -8,7 +8,7 @@ FILE@[0; 39)
L_PAREN@[7; 8) L_PAREN@[7; 8)
R_PAREN@[8; 9) R_PAREN@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
BLOCK_EXPR@[10; 38) BLOCK@[10; 38)
L_CURLY@[10; 11) L_CURLY@[10; 11)
WHITESPACE@[11; 16) WHITESPACE@[11; 16)
LET_STMT@[16; 36) LET_STMT@[16; 36)

View file

@ -8,60 +8,61 @@ FILE@[0; 83)
NAME_REF@[5; 6) NAME_REF@[5; 6)
IDENT@[5; 6) "F" IDENT@[5; 6) "F"
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
L_CURLY@[7; 8) ITEM_LIST@[7; 82)
WHITESPACE@[8; 13) L_CURLY@[7; 8)
TYPE_DEF@[13; 27) WHITESPACE@[8; 13)
TYPE_KW@[13; 17) TYPE_DEF@[13; 27)
WHITESPACE@[17; 18) TYPE_KW@[13; 17)
NAME@[18; 19) WHITESPACE@[17; 18)
IDENT@[18; 19) "A" NAME@[18; 19)
COLON@[19; 20) IDENT@[18; 19) "A"
WHITESPACE@[20; 21) COLON@[19; 20)
PATH@[21; 26) WHITESPACE@[20; 21)
PATH_SEGMENT@[21; 26) PATH@[21; 26)
NAME_REF@[21; 26) PATH_SEGMENT@[21; 26)
IDENT@[21; 26) "Clone" NAME_REF@[21; 26)
SEMI@[26; 27) IDENT@[21; 26) "Clone"
WHITESPACE@[27; 32) SEMI@[26; 27)
CONST_DEF@[32; 45) WHITESPACE@[27; 32)
CONST_KW@[32; 37) CONST_DEF@[32; 45)
WHITESPACE@[37; 38) CONST_KW@[32; 37)
NAME@[38; 39) WHITESPACE@[37; 38)
IDENT@[38; 39) "B" NAME@[38; 39)
COLON@[39; 40) IDENT@[38; 39) "B"
WHITESPACE@[40; 41) COLON@[39; 40)
PATH_TYPE@[41; 44) WHITESPACE@[40; 41)
PATH@[41; 44) PATH_TYPE@[41; 44)
PATH_SEGMENT@[41; 44) PATH@[41; 44)
NAME_REF@[41; 44) PATH_SEGMENT@[41; 44)
IDENT@[41; 44) "i32" NAME_REF@[41; 44)
SEMI@[44; 45) IDENT@[41; 44) "i32"
WHITESPACE@[45; 50) SEMI@[44; 45)
FN_DEF@[50; 61) WHITESPACE@[45; 50)
FN_KW@[50; 52) FN_DEF@[50; 61)
WHITESPACE@[52; 53) FN_KW@[50; 52)
NAME@[53; 56) WHITESPACE@[52; 53)
IDENT@[53; 56) "foo" NAME@[53; 56)
PARAM_LIST@[56; 58) IDENT@[53; 56) "foo"
L_PAREN@[56; 57) PARAM_LIST@[56; 58)
R_PAREN@[57; 58) L_PAREN@[56; 57)
WHITESPACE@[58; 59) R_PAREN@[57; 58)
BLOCK_EXPR@[59; 61) WHITESPACE@[58; 59)
L_CURLY@[59; 60) BLOCK@[59; 61)
R_CURLY@[60; 61) L_CURLY@[59; 60)
WHITESPACE@[61; 66) R_CURLY@[60; 61)
FN_DEF@[66; 80) WHITESPACE@[61; 66)
FN_KW@[66; 68) FN_DEF@[66; 80)
WHITESPACE@[68; 69) FN_KW@[66; 68)
NAME@[69; 72) WHITESPACE@[68; 69)
IDENT@[69; 72) "bar" NAME@[69; 72)
PARAM_LIST@[72; 79) IDENT@[69; 72) "bar"
L_PAREN@[72; 73) PARAM_LIST@[72; 79)
SELF_PARAM@[73; 78) L_PAREN@[72; 73)
AMP@[73; 74) SELF_PARAM@[73; 78)
SELF_KW@[74; 78) AMP@[73; 74)
R_PAREN@[78; 79) SELF_KW@[74; 78)
SEMI@[79; 80) R_PAREN@[78; 79)
WHITESPACE@[80; 81) SEMI@[79; 80)
R_CURLY@[81; 82) WHITESPACE@[80; 81)
R_CURLY@[81; 82)
WHITESPACE@[82; 83) WHITESPACE@[82; 83)

View file

@ -5,17 +5,18 @@ FILE@[0; 22)
NAME@[6; 7) NAME@[6; 7)
IDENT@[6; 7) "T" IDENT@[6; 7) "T"
WHITESPACE@[7; 8) WHITESPACE@[7; 8)
L_CURLY@[8; 9) ITEM_LIST@[8; 21)
WHITESPACE@[9; 10) L_CURLY@[8; 9)
FN_DEF@[10; 19) WHITESPACE@[9; 10)
FN_KW@[10; 12) FN_DEF@[10; 19)
WHITESPACE@[12; 13) FN_KW@[10; 12)
NAME@[13; 16) WHITESPACE@[12; 13)
IDENT@[13; 16) "foo" NAME@[13; 16)
PARAM_LIST@[16; 18) IDENT@[13; 16) "foo"
L_PAREN@[16; 17) PARAM_LIST@[16; 18)
R_PAREN@[17; 18) L_PAREN@[16; 17)
SEMI@[18; 19) R_PAREN@[17; 18)
WHITESPACE@[19; 20) SEMI@[18; 19)
R_CURLY@[20; 21) WHITESPACE@[19; 20)
R_CURLY@[20; 21)
WHITESPACE@[21; 22) WHITESPACE@[21; 22)

View file

@ -8,7 +8,7 @@ FILE@[0; 95)
L_PAREN@[7; 8) L_PAREN@[7; 8)
R_PAREN@[8; 9) R_PAREN@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
BLOCK_EXPR@[10; 94) BLOCK@[10; 94)
L_CURLY@[10; 11) L_CURLY@[10; 11)
WHITESPACE@[11; 16) WHITESPACE@[11; 16)
MATCH_EXPR@[16; 92) MATCH_EXPR@[16; 92)
@ -18,42 +18,43 @@ FILE@[0; 95)
L_PAREN@[22; 23) L_PAREN@[22; 23)
R_PAREN@[23; 24) R_PAREN@[23; 24)
WHITESPACE@[24; 25) WHITESPACE@[24; 25)
L_CURLY@[25; 26) MATCH_ARM_LIST@[25; 92)
WHITESPACE@[26; 35) L_CURLY@[25; 26)
MATCH_ARM@[35; 43) WHITESPACE@[26; 35)
LITERAL@[35; 37) MATCH_ARM@[35; 43)
INT_NUMBER@[35; 37) "92" LITERAL@[35; 37)
WHITESPACE@[37; 38) INT_NUMBER@[35; 37) "92"
FAT_ARROW@[38; 40) WHITESPACE@[37; 38)
WHITESPACE@[40; 41) FAT_ARROW@[38; 40)
TUPLE_EXPR@[41; 43) WHITESPACE@[40; 41)
L_PAREN@[41; 42) TUPLE_EXPR@[41; 43)
R_PAREN@[42; 43) L_PAREN@[41; 42)
COMMA@[43; 44) R_PAREN@[42; 43)
WHITESPACE@[44; 53) COMMA@[43; 44)
MATCH_ARM@[53; 62) WHITESPACE@[44; 53)
LITERAL@[53; 56) MATCH_ARM@[53; 62)
CHAR@[53; 56) LITERAL@[53; 56)
WHITESPACE@[56; 57) CHAR@[53; 56)
FAT_ARROW@[57; 59) WHITESPACE@[56; 57)
WHITESPACE@[59; 60) FAT_ARROW@[57; 59)
TUPLE_EXPR@[60; 62) WHITESPACE@[59; 60)
L_PAREN@[60; 61) TUPLE_EXPR@[60; 62)
R_PAREN@[61; 62) L_PAREN@[60; 61)
COMMA@[62; 63) R_PAREN@[61; 62)
WHITESPACE@[63; 72) COMMA@[62; 63)
MATCH_ARM@[72; 85) WHITESPACE@[63; 72)
LITERAL@[72; 79) MATCH_ARM@[72; 85)
STRING@[72; 79) LITERAL@[72; 79)
WHITESPACE@[79; 80) STRING@[72; 79)
FAT_ARROW@[80; 82) WHITESPACE@[79; 80)
WHITESPACE@[82; 83) FAT_ARROW@[80; 82)
TUPLE_EXPR@[83; 85) WHITESPACE@[82; 83)
L_PAREN@[83; 84) TUPLE_EXPR@[83; 85)
R_PAREN@[84; 85) L_PAREN@[83; 84)
COMMA@[85; 86) R_PAREN@[84; 85)
WHITESPACE@[86; 91) COMMA@[85; 86)
R_CURLY@[91; 92) WHITESPACE@[86; 91)
R_CURLY@[91; 92)
WHITESPACE@[92; 93) WHITESPACE@[92; 93)
R_CURLY@[93; 94) R_CURLY@[93; 94)
WHITESPACE@[94; 95) WHITESPACE@[94; 95)

View file

@ -8,7 +8,7 @@ FILE@[0; 47)
L_PAREN@[7; 8) L_PAREN@[7; 8)
R_PAREN@[8; 9) R_PAREN@[8; 9)
WHITESPACE@[9; 10) WHITESPACE@[9; 10)
BLOCK_EXPR@[10; 46) BLOCK@[10; 46)
L_CURLY@[10; 11) L_CURLY@[10; 11)
WHITESPACE@[11; 16) WHITESPACE@[11; 16)
MATCH_EXPR@[16; 44) MATCH_EXPR@[16; 44)
@ -17,25 +17,26 @@ FILE@[0; 47)
LITERAL@[22; 24) LITERAL@[22; 24)
INT_NUMBER@[22; 24) "92" INT_NUMBER@[22; 24) "92"
WHITESPACE@[24; 25) WHITESPACE@[24; 25)
L_CURLY@[25; 26) MATCH_ARM_LIST@[25; 44)
WHITESPACE@[26; 27) L_CURLY@[25; 26)
MATCH_ARM@[27; 42) WHITESPACE@[26; 27)
RANGE_PAT@[27; 36) MATCH_ARM@[27; 42)
LITERAL@[27; 28) RANGE_PAT@[27; 36)
INT_NUMBER@[27; 28) "0" LITERAL@[27; 28)
WHITESPACE@[28; 29) INT_NUMBER@[27; 28) "0"
DOTDOTDOT@[29; 32) WHITESPACE@[28; 29)
WHITESPACE@[32; 33) DOTDOTDOT@[29; 32)
LITERAL@[33; 36) WHITESPACE@[32; 33)
INT_NUMBER@[33; 36) "100" LITERAL@[33; 36)
WHITESPACE@[36; 37) INT_NUMBER@[33; 36) "100"
FAT_ARROW@[37; 39) WHITESPACE@[36; 37)
WHITESPACE@[39; 40) FAT_ARROW@[37; 39)
TUPLE_EXPR@[40; 42) WHITESPACE@[39; 40)
L_PAREN@[40; 41) TUPLE_EXPR@[40; 42)
R_PAREN@[41; 42) L_PAREN@[40; 41)
WHITESPACE@[42; 43) R_PAREN@[41; 42)
R_CURLY@[43; 44) WHITESPACE@[42; 43)
R_CURLY@[43; 44)
WHITESPACE@[44; 45) WHITESPACE@[44; 45)
R_CURLY@[45; 46) R_CURLY@[45; 46)
WHITESPACE@[46; 47) WHITESPACE@[46; 47)

View file

@ -29,7 +29,7 @@ FILE@[0; 27)
LIFETIME@[20; 22) "'f" LIFETIME@[20; 22) "'f"
R_ANGLE@[22; 23) R_ANGLE@[22; 23)
WHITESPACE@[23; 24) WHITESPACE@[23; 24)
BLOCK_EXPR@[24; 26) BLOCK@[24; 26)
L_CURLY@[24; 25) L_CURLY@[24; 25)
R_CURLY@[25; 26) R_CURLY@[25; 26)
WHITESPACE@[26; 27) WHITESPACE@[26; 27)

View file

@ -37,7 +37,7 @@ FILE@[0; 35)
PARAM_LIST@[30; 32) PARAM_LIST@[30; 32)
L_PAREN@[30; 31) L_PAREN@[30; 31)
R_PAREN@[31; 32) R_PAREN@[31; 32)
BLOCK_EXPR@[32; 34) BLOCK@[32; 34)
L_CURLY@[32; 33) L_CURLY@[32; 33)
R_CURLY@[33; 34) R_CURLY@[33; 34)
WHITESPACE@[34; 35) WHITESPACE@[34; 35)

View file

@ -63,7 +63,7 @@ FILE@[0; 87)
LIFETIME@[80; 82) "'a" LIFETIME@[80; 82) "'a"
COMMA@[82; 83) COMMA@[82; 83)
WHITESPACE@[83; 84) WHITESPACE@[83; 84)
BLOCK_EXPR@[84; 86) BLOCK@[84; 86)
L_CURLY@[84; 85) L_CURLY@[84; 85)
R_CURLY@[85; 86) R_CURLY@[85; 86)
WHITESPACE@[86; 87) WHITESPACE@[86; 87)

View file

@ -11,7 +11,7 @@ FILE@[0; 20)
L_PAREN@[13; 14) L_PAREN@[13; 14)
R_PAREN@[14; 15) R_PAREN@[14; 15)
WHITESPACE@[15; 16) WHITESPACE@[15; 16)
BLOCK_EXPR@[16; 19) BLOCK@[16; 19)
L_CURLY@[16; 17) L_CURLY@[16; 17)
WHITESPACE@[17; 18) WHITESPACE@[17; 18)
R_CURLY@[18; 19) R_CURLY@[18; 19)

View file

@ -41,7 +41,7 @@ FILE@[0; 71)
L_PAREN@[33; 34) L_PAREN@[33; 34)
R_PAREN@[34; 35) R_PAREN@[34; 35)
WHITESPACE@[35; 36) WHITESPACE@[35; 36)
BLOCK_EXPR@[36; 70) BLOCK@[36; 70)
L_CURLY@[36; 37) L_CURLY@[36; 37)
WHITESPACE@[37; 38) WHITESPACE@[37; 38)
EXPR_STMT@[38; 68) EXPR_STMT@[38; 68)

View file

@ -8,7 +8,7 @@ FILE@[0; 21)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 20) BLOCK@[9; 20)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 11) WHITESPACE@[10; 11)
EXPR_STMT@[11; 18) EXPR_STMT@[11; 18)

View file

@ -5,37 +5,38 @@ FILE@[0; 64)
NAME@[7; 8) NAME@[7; 8)
IDENT@[7; 8) "S" IDENT@[7; 8) "S"
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
L_CURLY@[9; 10) NAMED_FIELD_DEF_LIST@[9; 63)
WHITESPACE@[10; 15) L_CURLY@[9; 10)
NAMED_FIELD@[15; 60) WHITESPACE@[10; 15)
ATTR@[15; 43) NAMED_FIELD_DEF@[15; 60)
POUND@[15; 16) ATTR@[15; 43)
TOKEN_TREE@[16; 43) POUND@[15; 16)
L_BRACK@[16; 17) TOKEN_TREE@[16; 43)
IDENT@[17; 22) "serde" L_BRACK@[16; 17)
TOKEN_TREE@[22; 42) IDENT@[17; 22) "serde"
L_PAREN@[22; 23) TOKEN_TREE@[22; 42)
IDENT@[23; 27) "with" L_PAREN@[22; 23)
WHITESPACE@[27; 28) IDENT@[23; 27) "with"
EQ@[28; 29) WHITESPACE@[27; 28)
WHITESPACE@[29; 30) EQ@[28; 29)
STRING@[30; 41) WHITESPACE@[29; 30)
R_PAREN@[41; 42) STRING@[30; 41)
R_BRACK@[42; 43) R_PAREN@[41; 42)
WHITESPACE@[43; 48) R_BRACK@[42; 43)
VISIBILITY@[48; 51) WHITESPACE@[43; 48)
PUB_KW@[48; 51) VISIBILITY@[48; 51)
WHITESPACE@[51; 52) PUB_KW@[48; 51)
NAME@[52; 55) WHITESPACE@[51; 52)
IDENT@[52; 55) "uri" NAME@[52; 55)
COLON@[55; 56) IDENT@[52; 55) "uri"
WHITESPACE@[56; 57) COLON@[55; 56)
PATH_TYPE@[57; 60) WHITESPACE@[56; 57)
PATH@[57; 60) PATH_TYPE@[57; 60)
PATH_SEGMENT@[57; 60) PATH@[57; 60)
NAME_REF@[57; 60) PATH_SEGMENT@[57; 60)
IDENT@[57; 60) "Uri" NAME_REF@[57; 60)
COMMA@[60; 61) IDENT@[57; 60) "Uri"
WHITESPACE@[61; 62) COMMA@[60; 61)
R_CURLY@[62; 63) WHITESPACE@[61; 62)
R_CURLY@[62; 63)
WHITESPACE@[63; 64) WHITESPACE@[63; 64)

View file

@ -8,64 +8,65 @@ FILE@[0; 69)
NAME_REF@[5; 6) NAME_REF@[5; 6)
IDENT@[5; 6) "S" IDENT@[5; 6) "S"
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
L_CURLY@[7; 8) ITEM_LIST@[7; 68)
WHITESPACE@[8; 13) L_CURLY@[7; 8)
FN_DEF@[13; 33) WHITESPACE@[8; 13)
FN_KW@[13; 15) FN_DEF@[13; 33)
WHITESPACE@[15; 16) FN_KW@[13; 15)
NAME@[16; 17) WHITESPACE@[15; 16)
IDENT@[16; 17) "a" NAME@[16; 17)
PARAM_LIST@[17; 30) IDENT@[16; 17) "a"
L_PAREN@[17; 18) PARAM_LIST@[17; 30)
SELF_PARAM@[18; 29) L_PAREN@[17; 18)
SELF_KW@[18; 22) SELF_PARAM@[18; 29)
COLON@[22; 23) SELF_KW@[18; 22)
WHITESPACE@[23; 24) COLON@[22; 23)
REFERENCE_TYPE@[24; 29) WHITESPACE@[23; 24)
AMP@[24; 25) REFERENCE_TYPE@[24; 29)
PATH_TYPE@[25; 29) AMP@[24; 25)
PATH@[25; 29) PATH_TYPE@[25; 29)
PATH_SEGMENT@[25; 29) PATH@[25; 29)
NAME_REF@[25; 29) PATH_SEGMENT@[25; 29)
IDENT@[25; 29) "Self" NAME_REF@[25; 29)
R_PAREN@[29; 30) IDENT@[25; 29) "Self"
WHITESPACE@[30; 31) R_PAREN@[29; 30)
BLOCK_EXPR@[31; 33) WHITESPACE@[30; 31)
L_CURLY@[31; 32) BLOCK@[31; 33)
R_CURLY@[32; 33) L_CURLY@[31; 32)
WHITESPACE@[33; 38) R_CURLY@[32; 33)
FN_DEF@[38; 66) WHITESPACE@[33; 38)
FN_KW@[38; 40) FN_DEF@[38; 66)
WHITESPACE@[40; 41) FN_KW@[38; 40)
NAME@[41; 42) WHITESPACE@[40; 41)
IDENT@[41; 42) "b" NAME@[41; 42)
PARAM_LIST@[42; 63) IDENT@[41; 42) "b"
L_PAREN@[42; 43) PARAM_LIST@[42; 63)
SELF_PARAM@[43; 62) L_PAREN@[42; 43)
MUT_KW@[43; 46) SELF_PARAM@[43; 62)
WHITESPACE@[46; 47) MUT_KW@[43; 46)
SELF_KW@[47; 51) WHITESPACE@[46; 47)
COLON@[51; 52) SELF_KW@[47; 51)
WHITESPACE@[52; 53) COLON@[51; 52)
PATH_TYPE@[53; 62) WHITESPACE@[52; 53)
PATH@[53; 62) PATH_TYPE@[53; 62)
PATH_SEGMENT@[53; 62) PATH@[53; 62)
NAME_REF@[53; 56) PATH_SEGMENT@[53; 62)
IDENT@[53; 56) "Box" NAME_REF@[53; 56)
TYPE_ARG_LIST@[56; 62) IDENT@[53; 56) "Box"
L_ANGLE@[56; 57) TYPE_ARG_LIST@[56; 62)
TYPE_ARG@[57; 61) L_ANGLE@[56; 57)
PATH_TYPE@[57; 61) TYPE_ARG@[57; 61)
PATH@[57; 61) PATH_TYPE@[57; 61)
PATH_SEGMENT@[57; 61) PATH@[57; 61)
NAME_REF@[57; 61) PATH_SEGMENT@[57; 61)
IDENT@[57; 61) "Self" NAME_REF@[57; 61)
R_ANGLE@[61; 62) IDENT@[57; 61) "Self"
R_PAREN@[62; 63) R_ANGLE@[61; 62)
WHITESPACE@[63; 64) R_PAREN@[62; 63)
BLOCK_EXPR@[64; 66) WHITESPACE@[63; 64)
L_CURLY@[64; 65) BLOCK@[64; 66)
R_CURLY@[65; 66) L_CURLY@[64; 65)
WHITESPACE@[66; 67) R_CURLY@[65; 66)
R_CURLY@[67; 68) WHITESPACE@[66; 67)
R_CURLY@[67; 68)
WHITESPACE@[68; 69) WHITESPACE@[68; 69)

View file

@ -8,13 +8,13 @@ FILE@[0; 69)
L_PAREN@[6; 7) L_PAREN@[6; 7)
R_PAREN@[7; 8) R_PAREN@[7; 8)
WHITESPACE@[8; 9) WHITESPACE@[8; 9)
BLOCK_EXPR@[9; 68) BLOCK@[9; 68)
L_CURLY@[9; 10) L_CURLY@[9; 10)
WHITESPACE@[10; 15) WHITESPACE@[10; 15)
LOOP_EXPR@[15; 66) LOOP_EXPR@[15; 66)
LOOP_KW@[15; 19) LOOP_KW@[15; 19)
WHITESPACE@[19; 20) WHITESPACE@[19; 20)
BLOCK_EXPR@[20; 66) BLOCK@[20; 66)
L_CURLY@[20; 21) L_CURLY@[20; 21)
WHITESPACE@[21; 30) WHITESPACE@[21; 30)
EXPR_STMT@[30; 39) EXPR_STMT@[30; 39)

Some files were not shown because too many files have changed in this diff Show more