Skip to content

Commit 2f1ab3a

Browse files
committed
syntax: Add new values that can be used with the quasiquoter
1 parent 2888563 commit 2f1ab3a

File tree

1 file changed

+157
-2
lines changed

1 file changed

+157
-2
lines changed

src/libsyntax/ext/quote.rs

Lines changed: 157 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@ pub mod rt {
4242
pub use ast::*;
4343
pub use parse::token::*;
4444
pub use parse::new_parser_from_tts;
45-
pub use codemap::BytePos;
46-
pub use codemap::span;
45+
pub use codemap::{BytePos, span, dummy_spanned};
4746

4847
use print::pprust;
4948
use print::pprust::{item_to_str, ty_to_str};
@@ -119,6 +118,90 @@ pub mod rt {
119118
}
120119
}
121120
121+
impl ToSource for ast::blk {
122+
fn to_source(&self, cx: @ext_ctxt) -> ~str {
123+
pprust::block_to_str(self, cx.parse_sess().interner)
124+
}
125+
}
126+
127+
impl<'self> ToSource for &'self str {
128+
fn to_source(&self, _cx: @ext_ctxt) -> ~str {
129+
let lit = dummy_spanned(ast::lit_str(@str::from_slice(*self)));
130+
pprust::lit_to_str(@lit)
131+
}
132+
}
133+
134+
impl ToSource for int {
135+
fn to_source(&self, _cx: @ext_ctxt) -> ~str {
136+
let lit = dummy_spanned(ast::lit_int(*self as i64, ast::ty_i));
137+
pprust::lit_to_str(@lit)
138+
}
139+
}
140+
141+
impl ToSource for i8 {
142+
fn to_source(&self, _cx: @ext_ctxt) -> ~str {
143+
let lit = dummy_spanned(ast::lit_int(*self as i64, ast::ty_i8));
144+
pprust::lit_to_str(@lit)
145+
}
146+
}
147+
148+
impl ToSource for i16 {
149+
fn to_source(&self, _cx: @ext_ctxt) -> ~str {
150+
let lit = dummy_spanned(ast::lit_int(*self as i64, ast::ty_i16));
151+
pprust::lit_to_str(@lit)
152+
}
153+
}
154+
155+
156+
impl ToSource for i32 {
157+
fn to_source(&self, _cx: @ext_ctxt) -> ~str {
158+
let lit = dummy_spanned(ast::lit_int(*self as i64, ast::ty_i32));
159+
pprust::lit_to_str(@lit)
160+
}
161+
}
162+
163+
impl ToSource for i64 {
164+
fn to_source(&self, _cx: @ext_ctxt) -> ~str {
165+
let lit = dummy_spanned(ast::lit_int(*self as i64, ast::ty_i64));
166+
pprust::lit_to_str(@lit)
167+
}
168+
}
169+
170+
impl ToSource for uint {
171+
fn to_source(&self, _cx: @ext_ctxt) -> ~str {
172+
let lit = dummy_spanned(ast::lit_uint(*self as u64, ast::ty_u));
173+
pprust::lit_to_str(@lit)
174+
}
175+
}
176+
177+
impl ToSource for u8 {
178+
fn to_source(&self, _cx: @ext_ctxt) -> ~str {
179+
let lit = dummy_spanned(ast::lit_uint(*self as u64, ast::ty_u8));
180+
pprust::lit_to_str(@lit)
181+
}
182+
}
183+
184+
impl ToSource for u16 {
185+
fn to_source(&self, _cx: @ext_ctxt) -> ~str {
186+
let lit = dummy_spanned(ast::lit_uint(*self as u64, ast::ty_u16));
187+
pprust::lit_to_str(@lit)
188+
}
189+
}
190+
191+
impl ToSource for u32 {
192+
fn to_source(&self, _cx: @ext_ctxt) -> ~str {
193+
let lit = dummy_spanned(ast::lit_uint(*self as u64, ast::ty_u32));
194+
pprust::lit_to_str(@lit)
195+
}
196+
}
197+
198+
impl ToSource for u64 {
199+
fn to_source(&self, _cx: @ext_ctxt) -> ~str {
200+
let lit = dummy_spanned(ast::lit_uint(*self as u64, ast::ty_u64));
201+
pprust::lit_to_str(@lit)
202+
}
203+
}
204+
122205
// Alas ... we write these out instead. All redundant.
123206
124207
impl ToTokens for ast::ident {
@@ -163,6 +246,78 @@ pub mod rt {
163246
}
164247
}
165248
249+
impl ToTokens for ast::blk {
250+
fn to_tokens(&self, cx: @ext_ctxt) -> ~[token_tree] {
251+
cx.parse_tts(self.to_source(cx))
252+
}
253+
}
254+
255+
impl<'self> ToTokens for &'self str {
256+
fn to_tokens(&self, cx: @ext_ctxt) -> ~[token_tree] {
257+
cx.parse_tts(self.to_source(cx))
258+
}
259+
}
260+
261+
impl ToTokens for int {
262+
fn to_tokens(&self, cx: @ext_ctxt) -> ~[token_tree] {
263+
cx.parse_tts(self.to_source(cx))
264+
}
265+
}
266+
267+
impl ToTokens for i8 {
268+
fn to_tokens(&self, cx: @ext_ctxt) -> ~[token_tree] {
269+
cx.parse_tts(self.to_source(cx))
270+
}
271+
}
272+
273+
impl ToTokens for i16 {
274+
fn to_tokens(&self, cx: @ext_ctxt) -> ~[token_tree] {
275+
cx.parse_tts(self.to_source(cx))
276+
}
277+
}
278+
279+
impl ToTokens for i32 {
280+
fn to_tokens(&self, cx: @ext_ctxt) -> ~[token_tree] {
281+
cx.parse_tts(self.to_source(cx))
282+
}
283+
}
284+
285+
impl ToTokens for i64 {
286+
fn to_tokens(&self, cx: @ext_ctxt) -> ~[token_tree] {
287+
cx.parse_tts(self.to_source(cx))
288+
}
289+
}
290+
291+
impl ToTokens for uint {
292+
fn to_tokens(&self, cx: @ext_ctxt) -> ~[token_tree] {
293+
cx.parse_tts(self.to_source(cx))
294+
}
295+
}
296+
297+
impl ToTokens for u8 {
298+
fn to_tokens(&self, cx: @ext_ctxt) -> ~[token_tree] {
299+
cx.parse_tts(self.to_source(cx))
300+
}
301+
}
302+
303+
impl ToTokens for u16 {
304+
fn to_tokens(&self, cx: @ext_ctxt) -> ~[token_tree] {
305+
cx.parse_tts(self.to_source(cx))
306+
}
307+
}
308+
309+
impl ToTokens for u32 {
310+
fn to_tokens(&self, cx: @ext_ctxt) -> ~[token_tree] {
311+
cx.parse_tts(self.to_source(cx))
312+
}
313+
}
314+
315+
impl ToTokens for u64 {
316+
fn to_tokens(&self, cx: @ext_ctxt) -> ~[token_tree] {
317+
cx.parse_tts(self.to_source(cx))
318+
}
319+
}
320+
166321
pub trait ExtParseUtils {
167322
fn parse_item(&self, s: ~str) -> @ast::item;
168323
fn parse_expr(&self, s: ~str) -> @ast::expr;

0 commit comments

Comments
 (0)