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