From e3758fe321725bec4707e1b7d4fff333ba915905 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 8 Oct 2010 12:26:34 -0700 Subject: [PATCH] rustc: Make functions output a type, not a slot --- src/comp/front/ast.rs | 2 +- src/comp/front/parser.rs | 7 +++---- src/comp/middle/fold.rs | 8 ++++---- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/comp/front/ast.rs b/src/comp/front/ast.rs index 422fd039b7f..0b0f571ce2a 100644 --- a/src/comp/front/ast.rs +++ b/src/comp/front/ast.rs @@ -129,7 +129,7 @@ type slot = rec(@ty ty, mode mode, option[slot_id] id); type input = rec(slot slot, ident ident); type _fn = rec(vec[input] inputs, - slot output, + ty output, block body); type _mod = hashmap[ident,@item]; diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs index 4eb303ed229..8e848afb31c 100644 --- a/src/comp/front/parser.rs +++ b/src/comp/front/parser.rs @@ -603,13 +603,12 @@ io fn parse_fn(parser p) -> tup(ast.ident, @ast.item) { some(token.COMMA), pf, p); - let ast.slot output; + let ast.ty output; if (p.peek() == token.RARROW) { p.bump(); - output = rec(ty=parse_ty(p), mode=ast.val, id=none[ast.slot_id]); + output = *parse_ty(p); } else { - output = rec(ty=@spanned(lo, inputs.span, ast.ty_nil), - mode=ast.val, id=none[ast.slot_id]); + output = spanned(lo, inputs.span, ast.ty_nil); } auto body = parse_block(p); diff --git a/src/comp/middle/fold.rs b/src/comp/middle/fold.rs index 6f4b369e9fe..a74ac3b3985 100644 --- a/src/comp/middle/fold.rs +++ b/src/comp/middle/fold.rs @@ -120,7 +120,7 @@ type ast_fold[ENV] = vec[@stmt] stmts) -> block) fold_block, (fn(&ENV e, vec[ast.input] inputs, - &slot output, block body) -> ast._fn) fold_fn, + &ty output, block body) -> ast._fn) fold_fn, (fn(&ENV e, &ast._mod m) -> ast._mod) fold_mod, @@ -310,10 +310,10 @@ fn fold_fn[ENV](&ENV env, ast_fold[ENV] fld, &ast._fn f) -> ast._fn { let operator[ast.input,ast.input] fi = bind fold_input[ENV](env, fld, _); auto inputs = _vec.map[ast.input, ast.input](fi, f.inputs); - auto output = fold_slot[ENV](env, fld, f.output); + auto output = fold_ty[ENV](env, fld, @f.output); auto body = fold_block[ENV](env, fld, f.body); - ret fld.fold_fn(env, inputs, output, body); + ret fld.fold_fn(env, inputs, *output, body); } fn fold_item[ENV](&ENV env, ast_fold[ENV] fld, @item i) -> @item { @@ -539,7 +539,7 @@ fn identity_fold_block[ENV](&ENV e, &span sp, vec[@stmt] stmts) -> block { fn identity_fold_fn[ENV](&ENV e, vec[ast.input] inputs, - &slot output, + &ast.ty output, block body) -> ast._fn { ret rec(inputs=inputs, output=output, body=body); }