|
1 | 1 | import std.map.hashmap;
|
2 |
| - import std.option; |
| 2 | +import std.option; |
3 | 3 | import std.option.some;
|
4 | 4 | import std.option.none;
|
5 | 5 |
|
@@ -87,6 +87,10 @@ type ast_fold[ENV] =
|
87 | 87 | @expr f, vec[@expr] args,
|
88 | 88 | ann a) -> @expr) fold_expr_call,
|
89 | 89 |
|
| 90 | + (fn(&ENV e, &span sp, |
| 91 | + @expr f, vec[@expr] args, |
| 92 | + ann a) -> @expr) fold_expr_call_self, |
| 93 | + |
90 | 94 | (fn(&ENV e, &span sp,
|
91 | 95 | @expr f, vec[option.t[@expr]] args,
|
92 | 96 | ann a) -> @expr) fold_expr_bind,
|
@@ -562,6 +566,12 @@ fn fold_expr[ENV](&ENV env, ast_fold[ENV] fld, &@expr e) -> @expr {
|
562 | 566 | ret fld.fold_expr_call(env_, e.span, ff, aargs, t);
|
563 | 567 | }
|
564 | 568 |
|
| 569 | + case (ast.expr_call_self(?f, ?args, ?t)) { |
| 570 | + auto ff = fold_expr(env_, fld, f); |
| 571 | + auto aargs = fold_exprs(env_, fld, args); |
| 572 | + ret fld.fold_expr_call_self(env_, e.span, ff, aargs, t); |
| 573 | + } |
| 574 | + |
565 | 575 | case (ast.expr_bind(?f, ?args_opt, ?t)) {
|
566 | 576 | auto ff = fold_expr(env_, fld, f);
|
567 | 577 | let vec[option.t[@ast.expr]] aargs_opt = vec();
|
@@ -1175,6 +1185,11 @@ fn identity_fold_expr_call[ENV](&ENV env, &span sp, @expr f,
|
1175 | 1185 | ret @respan(sp, ast.expr_call(f, args, a));
|
1176 | 1186 | }
|
1177 | 1187 |
|
| 1188 | +fn identity_fold_expr_call_self[ENV](&ENV env, &span sp, @expr f, |
| 1189 | + vec[@expr] args, ann a) -> @expr { |
| 1190 | + ret @respan(sp, ast.expr_call_self(f, args, a)); |
| 1191 | +} |
| 1192 | + |
1178 | 1193 | fn identity_fold_expr_bind[ENV](&ENV env, &span sp, @expr f,
|
1179 | 1194 | vec[option.t[@expr]] args_opt, ann a)
|
1180 | 1195 | -> @expr {
|
@@ -1580,6 +1595,8 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] {
|
1580 | 1595 | fold_expr_tup = bind identity_fold_expr_tup[ENV](_,_,_,_),
|
1581 | 1596 | fold_expr_rec = bind identity_fold_expr_rec[ENV](_,_,_,_,_),
|
1582 | 1597 | fold_expr_call = bind identity_fold_expr_call[ENV](_,_,_,_,_),
|
| 1598 | + fold_expr_call_self |
| 1599 | + = bind identity_fold_expr_call_self[ENV](_,_,_,_,_), |
1583 | 1600 | fold_expr_bind = bind identity_fold_expr_bind[ENV](_,_,_,_,_),
|
1584 | 1601 | fold_expr_spawn = bind identity_fold_expr_spawn[ENV](_,_,_,_,_,_,_),
|
1585 | 1602 | fold_expr_binary = bind identity_fold_expr_binary[ENV](_,_,_,_,_,_),
|
|
0 commit comments