about summary refs log tree commit diff
path: root/src/comp
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2011-03-24 17:35:27 -0700
committerGraydon Hoare <graydon@mozilla.com>2011-03-24 17:37:32 -0700
commit4e49ca8abd31d7cbe087acb8a3aeb6fe1b2ee5ee (patch)
tree3fca2d845e595cfa36e6ea9e1a35f4c203a3eaaa /src/comp
parentaf3d0d1848116f0e29dcaf8859d27fd4555f3444 (diff)
downloadrust-4e49ca8abd31d7cbe087acb8a3aeb6fe1b2ee5ee.tar.gz
rust-4e49ca8abd31d7cbe087acb8a3aeb6fe1b2ee5ee.zip
Start hooking resolve into creater.
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/front/creader.rs15
-rw-r--r--src/comp/middle/resolve.rs28
2 files changed, 38 insertions, 5 deletions
diff --git a/src/comp/front/creader.rs b/src/comp/front/creader.rs
index e052e94a838..77744086e18 100644
--- a/src/comp/front/creader.rs
+++ b/src/comp/front/creader.rs
@@ -274,3 +274,18 @@ fn read_crates(session.session sess,
     ret fold.fold_crate[env](e, fld, crate);
 }
 
+fn lookup_def(&span sp,
+              @ast.external_crate_info cinfo,
+              vec[ast.ident] path) -> ast.def {
+  // FIXME: fill in.
+  fail;
+}
+
+// Local Variables:
+// mode: rust
+// fill-column: 78;
+// indent-tabs-mode: nil
+// c-basic-offset: 4
+// buffer-file-coding-system: utf-8-unix
+// compile-command: "make -k -C ../.. 2>&1 | sed -e 's/\\/x\\//x:\\//g'";
+// End:
diff --git a/src/comp/middle/resolve.rs b/src/comp/middle/resolve.rs
index 23e9a4d60b1..fb357c53bbb 100644
--- a/src/comp/middle/resolve.rs
+++ b/src/comp/middle/resolve.rs
@@ -2,6 +2,7 @@ import front.ast;
 import front.ast.ident;
 import front.ast.def;
 import front.ast.ann;
+import front.creader;
 import driver.session;
 import util.common.new_def_hash;
 import util.common.span;
@@ -107,9 +108,9 @@ fn find_final_def(&env e, import_map index,
                   &span sp, vec[ident] idents,
                   option.t[ast.def_id] import_id) -> def_wrap {
 
-    // We are given a series of identifiers (a.b.c.d) and we know that
-    // in the environment 'e' the identifier 'a' was resolved to 'd'. We
-    // should return what a.b.c.d points to in the end.
+    // We are given a series of identifiers (p.q.r) and we know that
+    // in the environment 'e' the identifier 'p' was resolved to 'd'. We
+    // should return what p.q.r points to in the end.
     fn found_something(&env e, import_map index,
                        &span sp, vec[ident] idents, def_wrap d) -> def_wrap {
 
@@ -135,6 +136,15 @@ fn find_final_def(&env e, import_map index,
             }
         }
 
+        fn found_crate(&env e, &import_map index, &span sp,
+                       vec[ident] idents,
+                       @ast.external_crate_info cinfo) -> def_wrap {
+            auto len = _vec.len[ident](idents);
+            auto rest_idents = _vec.slice[ident](idents, 1u, len);
+            auto def = creader.lookup_def(sp, cinfo, rest_idents);
+            ret def_wrap_other(def);
+        }
+
         alt (d) {
             case (def_wrap_import(?imp)) {
                 alt (imp.node) {
@@ -159,8 +169,16 @@ fn find_final_def(&env e, import_map index,
             case (def_wrap_native_mod(?i)) {
                 ret found_mod(e, index, sp, idents, i);
             }
-            case (def_wrap_use(?c)) {
-                e.sess.span_err(sp, "Crate access is not implemented");
+            case (def_wrap_use(?vi)) {
+                alt (vi.node) {
+                    case (ast.view_item_use(_, _, _, ?ann)) {
+                        alt (ann) {
+                            case (ast.ann_crate(?cinfo)) {
+                                ret found_crate(e, index, sp, idents, cinfo);
+                            }
+                        }
+                    }
+                }
             }
             case (def_wrap_other(?d)) {
                 let uint l = _vec.len[ident](idents);