Skip to content

Commit 7fa4a08

Browse files
committed
---
yaml --- r: 1127 b: refs/heads/master c: 5cbf888 h: refs/heads/master i: 1125: 966b499 1123: 296984c 1119: ab483a6 v: v3
1 parent b64204e commit 7fa4a08

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
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: ed1dddc33f2dfb6f9247ae877e64fead5642f360
2+
refs/heads/master: 5cbf8889d0e8bc0e4b52c19c89e4578c0fc65eac

trunk/src/comp/front/ast.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ tag expr_ {
139139
expr_tup(vec[elt], ann);
140140
expr_rec(vec[field], ann);
141141
expr_call(@expr, vec[@expr], ann);
142+
expr_bind(@expr, vec[option.t[@expr]], ann);
142143
expr_binary(binop, @expr, @expr, ann);
143144
expr_unary(unop, @expr, ann);
144145
expr_lit(@lit, ann);

trunk/src/comp/middle/fold.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ type ast_fold[ENV] =
7474
@expr f, vec[@expr] args,
7575
ann a) -> @expr) fold_expr_call,
7676

77+
(fn(&ENV e, &span sp,
78+
@expr f, vec[option.t[@expr]] args,
79+
ann a) -> @expr) fold_expr_bind,
80+
7781
(fn(&ENV e, &span sp,
7882
ast.binop,
7983
@expr lhs, @expr rhs,
@@ -417,6 +421,20 @@ fn fold_expr[ENV](&ENV env, ast_fold[ENV] fld, &@expr e) -> @expr {
417421
ret fld.fold_expr_call(env_, e.span, ff, aargs, t);
418422
}
419423

424+
case (ast.expr_bind(?f, ?args_opt, ?t)) {
425+
auto ff = fold_expr(env_, fld, f);
426+
let vec[option.t[@ast.expr]] aargs_opt = vec();
427+
for (option.t[@ast.expr] t_opt in args_opt) {
428+
alt (t_opt) {
429+
case (some[@ast.expr](?e)) {
430+
aargs_opt += vec(some(fold_expr(env_, fld, e)));
431+
}
432+
case (none[@ast.expr]) { /* empty */ }
433+
}
434+
}
435+
ret fld.fold_expr_bind(env_, e.span, ff, aargs_opt, t);
436+
}
437+
420438
case (ast.expr_binary(?op, ?a, ?b, ?t)) {
421439
auto aa = fold_expr(env_, fld, a);
422440
auto bb = fold_expr(env_, fld, b);
@@ -807,6 +825,12 @@ fn identity_fold_expr_call[ENV](&ENV env, &span sp, @expr f,
807825
ret @respan(sp, ast.expr_call(f, args, a));
808826
}
809827

828+
fn identity_fold_expr_bind[ENV](&ENV env, &span sp, @expr f,
829+
vec[option.t[@expr]] args_opt, ann a)
830+
-> @expr {
831+
ret @respan(sp, ast.expr_bind(f, args_opt, a));
832+
}
833+
810834
fn identity_fold_expr_binary[ENV](&ENV env, &span sp, ast.binop b,
811835
@expr lhs, @expr rhs,
812836
ann a) -> @expr {
@@ -1075,6 +1099,7 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] {
10751099
fold_expr_tup = bind identity_fold_expr_tup[ENV](_,_,_,_),
10761100
fold_expr_rec = bind identity_fold_expr_rec[ENV](_,_,_,_),
10771101
fold_expr_call = bind identity_fold_expr_call[ENV](_,_,_,_,_),
1102+
fold_expr_bind = bind identity_fold_expr_bind[ENV](_,_,_,_,_),
10781103
fold_expr_binary = bind identity_fold_expr_binary[ENV](_,_,_,_,_,_),
10791104
fold_expr_unary = bind identity_fold_expr_unary[ENV](_,_,_,_,_),
10801105
fold_expr_lit = bind identity_fold_expr_lit[ENV](_,_,_,_),

0 commit comments

Comments
 (0)