From 0000f4f4f2f32c6ff67db6cbc27e3a49c85f4b99 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 2 Feb 2018 23:45:15 +0300 Subject: G: static items --- src/parser/event_parser/grammar/items/mod.rs | 28 ++++++++++++++++++++++------ src/syntax_kinds.rs | 5 +++++ 2 files changed, 27 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/parser/event_parser/grammar/items/mod.rs b/src/parser/event_parser/grammar/items/mod.rs index 35825e7c4..9930de347 100644 --- a/src/parser/event_parser/grammar/items/mod.rs +++ b/src/parser/event_parser/grammar/items/mod.rs @@ -46,6 +46,10 @@ fn item(p: &mut Parser) { } } } + STATIC_KW => { + static_item(p); + STATIC_ITEM + } MOD_KW => { mod_item(p); MOD_ITEM @@ -92,6 +96,24 @@ fn extern_crate_item(p: &mut Parser) { p.expect(IDENT) && alias(p) && p.expect(SEMI); } +fn extern_block(p: &mut Parser) { + assert!(p.at(L_CURLY)); + p.bump(); + p.expect(R_CURLY); +} + +fn static_item(p: &mut Parser) { + assert!(p.at(STATIC_KW)); + p.bump(); + p.eat(MUT_KW); + p.expect(IDENT); + p.expect(COLON); + types::type_ref(p); + p.expect(EQ); + expressions::expr(p); + p.expect(SEMI); +} + fn mod_item(p: &mut Parser) { assert!(p.at(MOD_KW)); p.bump(); @@ -104,12 +126,6 @@ fn mod_item(p: &mut Parser) { } } -fn extern_block(p: &mut Parser) { - assert!(p.at(L_CURLY)); - p.bump(); - p.expect(R_CURLY); -} - fn abi(p: &mut Parser) { assert!(p.at(EXTERN_KW)); let abi = p.start(); diff --git a/src/syntax_kinds.rs b/src/syntax_kinds.rs index f5d01c6f3..8d21d3fb7 100644 --- a/src/syntax_kinds.rs +++ b/src/syntax_kinds.rs @@ -30,6 +30,7 @@ pub enum SyntaxKind { MATCH_KW, CONST_KW, STATIC_KW, + MUT_KW, ERROR, IDENT, UNDERSCORE, @@ -88,6 +89,7 @@ pub enum SyntaxKind { EXTERN_CRATE_ITEM, MOD_ITEM, USE_ITEM, + STATIC_ITEM, EXTERN_BLOCK, ENUM_VARIANT, NAMED_FIELD, @@ -141,6 +143,7 @@ impl SyntaxKind { MATCH_KW => &SyntaxInfo { name: "MATCH_KW" }, CONST_KW => &SyntaxInfo { name: "CONST_KW" }, STATIC_KW => &SyntaxInfo { name: "STATIC_KW" }, + MUT_KW => &SyntaxInfo { name: "MUT_KW" }, ERROR => &SyntaxInfo { name: "ERROR" }, IDENT => &SyntaxInfo { name: "IDENT" }, UNDERSCORE => &SyntaxInfo { name: "UNDERSCORE" }, @@ -199,6 +202,7 @@ impl SyntaxKind { EXTERN_CRATE_ITEM => &SyntaxInfo { name: "EXTERN_CRATE_ITEM" }, MOD_ITEM => &SyntaxInfo { name: "MOD_ITEM" }, USE_ITEM => &SyntaxInfo { name: "USE_ITEM" }, + STATIC_ITEM => &SyntaxInfo { name: "STATIC_ITEM" }, EXTERN_BLOCK => &SyntaxInfo { name: "EXTERN_BLOCK" }, ENUM_VARIANT => &SyntaxInfo { name: "ENUM_VARIANT" }, NAMED_FIELD => &SyntaxInfo { name: "NAMED_FIELD" }, @@ -248,6 +252,7 @@ pub(crate) fn ident_to_keyword(ident: &str) -> Option { "match" => Some(MATCH_KW), "const" => Some(CONST_KW), "static" => Some(STATIC_KW), + "mut" => Some(MUT_KW), _ => None, } } -- cgit v1.2.3