From 7b2026bf218c416c653faf8bb8cca770d0bb2c0d Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 31 Jul 2012 16:38:41 -0700 Subject: Introduce 'return', 'match' and 'module' as synonyms --- src/libsyntax/ext/expand.rs | 8 ++++---- src/libsyntax/parse/parser.rs | 28 +++++++++++++++++++++------- src/libsyntax/parse/token.rs | 4 ++-- 3 files changed, 27 insertions(+), 13 deletions(-) (limited to 'src/libsyntax') diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 3805f1a19c6..62e5841a749 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -129,17 +129,17 @@ fn expand_expr(exts: hashmap<~str, syntax_extension>, cx: ext_ctxt, // NB: there is some redundancy between this and expand_item, below, and // they might benefit from some amount of semantic and language-UI merger. fn expand_mod_items(exts: hashmap<~str, syntax_extension>, cx: ext_ctxt, - module: ast::_mod, fld: ast_fold, + module_: ast::_mod, fld: ast_fold, orig: fn@(ast::_mod, ast_fold) -> ast::_mod) -> ast::_mod { // Fold the contents first: - let module = orig(module, fld); + let module_ = orig(module_, fld); // For each item, look through the attributes. If any of them are // decorated with "item decorators", then use that function to transform // the item into a new set of items. - let new_items = do vec::flat_map(module.items) |item| { + let new_items = do vec::flat_map(module_.items) |item| { do vec::foldr(item.attrs, ~[item]) |attr, items| { let mname = alt attr.node.value.node { ast::meta_word(n) { n } @@ -159,7 +159,7 @@ fn expand_mod_items(exts: hashmap<~str, syntax_extension>, cx: ext_ctxt, } }; - ret {items: new_items with module}; + ret {items: new_items with module_}; } diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 46a9f062645..28ad7173be8 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -789,7 +789,7 @@ class parser { ret pexpr(self.parse_while_expr()); } else if self.eat_keyword(~"loop") { ret pexpr(self.parse_loop_expr()); - } else if self.eat_keyword(~"alt") { + } else if self.eat_keyword(~"alt") || self.eat_keyword(~"match") { ret pexpr(self.parse_alt_expr()); } else if self.eat_keyword(~"fn") { let proto = self.parse_fn_ty_proto(); @@ -838,7 +838,7 @@ class parser { let e = self.parse_expr(); ex = expr_assert(e); hi = e.span.hi; - } else if self.eat_keyword(~"ret") { + } else if self.eat_keyword(~"ret") || self.eat_keyword(~"return") { if can_begin_expr(self.token) { let e = self.parse_expr(); hi = e.span.hi; @@ -2569,7 +2569,11 @@ class parser { } fn parse_item_foreign_mod() -> item_info { - self.expect_keyword(~"mod"); + if self.is_keyword(~"mod") { + self.expect_keyword(~"mod"); + } else { + self.expect_keyword(~"module"); + } let id = self.parse_ident(); self.expect(token::LBRACE); let more_attrs = self.parse_inner_attrs_and_next(); @@ -2714,7 +2718,7 @@ class parser { } else { self.parse_item_foreign_mod() } - } else if self.eat_keyword(~"mod") { + } else if self.eat_keyword(~"mod") || self.eat_keyword(~"module") { self.parse_item_mod() } else if self.eat_keyword(~"type") { self.parse_item_type() @@ -2919,8 +2923,14 @@ class parser { let expect_mod = vec::len(outer_attrs) > 0u; let lo = self.span.lo; - if expect_mod || self.is_keyword(~"mod") { - self.expect_keyword(~"mod"); + if expect_mod || self.is_keyword(~"mod") || + self.is_keyword(~"module") { + + if self.is_keyword(~"mod") { + self.expect_keyword(~"mod"); + } else { + self.expect_keyword(~"module"); + } let id = self.parse_ident(); alt self.token { // mod x = "foo.rs"; @@ -2958,7 +2968,11 @@ class parser { // accept seeing the terminator next, so if we do see it then fail the // same way parse_crate_directive would if vec::len(first_outer_attr) > 0u && self.token == term { - self.expect_keyword(~"mod"); + if self.is_keyword(~"mod") { + self.expect_keyword(~"mod"); + } else { + self.expect_keyword(~"module"); + } } let mut cdirs: ~[@crate_directive] = ~[]; diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index 50eaa4d0632..e4386ab140f 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -327,11 +327,11 @@ fn restricted_keyword_table() -> hashmap<~str, ()> { ~"fail", ~"false", ~"fn", ~"for", ~"if", ~"iface", ~"impl", ~"import", ~"let", ~"log", ~"loop", - ~"mod", ~"mut", + ~"match", ~"mod", ~"module", ~"mut", ~"new", ~"owned", ~"pure", - ~"ret", + ~"ret", ~"return", ~"struct", ~"true", ~"trait", ~"type", ~"unchecked", ~"unsafe", -- cgit 1.4.1-3-g733a5