about summary refs log tree commit diff
path: root/src/comp/driver
diff options
context:
space:
mode:
authorTim Chevalier <chevalier@alum.wellesley.edu>2011-07-13 17:26:06 -0700
committerTim Chevalier <chevalier@alum.wellesley.edu>2011-07-13 18:30:53 -0700
commitf26ca025dee246500552076cc650137e12c04464 (patch)
tree9a48b4b129b4f4293f352934ab6f4a8329c05387 /src/comp/driver
parent196753e4c3a4848ce92a84c596c385dc00f66578 (diff)
downloadrust-f26ca025dee246500552076cc650137e12c04464.tar.gz
rust-f26ca025dee246500552076cc650137e12c04464.zip
Make resolve and the typechecker check for a main fn of the
correct type

This means if a non-library program leaves out the main program,
the error gets caught earlier than link.

Closes #626.
Diffstat (limited to 'src/comp/driver')
-rw-r--r--src/comp/driver/rustc.rs2
-rw-r--r--src/comp/driver/session.rs7
2 files changed, 8 insertions, 1 deletions
diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs
index a8c9738eb4a..a6409209b75 100644
--- a/src/comp/driver/rustc.rs
+++ b/src/comp/driver/rustc.rs
@@ -361,7 +361,7 @@ fn build_session(@session::options sopts) -> session::session {
     auto cstore = cstore::mk_cstore();
     ret session::session(target_cfg, sopts, cstore,
                          @rec(cm=codemap::new_codemap(), mutable next_id=0),
-                         0u);
+                         none, 0u);
 }
 
 fn parse_pretty(session::session sess, &str name) -> pp_mode {
diff --git a/src/comp/driver/session.rs b/src/comp/driver/session.rs
index 8da3e40baa6..4adcb7cee5f 100644
--- a/src/comp/driver/session.rs
+++ b/src/comp/driver/session.rs
@@ -1,5 +1,6 @@
 
 import syntax::ast;
+import syntax::ast::node_id;
 import syntax::codemap;
 import codemap::span;
 import syntax::ast::ty_mach;
@@ -49,6 +50,8 @@ obj session(@config targ_cfg,
             @options opts,
             metadata::cstore::cstore cstore,
             parse_sess parse_sess,
+            // For a library crate, this is always none
+            mutable option::t[node_id] main_fn,
             mutable uint err_count) {
     fn get_targ_cfg() -> @config { ret targ_cfg; }
     fn get_opts() -> @options { ret opts; }
@@ -110,6 +113,10 @@ obj session(@config targ_cfg,
     fn span_str(span sp) -> str {
         ret codemap::span_to_str(sp, self.get_codemap());
     }
+    fn set_main_id(node_id d) {
+        main_fn = some(d);
+    }
+    fn get_main_id() -> option::t[node_id] { main_fn }
 }
 // Local Variables:
 // fill-column: 78;