diff options
| author | Graydon Hoare <graydon@mozilla.com> | 2011-02-21 17:42:23 -0800 |
|---|---|---|
| committer | Graydon Hoare <graydon@mozilla.com> | 2011-02-21 17:42:23 -0800 |
| commit | 60f97aa9cc73ee4e0b57abc07dc543c8fa823ee2 (patch) | |
| tree | a177daef976b93c4e0c0c54a08c5f1310ccada71 /src | |
| parent | cbe8d222a82c14485cf416c4b85fd5e58363c0e0 (diff) | |
| download | rust-60f97aa9cc73ee4e0b57abc07dc543c8fa823ee2.tar.gz rust-60f97aa9cc73ee4e0b57abc07dc543c8fa823ee2.zip | |
Find main functions buried within modules. Un-XFAIL import.rs.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile | 1 | ||||
| -rw-r--r-- | src/comp/middle/trans.rs | 27 |
2 files changed, 26 insertions, 2 deletions
diff --git a/src/Makefile b/src/Makefile index 71c9807bc79..872ced9896d 100644 --- a/src/Makefile +++ b/src/Makefile @@ -492,6 +492,7 @@ TEST_XFAILS_RUSTC := $(filter-out \ int.rs \ i32-sub.rs \ i8-incr.rs \ + import.rs \ import2.rs \ import3.rs \ import4.rs \ diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index efa3a41dc6a..35fefc104be 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -4602,6 +4602,30 @@ fn create_crate_constant(@crate_ctxt cx) { llvm.LLVMSetInitializer(cx.crate_ptr, crate_val); } +fn find_main_fn(@crate_ctxt cx) -> ValueRef { + auto e = sep() + "main"; + let ValueRef v = C_nil(); + let uint n = 0u; + for each (tup(str,ValueRef) i in cx.item_names.items()) { + if (_str.ends_with(i._0, e)) { + n += 1u; + v = i._1; + } + } + alt (n) { + case (0u) { + cx.sess.err("main fn not found"); + } + case (1u) { + ret v; + } + case (_) { + cx.sess.err("multiple main fns found"); + } + } + fail; +} + fn trans_main_fn(@crate_ctxt cx, ValueRef llcrate) { auto T_main_args = vec(T_int(), T_int()); auto T_rust_start_args = vec(T_int(), T_int(), T_int(), T_int()); @@ -4621,8 +4645,7 @@ fn trans_main_fn(@crate_ctxt cx, ValueRef llcrate) { auto llargc = llvm.LLVMGetParam(llmain, 0u); auto llargv = llvm.LLVMGetParam(llmain, 1u); - check (cx.item_names.contains_key("_rust" + sep() + "main")); - auto llrust_main = cx.item_names.get("_rust" + sep() + "main"); + auto llrust_main = find_main_fn(cx); // // Emit the moral equivalent of: |
