Skip to content

Commit a88f5ab

Browse files
lkupergraydon
authored andcommitted
---
yaml --- r: 2531 b: refs/heads/master c: cd31d5d h: refs/heads/master i: 2529: 549a6a5 2527: 5d62f23 v: v3
1 parent af9c521 commit a88f5ab

File tree

3 files changed

+53
-33
lines changed

3 files changed

+53
-33
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 814b17352c5b5267e29f73a6ddf93f97030ac62c
2+
refs/heads/master: cd31d5d532819d64772d0453fd1c2a3135b35f6c

trunk/src/comp/middle/fold.rs

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ type ast_fold[ENV] =
3939
@rec
4040
(
4141
// Path fold:
42-
(fn(&ENV e, &span sp, &ast::path_ p) -> path) fold_path,
42+
(fn(&ENV e, &span sp, &ast::path_ p)
43+
-> path) fold_path,
4344

4445
// Type folds.
4546
(fn(&ENV e, &span sp) -> @ty) fold_ty_nil,
@@ -56,10 +57,10 @@ type ast_fold[ENV] =
5657
(fn(&ENV e, &span sp, &vec[mt] elts) -> @ty) fold_ty_tup,
5758

5859
(fn(&ENV e, &span sp,
59-
&vec[ast::ty_field] elts) -> @ty) fold_ty_rec,
60+
&vec[ast::ty_field] elts) -> @ty) fold_ty_rec,
6061

6162
(fn(&ENV e, &span sp,
62-
&vec[ast::ty_method] meths) -> @ty) fold_ty_obj,
63+
&vec[ast::ty_method] meths) -> @ty) fold_ty_obj,
6364

6465
(fn(&ENV e, &span sp,
6566
ast::proto proto,
@@ -78,7 +79,7 @@ type ast_fold[ENV] =
7879
&ann a) -> @expr) fold_expr_vec,
7980

8081
(fn(&ENV e, &span sp,
81-
&vec[ast::elt] es, &ann a) -> @expr) fold_expr_tup,
82+
&vec[ast::elt] es, &ann a) -> @expr) fold_expr_tup,
8283

8384
(fn(&ENV e, &span sp,
8485
&vec[ast::field] fields,
@@ -110,7 +111,7 @@ type ast_fold[ENV] =
110111
&ann a) -> @expr) fold_expr_unary,
111112

112113
(fn(&ENV e, &span sp,
113-
&@ast::lit, &ann a) -> @expr) fold_expr_lit,
114+
&@ast::lit, &ann a) -> @expr) fold_expr_lit,
114115

115116
(fn(&ENV e, &span sp,
116117
&@ast::expr e, &@ast::ty ty,
@@ -186,10 +187,10 @@ type ast_fold[ENV] =
186187
(fn(&ENV e, &span sp, &ann a) -> @expr) fold_expr_cont,
187188

188189
(fn(&ENV e, &span sp,
189-
&option::t[@expr] rv, &ann a) -> @expr) fold_expr_ret,
190+
&option::t[@expr] rv, &ann a) -> @expr) fold_expr_ret,
190191

191192
(fn(&ENV e, &span sp,
192-
&option::t[@expr] rv, &ann a) -> @expr) fold_expr_put,
193+
&option::t[@expr] rv, &ann a) -> @expr) fold_expr_put,
193194

194195
(fn(&ENV e, &span sp,
195196
&@expr e, &ann a) -> @expr) fold_expr_be,
@@ -210,13 +211,14 @@ type ast_fold[ENV] =
210211
&@expr e, &ann a) -> @expr) fold_expr_chan,
211212

212213
(fn(&ENV e, &span sp,
213-
&ast::anon_obj ob, // TODO: Is the ob arg supposed to be & or not?
214-
vec[ast::ty_param] tps,
215-
ast::obj_def_ids odid, ann a) -> @expr) fold_expr_anon_obj,
214+
&ast::anon_obj ob,
215+
&vec[ast::ty_param] tps,
216+
&ast::obj_def_ids odid,
217+
&ann a) -> @expr) fold_expr_anon_obj,
216218

