diff --git a/src/librustc/middle/entry.rs b/src/librustc/middle/entry.rs index c2d7878a081b6..4103812d36189 100644 --- a/src/librustc/middle/entry.rs +++ b/src/librustc/middle/entry.rs @@ -11,7 +11,6 @@ use driver::session; use driver::session::Session; -use syntax::abi; use syntax::ast::{Crate, NodeId, item, item_fn}; use syntax::ast_map; use syntax::attr; @@ -46,10 +45,7 @@ impl Visitor<()> for EntryContext { } pub fn find_entry_point(session: Session, crate: &Crate, ast_map: ast_map::map) { - - // FIXME #4404 android JNI hacks - if *session.building_library && - session.targ_cfg.os != abi::OsAndroid { + if *session.building_library { // No need to find a main function return; } @@ -149,10 +145,6 @@ fn configure_main(this: &mut EntryContext) { } } this.session.abort_if_errors(); - } else { - // If we *are* building a library, then we're on android where we still might - // optionally want to translate main $4404 - assert_eq!(this.session.targ_cfg.os, abi::OsAndroid); } } } diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 8a89cd35d0e47..bbac002e28bb6 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -85,7 +85,7 @@ use syntax::parse::token::{special_idents}; use syntax::print::pprust::stmt_to_str; use syntax::{ast, ast_util, codemap, ast_map}; use syntax::attr::AttrMetaMethods; -use syntax::abi::{X86, X86_64, Arm, Mips, Rust, RustIntrinsic, OsWin32, OsAndroid}; +use syntax::abi::{X86, X86_64, Arm, Mips, Rust, RustIntrinsic, OsWin32}; use syntax::visit; use syntax::visit::Visitor; @@ -2268,11 +2268,7 @@ fn finish_register_fn(ccx: @mut CrateContext, sp: Span, sym: ~str, node_id: ast: lib::llvm::SetLinkage(llfn, lib::llvm::InternalLinkage); } - // FIXME #4404 android JNI hacks - let is_entry = is_entry_fn(&ccx.sess, node_id) && (!*ccx.sess.building_library || - (*ccx.sess.building_library && - ccx.sess.targ_cfg.os == OsAndroid)); - if is_entry { + if is_entry_fn(&ccx.sess, node_id) && !*ccx.sess.building_library { create_entry_wrapper(ccx, sp, llfn); } } @@ -2340,13 +2336,7 @@ pub fn create_entry_wrapper(ccx: @mut CrateContext, let llfty = Type::func([ccx.int_type, Type::i8().ptr_to().ptr_to()], &ccx.int_type); - // FIXME #4404 android JNI hacks - let main_name = if *ccx.sess.building_library { - "amain" - } else { - "main" - }; - let llfn = decl_cdecl_fn(ccx.llmod, main_name, llfty); + let llfn = decl_cdecl_fn(ccx.llmod, "main", llfty); let llbb = "top".with_c_str(|buf| { unsafe { llvm::LLVMAppendBasicBlockInContext(ccx.llcx, llfn, buf) @@ -3178,14 +3168,13 @@ pub fn trans_crate(sess: session::Session, }).to_owned_vec(); // Make sure that some other crucial symbols are not eliminated from the - // module. This includes the main function (main/amain elsewhere), the crate - // map (used for debug log settings and I/O), and finally the curious - // rust_stack_exhausted symbol. This symbol is required for use by the - // libmorestack library that we link in, so we must ensure that this symbol - // is not internalized (if defined in the crate). + // module. This includes the main function, the crate map (used for debug + // log settings and I/O), and finally the curious rust_stack_exhausted + // symbol. This symbol is required for use by the libmorestack library that + // we link in, so we must ensure that this symbol is not internalized (if + // defined in the crate). reachable.push(ccx.crate_map_name.to_owned()); reachable.push(~"main"); - reachable.push(~"amain"); reachable.push(~"rust_stack_exhausted"); return CrateTranslation { diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index 8e291ca6705f3..d739fca99da07 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -44,6 +44,7 @@ pub enum ObsoleteSyntax { ObsoleteVecDotDotWildcard, ObsoleteBoxedClosure, ObsoleteClosureType, + ObsoleteMultipleImport, } impl to_bytes::IterBytes for ObsoleteSyntax { @@ -140,6 +141,10 @@ impl ParserObsoleteMethods for Parser { "closures are now written `|A| -> B` rather than `&fn(A) -> \ B`." ), + ObsoleteMultipleImport => ( + "multiple imports", + "only one import is allowed per `use` statement" + ), }; self.report(sp, kind, kind_str, desc); diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 62bfd7c80f9fd..12266a878db28 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -4923,6 +4923,7 @@ impl Parser { let mut vp = ~[self.parse_view_path()]; while *self.token == token::COMMA { self.bump(); + self.obsolete(*self.last_span, ObsoleteMultipleImport); vp.push(self.parse_view_path()); } return vp;