summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2017-10-31 12:42:29 +0800
committerJohn Hodge <tpg@ucc.asn.au>2017-10-31 12:42:29 +0800
commit33f7141535e0bc43b338413557616b05ad612548 (patch)
tree2e3623ea891fb7ec01ed05d3aafeb08125919bbb /lib
parentf323ec43f11b288ab633fd8608d2e9f32900a0a4 (diff)
downloadmrust-33f7141535e0bc43b338413557616b05ad612548.tar.gz
libproc_macro - Encode fragments
Diffstat (limited to 'lib')
-rw-r--r--lib/libproc_macro/src/lib.rs22
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); },
}
}
}