From 15af7ad36c507b17093ba86c393272819ff4b3cd Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 29 Dec 2017 20:47:54 +0300 Subject: Use array for infos --- src/bin/gen.rs | 16 ++++------------ src/syntax_kinds.rs | 16 +++++----------- 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/src/bin/gen.rs b/src/bin/gen.rs index d3539321e..4acf381e3 100644 --- a/src/bin/gen.rs +++ b/src/bin/gen.rs @@ -40,28 +40,20 @@ impl Grammar { ).unwrap(); } acc.push_str("\n"); + write!(acc, "static INFOS: [SyntaxInfo; {}] = [\n", self.syntax_kinds.len()).unwrap(); for kind in self.syntax_kinds.iter() { let sname = scream(kind); write!( acc, - "static {sname}_INFO: SyntaxInfo = SyntaxInfo {{\n name: \"{sname}\",\n}};\n", + " SyntaxInfo {{ name: \"{sname}\" }},\n", sname = sname ).unwrap(); } + acc.push_str("];\n"); acc.push_str("\n"); acc.push_str("pub(crate) fn syntax_info(kind: SyntaxKind) -> &'static SyntaxInfo {\n"); - acc.push_str(" match kind {\n"); - for kind in self.syntax_kinds.iter() { - let sname = scream(kind); - write!( - acc, - " {sname} => &{sname}_INFO,\n", - sname = sname - ).unwrap(); - } - acc.push_str(" _ => unreachable!()\n"); - acc.push_str(" }\n"); + acc.push_str(" &INFOS[kind.0 as usize]\n"); acc.push_str("}\n"); acc } diff --git a/src/syntax_kinds.rs b/src/syntax_kinds.rs index a5485c4c1..421cae15a 100644 --- a/src/syntax_kinds.rs +++ b/src/syntax_kinds.rs @@ -4,17 +4,11 @@ use tree::{SyntaxKind, SyntaxInfo}; pub const IDENT: SyntaxKind = SyntaxKind(0); pub const WHITESPACE: SyntaxKind = SyntaxKind(1); -static IDENT_INFO: SyntaxInfo = SyntaxInfo { - name: "IDENT", -}; -static WHITESPACE_INFO: SyntaxInfo = SyntaxInfo { - name: "WHITESPACE", -}; +static INFOS: [SyntaxInfo; 2] = [ + SyntaxInfo { name: "IDENT" }, + SyntaxInfo { name: "WHITESPACE" }, +]; pub(crate) fn syntax_info(kind: SyntaxKind) -> &'static SyntaxInfo { - match kind { - IDENT => &IDENT_INFO, - WHITESPACE => &WHITESPACE_INFO, - _ => unreachable!() - } + &INFOS[kind.0 as usize] } -- cgit v1.2.3