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