diff options
| author | Lindsey Kuper <[email protected]> | 2011-04-05 14:18:44 -0700 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2011-04-05 14:54:48 -0700 |
| commit | b8bb2e118e9815316320f946ef3fc7e6909ed7c9 (patch) | |
| tree | 6b550692b0b086bde56c621f5ffd428e7dcc1b08 /src/comp/middle/fold.rs | |
| parent | FIx native wrapper generation to handle more arg types. (diff) | |
| download | rust-b8bb2e118e9815316320f946ef3fc7e6909ed7c9.tar.xz rust-b8bb2e118e9815316320f946ef3fc7e6909ed7c9.zip | |
Further on the path toward self-awareness.
Mostly:
* Merciless refactoring of trans.rs so that trans_call can work for
self-calls as well as other kinds of calls
Also:
* Various changes to go with having idents, rather than exprs, in
expr_call_self AST nodes
* Added missing case for SELF token to token.to_str()
Diffstat (limited to 'src/comp/middle/fold.rs')
| -rw-r--r-- | src/comp/middle/fold.rs | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/comp/middle/fold.rs b/src/comp/middle/fold.rs index d7a18783..77c89836 100644 --- a/src/comp/middle/fold.rs +++ b/src/comp/middle/fold.rs @@ -88,7 +88,7 @@ type ast_fold[ENV] = ann a) -> @expr) fold_expr_call, (fn(&ENV e, &span sp, - @expr f, vec[@expr] args, + ident id, vec[@expr] args, ann a) -> @expr) fold_expr_call_self, (fn(&ENV e, &span sp, @@ -566,10 +566,9 @@ fn fold_expr[ENV](&ENV env, ast_fold[ENV] fld, &@expr e) -> @expr { ret fld.fold_expr_call(env_, e.span, ff, aargs, t); } - case (ast.expr_call_self(?f, ?args, ?t)) { - auto ff = fold_expr(env_, fld, f); + case (ast.expr_call_self(?ident, ?args, ?t)) { auto aargs = fold_exprs(env_, fld, args); - ret fld.fold_expr_call_self(env_, e.span, ff, aargs, t); + ret fld.fold_expr_call_self(env_, e.span, ident, aargs, t); } case (ast.expr_bind(?f, ?args_opt, ?t)) { @@ -1185,9 +1184,9 @@ fn identity_fold_expr_call[ENV](&ENV env, &span sp, @expr f, ret @respan(sp, ast.expr_call(f, args, a)); } -fn identity_fold_expr_call_self[ENV](&ENV env, &span sp, @expr f, +fn identity_fold_expr_call_self[ENV](&ENV env, &span sp, ident id, vec[@expr] args, ann a) -> @expr { - ret @respan(sp, ast.expr_call_self(f, args, a)); + ret @respan(sp, ast.expr_call_self(id, args, a)); } fn identity_fold_expr_bind[ENV](&ENV env, &span sp, @expr f, |