217219
// Decl folds.
218220
(fn(&ENV e, &span sp,
219-
&@ast::local local) -> @decl) fold_decl_local,
221+
&@ast::local local) -> @decl) fold_decl_local,
220222

221223
(fn(&ENV e, &span sp,
222224
&@item item) -> @decl) fold_decl_item,
@@ -227,7 +229,7 @@ type ast_fold[ENV] =
227229
&ann a) -> @pat) fold_pat_wild,
228230

229231
(fn(&ENV e, &span sp,
230-
&@ast::lit lit, &ann a) -> @pat) fold_pat_lit,
232+
&@ast::lit lit, &ann a) -> @pat) fold_pat_lit,
231233

232234
(fn(&ENV e, &span sp,
233235
&ident i, &def_id did, &ann a) -> @pat) fold_pat_bind,
@@ -263,10 +265,11 @@ type ast_fold[ENV] =
263265
&def_id id, &ann a) -> @native_item) fold_native_item_fn,
264266

265267
(fn(&ENV e, &span sp, &ident ident,
266-
&ast::_mod m, &def_id id) -> @item) fold_item_mod,
268+
&ast::_mod m, &def_id id) -> @item) fold_item_mod,
267269

268270
(fn(&ENV e, &span sp, &ident ident,
269-
&ast::native_mod m, &def_id id) -> @item) fold_item_native_mod,
271+
&ast::native_mod m, &def_id id)
272+
-> @item) fold_item_native_mod,
270273

271274
(fn(&ENV e, &span sp, &ident ident,
272275
&@ty t, &vec[ast::ty_param] ty_params,
@@ -283,13 +286,14 @@ type ast_fold[ENV] =
283286
(fn(&ENV e, &span sp, &ident ident,
284287
&ast::_obj ob,
285288
&vec[ast::ty_param] ty_params,
286-
&ast::obj_def_ids odid, &ann a) -> @item) fold_item_obj,
289+
&ast::obj_def_ids odid, &ann a)
290+
-> @item) fold_item_obj,
287291

288292
// View Item folds.
289293
(fn(&ENV e, &span sp, &ident ident,
290294
&vec[@meta_item] meta_items,
291295
&def_id id,
292-
&option::t[int]) -> @view_item) fold_view_item_use,
296+
&option::t[int]) -> @view_item) fold_view_item_use,
293297

294298
(fn(&ENV e, &span sp, &ident i,
295299
&vec[ident] idents,
@@ -305,31 +309,33 @@ type ast_fold[ENV] =
305309

306310
(fn(&ENV e, &fn_decl decl,
307311
ast::proto proto,
308-
&block body) -> ast::_fn) fold_fn,
312+
&block body) -> ast::_fn) fold_fn,
309313

310314
(fn(&ENV e,
311315
&vec[arg] inputs,
312316
&@ty output,
313-
&purity p) -> ast::fn_decl) fold_fn_decl,
317+
&purity p) -> ast::fn_decl) fold_fn_decl,
314318

315-
(fn(&ENV e, &ast::_mod m) -> ast::_mod) fold_mod,
319+
(fn(&ENV e, &ast::_mod m) -> ast::_mod) fold_mod,
316320

317-
(fn(&ENV e, &ast::native_mod m) -> ast::native_mod) fold_native_mod,
321+
(fn(&ENV e, &ast::native_mod m)
322+
-> ast::native_mod) fold_native_mod,
318323

319324
(fn(&ENV e, &span sp,
320325
&vec[@ast::crate_directive] cdirs,
321-
&ast::_mod m) -> @ast::crate) fold_crate,
326+
&ast::_mod m) -> @ast::crate) fold_crate,
322327

323328
(fn(&ENV e,
324329
&vec[ast::obj_field] fields,
325330
&vec[@ast::method] methods,
326331
&option::t[@ast::method] dtor)
327-
-> ast::_obj) fold_obj,
332+
-> ast::_obj) fold_obj,
328333

