about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libsyntax/parse/parser.rs12
-rw-r--r--src/rustc/driver/driver.rs23
2 files changed, 26 insertions, 9 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 6727ebe4c77..ba31a610f27 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -21,9 +21,9 @@ import ast::{_mod, add, alt_check, alt_exhaustive, arg, arm, attribute,
              class_member, class_method, class_mutable, constr, constr_arg,
              constr_general, crate, crate_cfg, crate_directive, decl,
              decl_item, decl_local, default_blk, deref, div, expl, expr,
-             expr_, expr_addr_of, expr_alt, expr_assert, expr_assign,
-             expr_assign_op, expr_binary, expr_block, expr_break, expr_call,
-             expr_cast, expr_check, expr_cont, expr_copy, expr_do_body,
+             expr_, expr_addr_of, expr_alt, expr_again, expr_assert,
+             expr_assign, expr_assign_op, expr_binary, expr_block, expr_break,
+             expr_call, expr_cast, expr_check, expr_copy, expr_do_body,
              expr_fail, expr_field, expr_fn, expr_fn_block, expr_if,
              expr_if_check, expr_index, expr_lit, expr_log, expr_loop,
              expr_loop_body, expr_mac, expr_move, expr_new, expr_path,
@@ -32,9 +32,9 @@ import ast::{_mod, add, alt_check, alt_exhaustive, arg, arm, attribute,
              foreign_item_fn, foreign_mod, ident, impure_fn, infer,
              init_assign, init_move, initializer, instance_var, item, item_,
              item_class, item_const, item_enum, item_fn, item_foreign_mod,
-             item_impl, item_mod, item_trait, item_ty, lit, lit_, lit_bool,
-             lit_float, lit_int, lit_int_unsuffixed, lit_nil, lit_str,
-             lit_uint, local, m_const, m_imm, m_mutbl, mac_, mac_aq,
+             item_impl, item_mac, item_mod, item_trait, item_ty, lit, lit_,
+             lit_bool, lit_float, lit_int, lit_int_unsuffixed, lit_nil,
+             lit_str, lit_uint, local, m_const, m_imm, m_mutbl, mac_, mac_aq,
              mac_ellipsis, mac_embed_block, mac_embed_type, mac_invoc,
              mac_invoc_tt, mac_var, matcher, method, mode, mt, mtc_bb,
              mtc_rep, mtc_tok, mul, mutability, neg, noreturn, not, pat,
diff --git a/src/rustc/driver/driver.rs b/src/rustc/driver/driver.rs
index 6c6247fabe3..799f34377ed 100644
--- a/src/rustc/driver/driver.rs
+++ b/src/rustc/driver/driver.rs
@@ -168,9 +168,26 @@ fn compile_upto(sess: session, cfg: ast::crate_cfg,
                              session::sess_os_to_meta_os(sess.targ_cfg.os),
                              sess.opts.static));
 
-    let { def_map: def_map, exp_map: exp_map, impl_map: impl_map } =
-        time(time_passes, "fast resolution", ||
-             middle::resolve3::resolve_crate(sess, ast_map, crate));
+    let mut def_map;
+    let mut impl_map;
+    let mut exp_map;
+    if sess.fast_resolve() {
+        let { def_map: fast_dm, exp_map: fast_em, impl_map: fast_im } =
+            time(time_passes, "fast resolution", ||
+                 middle::resolve3::resolve_crate(sess, ast_map, crate));
+
+        def_map = fast_dm;
+        impl_map = fast_im;
+        exp_map = fast_em;
+    } else {
+        let { def_map: normal_dm, exp_map: normal_em, impl_map: normal_im } =
+            time(time_passes, "resolution", ||
+                 resolve::resolve_crate(sess, ast_map, crate));
+
+        def_map = normal_dm;
+        impl_map = normal_im;
+        exp_map = normal_em;
+    }
 
     let freevars = time(time_passes, "freevar finding", ||
         freevars::annotate_freevars(def_map, crate));