diff --git a/src/comp/metadata/tydecode.rs b/src/comp/metadata/tydecode.rs
index 6b9d3e96bf5..2e6a83c153d 100644
--- a/src/comp/metadata/tydecode.rs
+++ b/src/comp/metadata/tydecode.rs
@@ -281,7 +281,7 @@ fn parse_ty(st: @pstate, sd: str_def) -> ty::t {
             let proto;
             alt next(st) as char {
               'W' { proto = ast::proto_iter; }
-              'F' { proto = ast::proto_fn; }
+              'f' { proto = ast::proto_bare; }
             }
             let name = "";
             while peek(st) as char != '[' {
diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs
index 01770aa8a60..e661d24873b 100644
--- a/src/comp/syntax/parse/parser.rs
+++ b/src/comp/syntax/parse/parser.rs
@@ -294,16 +294,6 @@ fn parse_ty_fn(proto: ast::proto, p: parser) -> ast::ty_ {
     ret ast::ty_fn(proto, inputs.node, ret_ty, ret_style, constrs);
 }
 
-fn parse_method_proto(p: parser) -> ast::proto {
-    if eat_word(p, "iter") {
-        ret ast::proto_iter;
-    } else if eat_word(p, "fn") {
-        ret ast::proto_fn;
-    } else if eat_word(p, "block") {
-        ret ast::proto_block;
-    } else { unexpected(p, p.peek()); }
-}
-
 fn parse_ty_obj(p: parser, &hi: uint) -> ast::ty_ {
     fn parse_method_sig(p: parser) -> ast::ty_method {
         let flo = p.get_lo_pos();
@@ -2179,6 +2169,14 @@ fn parse_fn_anon_proto(p: parser) -> ast::proto {
     }
 }
 
+fn parse_method_proto(p: parser) -> ast::proto {
+    if eat_word(p, "iter") {
+        ret ast::proto_iter;
+    } else if eat_word(p, "fn") {
+        ret ast::proto_bare;
+    } else { unexpected(p, p.peek()); }
+}
+
 fn parse_item(p: parser, attrs: [ast::attribute]) -> option::t<@ast::item> {
     if eat_word(p, "const") {
         ret some(parse_item_const(p, attrs));