From 33f7141535e0bc43b338413557616b05ad612548 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Tue, 31 Oct 2017 12:42:29 +0800 Subject: libproc_macro - Encode fragments --- lib/libproc_macro/src/lib.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/libproc_macro/src/lib.rs b/lib/libproc_macro/src/lib.rs index 4afc2cbd..8b8ad7a6 100644 --- a/lib/libproc_macro/src/lib.rs +++ b/lib/libproc_macro/src/lib.rs @@ -19,6 +19,20 @@ enum Token { UnsignedInt(u128, u8), // Value, size (0=?,8,16,32,64,128) SignedInt(i128, u8), // Value, size (0=?,8,16,32,64,128) Float(f64, u8), // Value, size (0, 32, 64) + Fragment(FragmentType, u64), // Type and a key +} +#[repr(u8)] +enum FragementType { + Ident = 0, + Tt = 1, + + Path = 2, + Type = 3, + + Expr = 4, + Statement = 5, + Block = 6, + Pattern = 7, } impl From for Token { @@ -312,10 +326,10 @@ impl fmt::Display for TokenStream { if sz == 0 { } else if sz == 1 { - f.write_str("usize")?; + f.write_str("isize")?; } else { - f.write_str("u")?; + f.write_str("i")?; sz.fmt(f)?; } }, @@ -328,6 +342,9 @@ impl fmt::Display for TokenStream { sz.fmt(f)?; } }, + &Token::Fragment(ty, key) => { + write!(f, "_{}_{:x}", ty as u8, key)?; + }, } } Ok( () ) @@ -488,6 +505,7 @@ pub fn send_token_stream(ts: TokenStream) &Token::UnsignedInt(v, sz) => { s.putb(6); s.putb(sz); s.put_u128v(v); }, &Token::SignedInt(v, sz) => { s.putb(7); s.putb(sz); s.put_i128v(v); }, &Token::Float(v, sz) => { s.putb(8); s.putb(sz); s.put_f64(v); }, + &Token::Fragment(ty, key) => { s.putb(9); s.putb(ty as u8); s.put_u128v(key as u128); }, } } } -- cgit v1.2.3