migrate to untyped rowan

This commit is contained in:
Aleksey Kladov 2019-04-09 01:06:30 +03:00
parent ac6ab07587
commit faf526e021
10 changed files with 192 additions and 158 deletions

View file

@ -7,6 +7,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
@ -230,9 +231,25 @@ pub enum SyntaxKind {
ARG_LIST,
TYPE_BOUND,
TYPE_BOUND_LIST,
// Technical kind so that we can cast from u16 safely
#[doc(hidden)]
__LAST,
}
use self::SyntaxKind::*;
impl From<u16> for SyntaxKind {
fn from(d: u16) -> SyntaxKind {
assert!(d <= (__LAST as u16));
unsafe { std::mem::transmute::<u16, SyntaxKind>(d) }
}
}
impl From<SyntaxKind> for u16 {
fn from(k: SyntaxKind) -> u16 {
k as u16
}
}
impl SyntaxKind {
pub fn is_keyword(self) -> bool {
match self {
@ -573,6 +590,7 @@ impl SyntaxKind {
TYPE_BOUND_LIST => &SyntaxInfo { name: "TYPE_BOUND_LIST" },
TOMBSTONE => &SyntaxInfo { name: "TOMBSTONE" },
EOF => &SyntaxInfo { name: "EOF" },
__LAST => &SyntaxInfo { name: "__LAST" },
}
}
pub fn from_keyword(ident: &str) -> Option<SyntaxKind> {

View file

@ -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<u16> for SyntaxKind {
fn from(d: u16) -> SyntaxKind {
assert!(d <= (__LAST as u16));
unsafe { std::mem::transmute::<u16, SyntaxKind>(d) }
}
}
impl From<SyntaxKind> 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<SyntaxKind> {