329334
(fn(&ENV e,
330-
option::t[vec[ast::obj_field]] fields,
331-
vec[@ast::method] methods,
332-
option::t[ident] with_obj) -> ast::anon_obj) fold_anon_obj,
335+
&option::t[vec[ast::obj_field]] fields,
336+
&vec[@ast::method] methods,
337+
&option::t[ident] with_obj)
338+
-> ast::anon_obj) fold_anon_obj,
333339

334340
// Env updates.
335341
(fn(&ENV e, &@ast::crate c) -> ENV) update_env_for_crate,
@@ -976,7 +982,7 @@ fn fold_obj[ENV](&ENV env, &ast_fold[ENV] fld, &ast::_obj ob) -> ast::_obj {
976982
ret fld.fold_obj(env, fields, meths, dtor);
977983
}
978984

979-
fn fold_anon_obj[ENV](&ENV env, ast_fold[ENV] fld, &ast::anon_obj ob)
985+
fn fold_anon_obj[ENV](&ENV env, &ast_fold[ENV] fld, &ast::anon_obj ob)
980986
-> ast::anon_obj {
981987

982988
// Fields
@@ -1468,8 +1474,10 @@ fn identity_fold_expr_chan[ENV](&ENV e, &span sp, &@expr x,
14681474
}
14691475

14701476
fn identity_fold_expr_anon_obj[ENV](&ENV e, &span sp,
1471-
&ast::anon_obj ob, vec[ast::ty_param] tps,
1472-
ast::obj_def_ids odid, ann a) -> @expr {
1477+
&ast::anon_obj ob,
1478+
&vec[ast::ty_param] tps,
1479+
&ast::obj_def_ids odid,
1480+
&ann a) -> @expr {
14731481
ret @respan(sp, ast::expr_anon_obj(ob, tps, odid, a));
14741482
}
14751483

@@ -1648,9 +1656,9 @@ fn identity_fold_obj[ENV](&ENV e,
16481656
}
16491657

16501658
fn identity_fold_anon_obj[ENV](&ENV e,
1651-
option::t[vec[ast::obj_field]] fields,
1652-
vec[@ast::method] methods,
1653-
option::t[ident] with_obj) -> ast::anon_obj {
1659+
&option::t[vec[ast::obj_field]] fields,
1660+
&vec[@ast::method] methods,
1661+
&option::t[ident] with_obj) -> ast::anon_obj {
16541662
ret rec(fields=fields, methods=methods, with_obj=with_obj);
16551663
}
16561664

trunk/src/comp/middle/typeck.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -762,7 +762,18 @@ mod Collect {
762762
}
763763
}
764764
}
765+
766+
// Anonymous objects are expressions, not items, but they're enough like
767+
// items that we're going to include them in this fold.
768+
fn fold_expr_anon_obj(&@env e, &span sp,
769+
&ast::anon_obj ob, &vec[ast::ty_param] tps,
770+
&ast::obj_def_ids odid, &ast::ann a) -> @ast::expr {
765771

772+
// TODO: Somewhere in here we need to push some stuff onto a vector.
773+
774+
auto expr_anon_obj = ast::expr_anon_obj(ob, tps, odid, a);
775+
ret @fold::respan[ast::expr_](sp, expr_anon_obj);
776+
}
766777

767778
fn fold_item_obj(&@env e, &span sp, &ast::ident i,
768779
&ast::_obj ob, &vec[ast::ty_param] ty_params,
@@ -895,7 +906,8 @@ mod Collect {
895906
bind fold_native_item_fn(_,_,_,_,_,_,_,_),
896907
fold_item_obj = bind fold_item_obj(_,_,_,_,_,_,_),
897908
fold_item_ty = bind fold_item_ty(_,_,_,_,_,_,_),
898-
fold_item_tag = bind fold_item_tag(_,_,_,_,_,_,_)
909+
fold_item_tag = bind fold_item_tag(_,_,_,_,_,_,_),
910+
fold_expr_anon_obj = bind fold_expr_anon_obj(_,_,_,_,_,_)
899911
with *fld_2);
900912
auto crate_ = fold::fold_crate[@env](e, fld_2, crate);
901913
ret tup(crate_, type_cache, id_to_ty_item, ntt);

0 commit comments

Comments
 (0)