diff options
author | John Hodge <tpg@ucc.asn.au> | 2017-10-31 12:42:29 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2017-10-31 12:42:29 +0800 |
commit | 33f7141535e0bc43b338413557616b05ad612548 (patch) | |
tree | 2e3623ea891fb7ec01ed05d3aafeb08125919bbb | |
parent | f323ec43f11b288ab633fd8608d2e9f32900a0a4 (diff) | |
download | mrust-33f7141535e0bc43b338413557616b05ad612548.tar.gz |
libproc_macro - Encode fragments
-rw-r--r-- | lib/libproc_macro/src/lib.rs | 22 |
1 files changed, 20 insertions, 2 deletions
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<char> 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); }, } } } |