Skip to content

Commit 2225e13

Browse files
Keegan McAllisteralexcrichton
authored andcommitted
---
yaml --- r: 152819 b: refs/heads/try2 c: 4e26e2d h: refs/heads/master i: 152817: e9908a4 152815: 2c243ce v: v3
1 parent 53a4475 commit 2225e13

File tree

2 files changed

+75
-126
lines changed

2 files changed

+75
-126
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: a0ec902e239b2219edf1a18b036dd32c18d3be42
8+
refs/heads/try2: 4e26e2d8ca0a389280cf9d46297043df9a63ce06
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/src/libsyntax/ext/quote.rs

Lines changed: 74 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -68,72 +68,61 @@ pub mod rt {
6868
6969
*/
7070

71+
// FIXME: Move this trait to pprust and get rid of *_to_str?
7172
pub trait ToSource {
7273
// Takes a thing and generates a string containing rust code for it.
7374
fn to_source(&self) -> String;
7475
}
7576

76-
impl ToSource for ast::Ident {
77-
fn to_source(&self) -> String {
78-
token::get_ident(*self).get().to_string()
79-
}
80-
}
81-
82-
impl ToSource for Gc<ast::Item> {
83-
fn to_source(&self) -> String {
84-
pprust::item_to_str(&**self)
85-
}
86-
}
87-
88-
impl<'a> ToSource for &'a [Gc<ast::Item>] {
89-
fn to_source(&self) -> String {
90-
self.iter()
91-
.map(|i| i.to_source())
92-
.collect::<Vec<String>>()
93-
.connect("\n\n")
94-
.to_string()
95-
}
96-
}
97-
98-
impl ToSource for ast::Ty {
99-
fn to_source(&self) -> String {
100-
pprust::ty_to_str(self)
101-
}
102-
}
103-
104-
impl<'a> ToSource for &'a [ast::Ty] {
105-
fn to_source(&self) -> String {
106-
self.iter()
107-
.map(|i| i.to_source())
108-
.collect::<Vec<String>>()
109-
.connect(", ")
110-
.to_string()
111-
}
112-
}
77+
macro_rules! impl_to_source(
78+
(Gc<$t:ty>, $pp:ident) => (
79+
impl ToSource for Gc<$t> {
80+
fn to_source(&self) -> String {
81+
pprust::$pp(&**self)
82+
}
83+
}
84+
);
85+
($t:ty, $pp:ident) => (
86+
impl ToSource for $t {
87+
fn to_source(&self) -> String {
88+
pprust::$pp(self)
89+
}
90+
}
91+
);
92+
)
11393

114-
impl ToSource for Generics {
115-
fn to_source(&self) -> String {
116-
pprust::generics_to_str(self)
117-
}
94+
fn slice_to_source<'a, T: ToSource>(sep: &'static str, xs: &'a [T]) -> String {
95+
xs.iter()
96+
.map(|i| i.to_source())
97+
.collect::<Vec<String>>()
98+
.connect(sep)
99+
.to_string()
118100
}
119101

120-
impl ToSource for Gc<ast::Expr> {
121-
fn to_source(&self) -> String {
122-
pprust::expr_to_str(&**self)
123-
}
124-
}
102+
macro_rules! impl_to_source_slice(
103+
($t:ty, $sep:expr) => (
104+
impl<'a> ToSource for &'a [$t] {
105+
fn to_source(&self) -> String {
106+
slice_to_source($sep, *self)
107+
}
108+
}
109+
)
110+
)
125111

126-
impl ToSource for ast::Block {
112+
impl ToSource for ast::Ident {
127113
fn to_source(&self) -> String {
128-
pprust::block_to_str(self)
114+
token::get_ident(*self).get().to_string()
129115
}
130116
}
131117

132-
impl ToSource for ast::Arg {
133-
fn to_source(&self) -> String {
134-
pprust::arg_to_str(self)
135-
}
136-
}
118+
impl_to_source!(ast::Ty, ty_to_str)
119+
impl_to_source!(ast::Block, block_to_str)
120+
impl_to_source!(ast::Arg, arg_to_str)
121+
impl_to_source!(Generics, generics_to_str)
122+
impl_to_source!(Gc<ast::Item>, item_to_str)
123+
impl_to_source!(Gc<ast::Expr>, expr_to_str)
124+
impl_to_source_slice!(ast::Ty, ", ")
125+
impl_to_source_slice!(Gc<ast::Item>, "\n\n")
137126

138127
impl<'a> ToSource for &'a str {
139128
fn to_source(&self) -> String {
@@ -163,76 +152,36 @@ pub mod rt {
163152
}
164153
}
165154

166-
impl ToSource for int {
167-
fn to_source(&self) -> String {
168-
let lit = dummy_spanned(ast::LitInt(*self as i64, ast::TyI));
169-
pprust::lit_to_str(&lit)
170-
}
171-
}
172-
173-
impl ToSource for i8 {
174-
fn to_source(&self) -> String {
175-
let lit = dummy_spanned(ast::LitInt(*self as i64, ast::TyI8));
176-
pprust::lit_to_str(&lit)
177-
}
178-
}
179-
180-
impl ToSource for i16 {
181-
fn to_source(&self) -> String {
182-
let lit = dummy_spanned(ast::LitInt(*self as i64, ast::TyI16));
183-
pprust::lit_to_str(&lit)
184-
}
185-
}
186-
187-
188-
impl ToSource for i32 {
189-
fn to_source(&self) -> String {
190-
let lit = dummy_spanned(ast::LitInt(*self as i64, ast::TyI32));
191-
pprust::lit_to_str(&lit)
192-
}
193-
}
194-
195-
impl ToSource for i64 {
196-
fn to_source(&self) -> String {
197-
let lit = dummy_spanned(ast::LitInt(*self as i64, ast::TyI64));
198-
pprust::lit_to_str(&lit)
199-
}
200-
}
201-
202-
impl ToSource for uint {
203-
fn to_source(&self) -> String {
204-
let lit = dummy_spanned(ast::LitUint(*self as u64, ast::TyU));
205-
pprust::lit_to_str(&lit)
206-
}
207-
}
208-
209-
impl ToSource for u8 {
210-
fn to_source(&self) -> String {
211-
let lit = dummy_spanned(ast::LitUint(*self as u64, ast::TyU8));
212-
pprust::lit_to_str(&lit)
213-
}
214-
}
215-
216-
impl ToSource for u16 {
217-
fn to_source(&self) -> String {
218-
let lit = dummy_spanned(ast::LitUint(*self as u64, ast::TyU16));
219-
pprust::lit_to_str(&lit)
220-
}
221-
}
155+
macro_rules! impl_to_source_int(
156+
(signed, $t:ty, $tag:ident) => (
157+
impl ToSource for $t {
158+
fn to_source(&self) -> String {
159+
let lit = dummy_spanned(ast::LitInt(*self as i64, ast::$tag));
160+
pprust::lit_to_str(&lit)
161+
}
162+
}
163+
);
164+
(unsigned, $t:ty, $tag:ident) => (
165+
impl ToSource for $t {
166+
fn to_source(&self) -> String {
167+
let lit = dummy_spanned(ast::LitUint(*self as u64, ast::$tag));
168+
pprust::lit_to_str(&lit)
169+
}
170+
}
171+
);
172+
)
222173

223-
impl ToSource for u32 {
224-
fn to_source(&self) -> String {
225-
let lit = dummy_spanned(ast::LitUint(*self as u64, ast::TyU32));
226-
pprust::lit_to_str(&lit)
227-
}
228-
}
174+
impl_to_source_int!(signed, int, TyI)
175+
impl_to_source_int!(signed, i8, TyI8)
176+
impl_to_source_int!(signed, i16, TyI16)
177+
impl_to_source_int!(signed, i32, TyI32)
178+
impl_to_source_int!(signed, i64, TyI64)
229179

230-
impl ToSource for u64 {
231-
fn to_source(&self) -> String {
232-
let lit = dummy_spanned(ast::LitUint(*self as u64, ast::TyU64));
233-
pprust::lit_to_str(&lit)
234-
}
235-
}
180+
impl_to_source_int!(unsigned, uint, TyU)
181+
impl_to_source_int!(unsigned, u8, TyU8)
182+
impl_to_source_int!(unsigned, u16, TyU16)
183+
impl_to_source_int!(unsigned, u32, TyU32)
184+
impl_to_source_int!(unsigned, u64, TyU64)
236185

237186
// Alas ... we write these out instead. All redundant.
238187

@@ -246,7 +195,7 @@ pub mod rt {
246195
)
247196
)
248197

249-
macro_rules! impl_to_tokens_self(
198+
macro_rules! impl_to_tokens_lifetime(
250199
($t:ty) => (
251200
impl<'a> ToTokens for $t {
252201
fn to_tokens(&self, cx: &ExtCtxt) -> Vec<TokenTree> {
@@ -258,14 +207,14 @@ pub mod rt {
258207

259208
impl_to_tokens!(ast::Ident)
260209
impl_to_tokens!(Gc<ast::Item>)
261-
impl_to_tokens_self!(&'a [Gc<ast::Item>])
210+
impl_to_tokens_lifetime!(&'a [Gc<ast::Item>])
262211
impl_to_tokens!(ast::Ty)
263-
impl_to_tokens_self!(&'a [ast::Ty])
212+
impl_to_tokens_lifetime!(&'a [ast::Ty])
264213
impl_to_tokens!(Generics)
265214
impl_to_tokens!(Gc<ast::Expr>)
266215
impl_to_tokens!(ast::Block)
267216
impl_to_tokens!(ast::Arg)
268-
impl_to_tokens_self!(&'a str)
217+
impl_to_tokens_lifetime!(&'a str)
269218
impl_to_tokens!(())
270219
impl_to_tokens!(char)
271220
impl_to_tokens!(bool)

0 commit comments

Comments
 (0)