Use array for infos

This commit is contained in:
Aleksey Kladov 2017-12-29 20:47:54 +03:00
parent 5276a7d3be
commit 15af7ad36c
2 changed files with 9 additions and 23 deletions

View File

@ -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
}

View File

@ -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]
}