about summary refs log tree commit diff
path: root/src/comp/middle
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2011-12-02 14:00:45 +0100
committerMarijn Haverbeke <marijnh@gmail.com>2011-12-02 14:00:45 +0100
commit8a1cc738fa9bc4af134da01386414d057cc2e719 (patch)
treeff3ff99add121e307acdee12ab98eb39340d668e /src/comp/middle
parent7655b3c0c673a6857ccf94835f6cedbe778a8667 (diff)
downloadrust-8a1cc738fa9bc4af134da01386414d057cc2e719.tar.gz
rust-8a1cc738fa9bc4af134da01386414d057cc2e719.zip
Finally make the -1 crate id in resolve.rs a const
Diffstat (limited to 'src/comp/middle')
-rw-r--r--src/comp/middle/resolve.rs17
1 files changed, 7 insertions, 10 deletions
diff --git a/src/comp/middle/resolve.rs b/src/comp/middle/resolve.rs
index 1807085ffc4..086fdec803a 100644
--- a/src/comp/middle/resolve.rs
+++ b/src/comp/middle/resolve.rs
@@ -27,10 +27,8 @@ export ext_map;
 // locates all names (in expressions, types, and alt patterns) and resolves
 // them, storing the resulting def in the AST nodes.
 
-// This module internally uses -1 as a def_id for the top_level module in a
-// crate. The parser doesn't assign a def_id to this module.
-// (FIXME See https://github.com/graydon/rust/issues/358 for the reason this
-//  isn't a const.)
+const crate_mod: int = -1;
+
 tag scope {
     scope_crate;
     scope_item(@ast::item);
@@ -158,7 +156,7 @@ fn map_crate(e: @env, c: @ast::crate) {
     visit::visit_crate(*c, cons(scope_crate, @nil), visit::mk_vt(v_map_mod));
 
     // Register the top-level mod
-    e.mod_map.insert(-1,
+    e.mod_map.insert(crate_mod,
                      @{m: some(c.node.module),
                        index: index_mod(c.node.module),
                        mutable glob_imports: [],
@@ -228,7 +226,7 @@ fn map_crate(e: @env, c: @ast::crate) {
                     e.block_map.insert(b.node.id, globs);
                   }
                   scope_crate. {
-                    e.mod_map.get(-1).glob_imports += [glob];
+                    e.mod_map.get(crate_mod).glob_imports += [glob];
                   }
                 }
             }
@@ -636,7 +634,7 @@ fn lookup_in_scope(e: env, sc: scopes, sp: span, name: ident, ns: namespace)
        option::t<def> {
         alt s {
           scope_crate. {
-            ret lookup_in_local_mod(e, -1, sp, name, ns, inside);
+            ret lookup_in_local_mod(e, crate_mod, sp, name, ns, inside);
           }
           scope_item(it) {
             alt it.node {
@@ -932,11 +930,10 @@ fn lookup_in_mod(e: env, m: def, sp: span, name: ident, ns: namespace,
     let defid = ast_util::def_id_of_def(m);
     if defid.crate != ast::local_crate {
         // examining a module in an external crate
-
         let cached = e.ext_cache.find({did: defid, ident: name, ns: ns});
         if !is_none(cached) { ret cached; }
         let path = [name];
-        if defid.node != -1 { path = e.ext_map.get(defid) + path; }
+        if defid.node != crate_mod { path = e.ext_map.get(defid) + path; }
         let fnd = lookup_external(e, defid.crate, path, ns);
         if !is_none(fnd) {
             e.ext_cache.insert({did: defid, ident: name, ns: ns},
@@ -958,7 +955,7 @@ fn found_view_item(e: env, vi: @ast::view_item) -> option::t<def> {
     alt vi.node {
       ast::view_item_use(_, _, id) {
         let cnum = cstore::get_use_stmt_cnum(e.cstore, id);
-        ret some(ast::def_mod({crate: cnum, node: -1}));
+        ret some(ast::def_mod({crate: cnum, node: crate_mod}));
       }
     }
 }