@@ -67,61 +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 variant ( name : ident , span : span , +tys : ~[ @ast:: Ty ] ) -> ast:: variant ;
92
- fn item_mod ( name : ident , span : span , +items : ~[ @ast:: item ] ) -> @ast:: item ;
93
- fn ty_path_ast_builder ( path : @ast:: path ) -> @ast:: Ty ;
94
- fn item_ty_poly ( name : ident ,
91
+ fn item_struct_poly ( & self , name : ident , span : span ,
92
+ struct_def : ast:: struct_def ,
93
+ ty_params : ~[ ast:: ty_param ] ) -> @ast:: item ;
94
+ fn item_struct ( & self , name : ident , span : span ,
95
+ struct_def : ast:: struct_def ) -> @ast:: item ;
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 ,
95
101
span : span ,
96
102
ty : @ast:: Ty ,
97
103
+params : ~[ ast:: ty_param ] ) -> @ast:: item ;
98
- fn item_ty ( name : ident , span : span , ty : @ast:: Ty ) -> @ast:: item ;
99
- fn ty_vars ( +ty_params : ~[ ast:: ty_param ] ) -> ~[ @ast:: Ty ] ;
100
- fn ty_vars_global ( +ty_params : ~[ ast:: ty_param ] ) -> ~[ @ast:: Ty ] ;
101
- fn ty_field_imm ( name : ident , ty : @ast:: Ty ) -> ast:: ty_field ;
102
- fn ty_rec ( +v : ~[ ast:: ty_field ] ) -> @ast:: Ty ;
103
- fn field_imm ( name : ident , e : @ast:: expr ) -> ast:: field ;
104
- fn rec ( +v : ~[ ast:: field ] ) -> @ast:: expr ;
105
- fn block ( +stmts : ~[ @ast:: stmt ] , e : @ast:: expr ) -> ast:: blk ;
106
- fn stmt_let ( ident : ident , e : @ast:: expr ) -> @ast:: stmt ;
107
- fn stmt_expr ( e : @ast:: expr ) -> @ast:: stmt ;
108
- fn block_expr ( b : ast:: blk ) -> @ast:: expr ;
109
- fn ty_option ( ty : @ast:: Ty ) -> @ast:: Ty ;
110
- fn ty_infer ( ) -> @ast:: Ty ;
111
- fn ty_nil_ast_builder ( ) -> @ast:: Ty ;
112
- 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 ] ;
113
117
}
114
118
115
119
pub impl ext_ctxt_ast_builder for ext_ctxt {
116
- fn ty_option ( ty : @ast:: Ty ) -> @ast:: Ty {
120
+ fn ty_option ( & self , ty : @ast:: Ty ) -> @ast:: Ty {
117
121
self . ty_path_ast_builder ( path_global ( ~[
118
122
self . ident_of ( ~"core") ,
119
123
self . ident_of ( ~"option") ,
120
124
self . ident_of ( ~"Option ")
121
125
] , dummy_sp ( ) ) . add_ty ( ty) )
122
126
}
123
127
124
- fn block_expr ( b : ast:: blk ) -> @ast:: expr {
128
+ fn block_expr ( & self , b : ast:: blk ) -> @ast:: expr {
125
129
@expr {
126
130
id: self . next_id ( ) ,
127
131
callee_id: self . next_id ( ) ,
@@ -130,33 +134,24 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
130
134
}
131
135
}
132
136
133
- fn stmt_expr ( e : @ast:: expr ) -> @ast:: stmt {
137
+ fn stmt_expr ( & self , e : @ast:: expr ) -> @ast:: stmt {
134
138
@spanned { node : ast:: stmt_expr ( e, self . next_id ( ) ) ,
135
139
span : dummy_sp ( ) }
136
140
}
137
141
138
- fn stmt_let ( ident : ident , e : @ast:: expr ) -> @ast:: stmt {
139
- let ext_cx = self ;
142
+ fn stmt_let ( & self , ident : ident , e : @ast:: expr ) -> @ast:: stmt {
143
+ let ext_cx = * self ;
140
144
quote_stmt ! ( let $ident = $e; )
141
145
}
142
146
143
- fn field_imm ( name : ident , e : @ast:: expr ) -> ast:: field {
147
+ fn field_imm ( & self , name : ident , e : @ast:: expr ) -> ast:: field {
144
148
spanned {
145
149
node : ast:: field_ { mutbl : ast:: m_imm, ident : name, expr : e } ,
146
150
span : dummy_sp ( ) ,
147
151
}
148
152
}
149
153
150
- fn rec ( +fields : ~[ ast:: field ] ) -> @ast:: expr {
151
- @expr {
152
- id: self . next_id ( ) ,
153
- callee_id: self . next_id ( ) ,
154
- node: ast:: expr_rec ( fields, None ) ,
155
- span: dummy_sp ( ) ,
156
- }
157
- }
158
-
159
- 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 {
160
155
spanned {
161
156
node : ast:: ty_field_ {
162
157
ident : name,
@@ -166,29 +161,21 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
166
161
}
167
162
}
168
163
169
- fn ty_rec ( +fields : ~[ ast:: ty_field ] ) -> @ast:: Ty {
170
- @ast:: Ty {
171
- id : self . next_id ( ) ,
172
- node : ast:: ty_rec ( fields) ,
173
- span : dummy_sp ( ) ,
174
- }
175
- }
176
-
177
- fn ty_infer ( ) -> @ast:: Ty {
164
+ fn ty_infer ( & self ) -> @ast:: Ty {
178
165
@ast:: Ty {
179
166
id : self . next_id ( ) ,
180
167
node : ast:: ty_infer,
181
168
span : dummy_sp ( ) ,
182
169
}
183
170
}
184
171
185
- fn ty_param ( id : ast:: ident , +bounds : ~[ ast:: ty_param_bound ] )
172
+ fn ty_param ( & self , id : ast:: ident , +bounds : ~[ ast:: ty_param_bound ] )
186
173
-> ast:: ty_param
187
174
{
188
175
ast:: ty_param { ident : id, id : self . next_id ( ) , bounds : @bounds }
189
176
}
190
177
191
- fn arg ( name : ident , ty : @ast:: Ty ) -> ast:: arg {
178
+ fn arg ( & self , name : ident , ty : @ast:: Ty ) -> ast:: arg {
192
179
ast:: arg {
193
180
mode : ast:: infer ( self . next_id ( ) ) ,
194
181
is_mutbl : false ,
@@ -205,7 +192,7 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
205
192
}
206
193
}
207
194
208
- fn block ( +stmts : ~[ @ast:: stmt ] , e : @ast:: expr ) -> ast:: blk {
195
+ fn block ( & self , +stmts : ~[ @ast:: stmt ] , e : @ast:: expr ) -> ast:: blk {
209
196
let blk = ast:: blk_ {
210
197
view_items : ~[ ] ,
211
198
stmts : stmts,
@@ -217,11 +204,11 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
217
204
spanned { node : blk, span : dummy_sp ( ) }
218
205
}
219
206
220
- fn expr_block ( e : @ast:: expr ) -> ast:: blk {
207
+ fn expr_block ( & self , e : @ast:: expr ) -> ast:: blk {
221
208
self . block ( ~[ ] , e)
222
209
}
223
210
224
- fn fn_decl ( +inputs : ~[ ast:: arg ] ,
211
+ fn fn_decl ( & self , +inputs : ~[ ast:: arg ] ,
225
212
output : @ast:: Ty ) -> ast:: fn_decl {
226
213
ast:: fn_decl {
227
214
inputs : inputs,
@@ -230,8 +217,7 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
230
217
}
231
218
}
232
219
233
- fn item ( name : ident ,
234
- span : span ,
220
+ fn item ( & self , name : ident , span : span ,
235
221
+node : ast:: item_ ) -> @ast:: item {
236
222
237
223
// XXX: Would be nice if our generated code didn't violate
@@ -254,7 +240,7 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
254
240
span : span }
255
241
}
256
242
257
- fn item_fn_poly ( name : ident ,
243
+ fn item_fn_poly ( & self , name : ident ,
258
244
+inputs : ~[ ast:: arg ] ,
259
245
output : @ast:: Ty ,
260
246
+ty_params : ~[ ast:: ty_param ] ,
@@ -267,27 +253,45 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
267
253
body) )
268
254
}
269
255
270
- fn item_fn ( name : ident ,
256
+ fn item_fn ( & self , name : ident ,
271
257
+inputs : ~[ ast:: arg ] ,
272
258
output : @ast:: Ty ,
273
259
+body : ast:: blk ) -> @ast:: item {
274
260
self . item_fn_poly ( name, inputs, output, ~[ ] , body)
275
261
}
276
262
277
- fn item_enum_poly ( name : ident ,
278
- span : span ,
263
+ fn item_enum_poly ( & self , name : ident , span : span ,
279
264
+enum_definition : ast:: enum_def ,
280
265
+ty_params : ~[ ast:: ty_param ] ) -> @ast:: item {
281
266
self . item ( name, span, ast:: item_enum ( enum_definition, ty_params) )
282
267
}
283
268
284
- fn item_enum ( name : ident , span : span ,
269
+ fn item_enum ( & self , name : ident , span : span ,
285
270
+enum_definition : ast:: enum_def ) -> @ast:: item {
286
271
self . item_enum_poly ( name, span, enum_definition, ~[ ] )
287
272
}
288
273
289
- fn variant ( name : ident ,
290
- span : span ,
274
+ fn item_struct ( & self , name : ident , span : span ,
275
+ struct_def : ast:: struct_def ) -> @ast:: item {
276
+ self . item_struct_poly ( name, span, struct_def, ~[ ] )
277
+ }
278
+
279
+ fn item_struct_poly ( & self , name : ident , span : span ,
280
+ struct_def : ast:: struct_def ,
281
+ ty_params : ~[ ast:: ty_param ] ) -> @ast:: item {
282
+ self . item ( name, span, ast:: item_struct ( @struct_def, ty_params) )
283
+ }
284
+
285
+ fn struct_expr ( & self , path : @ast:: path , fields : ~[ ast:: field ] ) -> @ast:: expr {
286
+ @ast:: expr {
287
+ id : self . next_id ( ) ,
288
+ callee_id : self . next_id ( ) ,
289
+ node : ast:: expr_struct ( path, fields, None ) ,
290
+ span : dummy_sp ( )
291
+ }
292
+ }
293
+
294
+ fn variant ( & self , name : ident , span : span ,
291
295
+tys : ~[ @ast:: Ty ] ) -> ast:: variant {
292
296
let args = do tys. map |ty| {
293
297
ast:: variant_arg { ty : * ty, id : self . next_id ( ) }
@@ -300,14 +304,15 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
300
304
kind : ast:: tuple_variant_kind ( args) ,
301
305
id : self . next_id ( ) ,
302
306
disr_expr : None ,
303
- vis : ast:: public} ,
307
+ vis : ast:: public
308
+ } ,
304
309
span : span,
305
310
}
306
311
}
307
312
308
- fn item_mod ( name : ident ,
309
- span : span ,
313
+ fn item_mod ( & self , name : ident , span : span ,
310
314
+items : ~[ @ast:: item ] ) -> @ast:: item {
315
+
311
316
// XXX: Total hack: import `core::kinds::Owned` to work around a
312
317
// parser bug whereby `fn f<T: ::kinds::Owned>` doesn't parse.
313
318
let vi = ast:: view_item_import ( ~[
@@ -345,45 +350,43 @@ pub impl ext_ctxt_ast_builder for ext_ctxt {
345
350
)
346
351
}
347
352
348
- fn ty_path_ast_builder ( path : @ast:: path ) -> @ast:: Ty {
353
+ fn ty_path_ast_builder ( & self , path : @ast:: path ) -> @ast:: Ty {
349
354
@ast:: Ty {
350
355
id : self . next_id ( ) ,
351
356
node : ast:: ty_path ( path, self . next_id ( ) ) ,
352
357
span : path. span ,
353
358
}
354
359
}
355
360
356
- fn ty_nil_ast_builder ( ) -> @ast:: Ty {
361
+ fn ty_nil_ast_builder ( & self ) -> @ast:: Ty {
357
362
@ast:: Ty {
358
363
id : self . next_id ( ) ,
359
364
node : ast:: ty_nil,
360
365
span : dummy_sp ( ) ,
361
366
}
362
367
}
363
368
364
- fn strip_bounds ( bounds : & [ ast:: ty_param ] ) -> ~[ ast:: ty_param ] {
369
+ fn strip_bounds ( & self , bounds : & [ ast:: ty_param ] ) -> ~[ ast:: ty_param ] {
365
370
do bounds. map |ty_param| {
366
371
ast:: ty_param { bounds : @~[ ] , ..copy * ty_param }
367
372
}
368
373
}
369
374
370
- fn item_ty_poly ( name : ident ,
371
- span : span ,
372
- ty : @ast:: Ty ,
375
+ fn item_ty_poly ( & self , name : ident , span : span , ty : @ast:: Ty ,
373
376
+params : ~[ ast:: ty_param ] ) -> @ast:: item {
374
377
self . item ( name, span, ast:: item_ty ( ty, params) )
375
378
}
376
379
377
- 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 {
378
381
self . item_ty_poly ( name, span, ty, ~[ ] )
379
382
}
380
383
381
- fn ty_vars ( +ty_params : ~[ ast:: ty_param ] ) -> ~[ @ast:: Ty ] {
384
+ fn ty_vars ( & self , +ty_params : ~[ ast:: ty_param ] ) -> ~[ @ast:: Ty ] {
382
385
ty_params. map ( |p| self . ty_path_ast_builder (
383
386
path ( ~[ p. ident ] , dummy_sp ( ) ) ) )
384
387
}
385
388
386
- fn ty_vars_global ( +ty_params : ~[ ast:: ty_param ] ) -> ~[ @ast:: Ty ] {
389
+ fn ty_vars_global ( & self , +ty_params : ~[ ast:: ty_param ] ) -> ~[ @ast:: Ty ] {
387
390
ty_params. map ( |p| self . ty_path_ast_builder (
388
391
path ( ~[ p. ident ] , dummy_sp ( ) ) ) )
389
392
}
0 commit comments