@@ -67,65 +67,65 @@ pub impl append_types for @ast::path {
67
67
}
68
68
69
69
pub trait ext_ctxt_ast_builder {
70
- fn ty_param ( id : ast:: ident , +bounds : ~[ ast:: ty_param_bound ] )
70
+ fn ty_param ( & self , id : ast:: ident , +bounds : ~[ ast:: ty_param_bound ] )
71
71
-> ast:: ty_param ;
72
- fn arg ( name : ident , ty : @ast:: Ty ) -> ast:: arg ;
73
- fn expr_block ( e : @ast:: expr ) -> ast:: blk ;
74
- fn fn_decl ( +inputs : ~[ ast:: arg ] , output : @ast:: Ty ) -> ast:: fn_decl ;
75
- fn item ( name : ident , span : span , +node : ast:: item_ ) -> @ast:: item ;
76
- fn item_fn_poly ( name : ident ,
72
+ fn arg ( & self , name : ident , ty : @ast:: Ty ) -> ast:: arg ;
73
+ fn expr_block ( & self , e : @ast:: expr ) -> ast:: blk ;
74
+ fn fn_decl ( & self , +inputs : ~[ ast:: arg ] , output : @ast:: Ty ) -> ast:: fn_decl ;
75
+ fn item ( & self , name : ident , span : span , +node : ast:: item_ ) -> @ast:: item ;
76
+ fn item_fn_poly ( & self , name : ident ,
77
77
+inputs : ~[ ast:: arg ] ,
78
78
output : @ast:: Ty ,
79
79
+ty_params : ~[ ast:: ty_param ] ,
80
80
+body : ast:: blk ) -> @ast:: item ;
81
- fn item_fn ( name : ident ,
81
+ fn item_fn ( & self , name : ident ,
82
82
+inputs : ~[ ast:: arg ] ,
83
83
output : @ast:: Ty ,
84
84
+body : ast:: blk ) -> @ast:: item ;
85
- fn item_enum_poly ( name : ident ,
85
+ fn item_enum_poly ( & self , name : ident ,
86
86
span : span ,
87
87
+enum_definition : ast:: enum_def ,
88
88
+ty_params : ~[ ast:: ty_param ] ) -> @ast:: item ;
89
- fn item_enum ( name : ident , span : span ,
89
+ fn item_enum ( & self , name : ident , span : span ,
90
90
+enum_definition : ast:: enum_def ) -> @ast:: item ;
91
- fn item_struct_poly ( name : ident , span : span ,
91
+ fn item_struct_poly ( & self , name : ident , span : span ,
92
92
struct_def : ast:: struct_def ,
93
93
ty_params : ~[ ast:: ty_param ] ) -> @ast:: item ;
94
- fn item_struct ( name : ident , span : span ,
94
+ fn item_struct ( & self , name : ident , span : span ,
95
95
struct_def : ast:: struct_def ) -> @ast:: item ;
96
- fn struct_expr ( path : @ast:: path , fields : ~[ ast:: field ] ) -> @ast:: expr ;
97
- fn variant ( name : ident , span : span , +tys : ~[ @ast:: Ty ] ) -> ast:: variant ;
98
- fn item_mod ( name : ident , span : span , +items : ~[ @ast:: item ] ) -> @ast:: item ;
99
- fn ty_path_ast_builder ( path : @ast:: path ) -> @ast:: Ty ;
100
- fn item_ty_poly ( name : ident ,
96
+ fn struct_expr ( & self , path : @ast:: path , fields : ~[ ast:: field ] ) -> @ast:: expr ;
97
+ fn variant ( & self , name : ident , span : span , +tys : ~[ @ast:: Ty ] ) -> ast:: variant ;
98
+ fn item_mod ( & self , name : ident , span : span , +items : ~[ @ast:: item ] ) -> @ast:: item ;
99
+ fn ty_path_ast_builder ( & self , path : @ast:: path ) -> @ast:: Ty ;
100
+ fn item_ty_poly ( & self , name : ident ,
101
101
span : span ,
102
102
ty : @ast:: Ty ,
103
103
+params : ~[ ast:: ty_param ] ) -> @ast:: item ;
104
- fn item_ty ( name : ident , span : span , ty : @ast:: Ty ) -> @ast:: item ;
105
- fn ty_vars ( +ty_params : ~[ ast:: ty_param ] ) -> ~[ @ast:: Ty ] ;
106
- fn ty_vars_global ( +ty_params : ~[ ast:: ty_param ] ) -> ~[ @ast:: Ty ] ;
107
- fn ty_field_imm ( name : ident , ty : @ast:: Ty ) -> ast:: ty_field ;
108
- fn field_imm ( name : ident , e : @ast:: expr ) -> ast:: field ;
109
- fn block ( +stmts : ~[ @ast:: stmt ] , e : @ast:: expr ) -> ast:: blk ;
110
- fn stmt_let ( ident : ident , e : @ast:: expr ) -> @ast:: stmt ;
111
- fn stmt_expr ( e : @ast:: expr ) -> @ast:: stmt ;
112
- fn block_expr ( b : ast:: blk ) -> @ast:: expr ;
113
- fn ty_option ( ty : @ast:: Ty ) -> @ast:: Ty ;
114
- fn ty_infer ( ) -> @ast:: Ty ;
115
- fn ty_nil_ast_builder ( ) -> @ast:: Ty ;
116
- fn strip_bounds ( bounds : & [ ast:: ty_param ] ) -> ~[ ast:: ty_param ] ;
104
+ fn item_ty ( & self , name : ident , span : span , ty : @ast:: Ty ) -> @ast:: item ;
105
+ fn ty_vars ( & self , +ty_params : ~[ ast:: ty_param ] ) -> ~[ @ast:: Ty ] ;
106
+ fn ty_vars_global ( & self , +ty_params : ~[ ast:: ty_param ] ) -> ~[ @ast:: Ty ] ;
107
+ fn ty_field_imm ( & self , name : ident , ty : @ast:: Ty ) -> ast:: ty_field ;
108
+ fn field_imm ( & self , name : ident , e : @ast:: expr ) -> ast:: field ;
109
+ fn block ( & self , +stmts : ~[ @ast:: stmt ] , e : @ast:: expr ) -> ast:: blk ;
110
+ fn stmt_let ( & self , ident : ident , e : @ast:: expr ) -> @ast:: stmt ;
111
+ fn stmt_expr ( & self , e : @ast:: expr ) -> @ast:: stmt ;
112
+ fn block_expr ( & self , b : ast:: blk ) -> @ast:: expr ;
113
+ fn ty_option ( & self , ty : @ast:: Ty ) -> @ast:: Ty ;
114
+ fn ty_infer ( & self ) -> @ast:: Ty ;
115
+ fn ty_nil_ast_builder ( & self ) -> @ast:: Ty ;
116
+ fn strip_bounds ( & self , bounds : & [ ast:: ty_param ] ) -> ~[ ast:: ty_param ] ;
117
117
}
118
118
119
119
pub impl ext_ctxt_ast_builder for ext_ctxt {
120
- fn ty_option ( ty : @ast:: Ty ) -> @ast:: Ty {
120
+ fn ty_option ( & self , ty : @ast:: Ty ) -> @ast:: Ty {
121
121
self . ty_path_ast_builder ( path_global ( ~[
122
122
self . ident_of ( ~"core") ,
123
123
self . ident_of ( ~"option") ,
124
124
self . ident_of ( ~"Option ")
125
125
] , dummy_sp ( ) ) . add_ty ( ty) )
126
126
}
127
127
128
- fn block_expr ( b : ast:: blk ) -> @ast:: expr {
128
+ fn block_expr ( & self , b : ast:: blk ) -> @ast:: expr {
129
129
@expr {
130
130
id: self . next_id ( ) ,
131
131
callee_id: self . next_id ( ) ,
@@ -134,24 +134,24 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
134
134
}
135
135
}
136
136
137
- fn stmt_expr ( e : @ast:: expr ) -> @ast:: stmt {
137
+ fn stmt_expr ( & self , e : @ast:: expr ) -> @ast:: stmt {
138
138
@spanned { node : ast:: stmt_expr ( e, self . next_id ( ) ) ,
139
139
span : dummy_sp ( ) }
140
140
}
141
141
142
- fn stmt_let ( ident : ident , e : @ast:: expr ) -> @ast:: stmt {
143
- let ext_cx = self ;
142
+ fn stmt_let ( & self , ident : ident , e : @ast:: expr ) -> @ast:: stmt {
143
+ let ext_cx = * self ;
144
144
quote_stmt ! ( let $ident = $e; )
145
145
}
146
146
147
- fn field_imm ( name : ident , e : @ast:: expr ) -> ast:: field {
147
+ fn field_imm ( & self , name : ident , e : @ast:: expr ) -> ast:: field {
148
148
spanned {
149
149
node : ast:: field_ { mutbl : ast:: m_imm, ident : name, expr : e } ,
150
150
span : dummy_sp ( ) ,
151
151
}
152
152
}
153
153
154
- fn ty_field_imm ( name : ident , ty : @ast:: Ty ) -> ast:: ty_field {
154
+ fn ty_field_imm ( & self , name : ident , ty : @ast:: Ty ) -> ast:: ty_field {
155
155
spanned {
156
156
node : ast:: ty_field_ {
157
157
ident : name,
@@ -161,21 +161,21 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
161
161
}
162
162
}
163
163
164
- fn ty_infer ( ) -> @ast:: Ty {
164
+ fn ty_infer ( & self ) -> @ast:: Ty {
165
165
@ast:: Ty {
166
166
id : self . next_id ( ) ,
167
167
node : ast:: ty_infer,
168
168
span : dummy_sp ( ) ,
169
169
}
170
170
}
171
171
172
- fn ty_param ( id : ast:: ident , +bounds : ~[ ast:: ty_param_bound ] )
172
+ fn ty_param ( & self , id : ast:: ident , +bounds : ~[ ast:: ty_param_bound ] )
173
173
-> ast:: ty_param
174
174
{
175
175
ast:: ty_param { ident : id, id : self . next_id ( ) , bounds : @bounds }
176
176
}
177
177
178
- fn arg ( name : ident , ty : @ast:: Ty ) -> ast:: arg {
178
+ fn arg ( & self , name : ident , ty : @ast:: Ty ) -> ast:: arg {
179
179
ast:: arg {
180
180
mode : ast:: infer ( self . next_id ( ) ) ,
181
181
is_mutbl : false ,
@@ -192,7 +192,7 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
192
192
}
193
193
}
194
194
195
- fn block ( +stmts : ~[ @ast:: stmt ] , e : @ast:: expr ) -> ast:: blk {
195
+ fn block ( & self , +stmts : ~[ @ast:: stmt ] , e : @ast:: expr ) -> ast:: blk {
196
196
let blk = ast:: blk_ {
197
197
view_items : ~[ ] ,
198
198
stmts : stmts,
@@ -204,11 +204,11 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
204
204
spanned { node : blk, span : dummy_sp ( ) }
205
205
}
206
206
207
- fn expr_block ( e : @ast:: expr ) -> ast:: blk {
207
+ fn expr_block ( & self , e : @ast:: expr ) -> ast:: blk {
208
208
self . block ( ~[ ] , e)
209
209
}
210
210
211
- fn fn_decl ( +inputs : ~[ ast:: arg ] ,
211
+ fn fn_decl ( & self , +inputs : ~[ ast:: arg ] ,
212
212
output : @ast:: Ty ) -> ast:: fn_decl {
213
213
ast:: fn_decl {
214
214
inputs : inputs,
@@ -217,8 +217,7 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
217
217
}
218
218
}
219
219
220
- fn item ( name : ident ,
221
- span : span ,
220
+ fn item ( & self , name : ident , span : span ,
222
221
+node : ast:: item_ ) -> @ast:: item {
223
222
224
223
// XXX: Would be nice if our generated code didn't violate
@@ -241,7 +240,7 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
241
240
span : span }
242
241
}
243
242
244
- fn item_fn_poly ( name : ident ,
243
+ fn item_fn_poly ( & self , name : ident ,
245
244
+inputs : ~[ ast:: arg ] ,
246
245
output : @ast:: Ty ,
247
246
+ty_params : ~[ ast:: ty_param ] ,
@@ -254,37 +253,36 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
254
253
body) )
255
254
}
256
255
257
- fn item_fn ( name : ident ,
256
+ fn item_fn ( & self , name : ident ,
258
257
+inputs : ~[ ast:: arg ] ,
259
258
output : @ast:: Ty ,
260
259
+body : ast:: blk ) -> @ast:: item {
261
260
self . item_fn_poly ( name, inputs, output, ~[ ] , body)
262
261
}
263
262
264
- fn item_enum_poly ( name : ident ,
265
- span : span ,
263
+ fn item_enum_poly ( & self , name : ident , span : span ,
266
264
+enum_definition : ast:: enum_def ,
267
265
+ty_params : ~[ ast:: ty_param ] ) -> @ast:: item {
268
266
self . item ( name, span, ast:: item_enum ( enum_definition, ty_params) )
269
267
}
270
268
271
- fn item_enum ( name : ident , span : span ,
269
+ fn item_enum ( & self , name : ident , span : span ,
272
270
+enum_definition : ast:: enum_def ) -> @ast:: item {
273
271
self . item_enum_poly ( name, span, enum_definition, ~[ ] )
274
272
}
275
273
276
- fn item_struct ( name : ident , span : span ,
274
+ fn item_struct ( & self , name : ident , span : span ,
277
275
struct_def : ast:: struct_def ) -> @ast:: item {
278
276
self . item_struct_poly ( name, span, struct_def, ~[ ] )
279
277
}
280
278
281
- fn item_struct_poly ( name : ident , span : span ,
279
+ fn item_struct_poly ( & self , name : ident , span : span ,
282
280
struct_def : ast:: struct_def ,
283
281
ty_params : ~[ ast:: ty_param ] ) -> @ast:: item {
284
282
self . item ( name, span, ast:: item_struct ( @struct_def, ty_params) )
285
283
}
286
284
287
- fn struct_expr ( path : @ast:: path , fields : ~[ ast:: field ] ) -> @ast:: expr {
285
+ fn struct_expr ( & self , path : @ast:: path , fields : ~[ ast:: field ] ) -> @ast:: expr {
288
286
@ast:: expr {
289
287
id : self . next_id ( ) ,
290
288
callee_id : self . next_id ( ) ,
@@ -293,8 +291,7 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
293
291
}
294
292
}
295
293
296
- fn variant ( name : ident ,
297
- span : span ,
294
+ fn variant ( & self , name : ident , span : span ,
298
295
+tys : ~[ @ast:: Ty ] ) -> ast:: variant {
299
296
let args = do tys. map |ty| {
300
297
ast:: variant_arg { ty : * ty, id : self . next_id ( ) }
@@ -313,9 +310,9 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
313
310
}
314
311
}
315
312
316
- fn item_mod ( name : ident ,
317
- span : span ,
313
+ fn item_mod ( & self , name : ident , span : span ,
318
314
+items : ~[ @ast:: item ] ) -> @ast:: item {
315
+
319
316
// XXX: Total hack: import `core::kinds::Owned` to work around a
320
317
// parser bug whereby `fn f<T: ::kinds::Owned>` doesn't parse.
321
318
let vi = ast:: view_item_import ( ~[
@@ -353,45 +350,43 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
353
350
)
354
351
}
355
352
356
- fn ty_path_ast_builder ( path : @ast:: path ) -> @ast:: Ty {
353
+ fn ty_path_ast_builder ( & self , path : @ast:: path ) -> @ast:: Ty {
357
354
@ast:: Ty {
358
355
id : self . next_id ( ) ,
359
356
node : ast:: ty_path ( path, self . next_id ( ) ) ,
360
357
span : path. span ,
361
358
}
362
359
}
363
360
364
- fn ty_nil_ast_builder ( ) -> @ast:: Ty {
361
+ fn ty_nil_ast_builder ( & self ) -> @ast:: Ty {
365
362
@ast:: Ty {
366
363
id : self . next_id ( ) ,
367
364
node : ast:: ty_nil,
368
365
span : dummy_sp ( ) ,
369
366
}
370
367
}
371
368
372
- fn strip_bounds ( bounds : & [ ast:: ty_param ] ) -> ~[ ast:: ty_param ] {
369
+ fn strip_bounds ( & self , bounds : & [ ast:: ty_param ] ) -> ~[ ast:: ty_param ] {
373
370
do bounds. map |ty_param| {
374
371
ast:: ty_param { bounds : @~[ ] , ..copy * ty_param }
375
372
}
376
373
}
377
374
378
- fn item_ty_poly ( name : ident ,
379
- span : span ,
380
- ty : @ast:: Ty ,
375
+ fn item_ty_poly ( & self , name : ident , span : span , ty : @ast:: Ty ,
381
376
+params : ~[ ast:: ty_param ] ) -> @ast:: item {
382
377
self . item ( name, span, ast:: item_ty ( ty, params) )
383
378
}
384
379
385
- fn item_ty ( name : ident , span : span , ty : @ast:: Ty ) -> @ast:: item {
380
+ fn item_ty ( & self , name : ident , span : span , ty : @ast:: Ty ) -> @ast:: item {
386
381
self . item_ty_poly ( name, span, ty, ~[ ] )
387
382
}
388
383
389
- fn ty_vars ( +ty_params : ~[ ast:: ty_param ] ) -> ~[ @ast:: Ty ] {
384
+ fn ty_vars ( & self , +ty_params : ~[ ast:: ty_param ] ) -> ~[ @ast:: Ty ] {
390
385
ty_params. map ( |p| self . ty_path_ast_builder (
391
386
path ( ~[ p. ident ] , dummy_sp ( ) ) ) )
392
387
}
393
388
394
- fn ty_vars_global ( +ty_params : ~[ ast:: ty_param ] ) -> ~[ @ast:: Ty ] {
389
+ fn ty_vars_global ( & self , +ty_params : ~[ ast:: ty_param ] ) -> ~[ @ast:: Ty ] {
395
390
ty_params. map ( |p| self . ty_path_ast_builder (
396
391
path ( ~[ p. ident ] , dummy_sp ( ) ) ) )
397
392
}
0 commit comments