From faf526e021e09770cae28f8d7c8ee88a54d6574d Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 9 Apr 2019 01:06:30 +0300 Subject: migrate to untyped rowan --- crates/ra_parser/src/syntax_kind/generated.rs.tera | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'crates/ra_parser/src/syntax_kind/generated.rs.tera') diff --git a/crates/ra_parser/src/syntax_kind/generated.rs.tera b/crates/ra_parser/src/syntax_kind/generated.rs.tera index f241a21a0..5b9ff21af 100644 --- a/crates/ra_parser/src/syntax_kind/generated.rs.tera +++ b/crates/ra_parser/src/syntax_kind/generated.rs.tera @@ -9,6 +9,7 @@ use super::SyntaxInfo; /// The kind of syntax node, e.g. `IDENT`, `USE_KW`, or `STRUCT_DEF`. #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[repr(u16)] pub enum SyntaxKind { // Technical SyntaxKinds: they appear temporally during parsing, // but never end up in the final tree @@ -26,9 +27,25 @@ pub enum SyntaxKind { {% for t in concat(a=literals, b=tokens, c=nodes) %} {{t}}, {%- endfor %} + // Technical kind so that we can cast from u16 safely + #[doc(hidden)] + __LAST, } use self::SyntaxKind::*; +impl From for SyntaxKind { + fn from(d: u16) -> SyntaxKind { + assert!(d <= (__LAST as u16)); + unsafe { std::mem::transmute::(d) } + } +} + +impl From for u16 { + fn from(k: SyntaxKind) -> u16 { + k as u16 + } +} + impl SyntaxKind { pub fn is_keyword(self) -> bool { match self { @@ -72,6 +89,7 @@ impl SyntaxKind { {%- endfor %} TOMBSTONE => &SyntaxInfo { name: "TOMBSTONE" }, EOF => &SyntaxInfo { name: "EOF" }, + __LAST => &SyntaxInfo { name: "__LAST" }, } } pub fn from_keyword(ident: &str) -> Option { -- cgit v1.2.3