@@ -65,34 +65,24 @@ pub fn source_name(input: &input) -> @str {
6565
6666pub fn default_configuration(sess: Session, argv0: @str, input: &input) ->
6767 ast::crate_cfg {
68- let libc = match sess.targ_cfg.os {
69- session::os_win32 => @" msvcrt. dll",
70- session :: os_macos => @"libc. dylib",
71- session :: os_linux => @"libc. so . 6 ",
72- session :: os_android => @"libc. so",
73- session :: os_freebsd => @"libc. so . 7 "
74- // _ { "libc.so" }
68+ let (libc, tos) = match sess.targ_cfg.os {
69+ session::os_win32 => (@" msvcrt. dll", @"win32") ,
70+ session :: os_macos => ( @"libc. dylib ", @"macos") ,
71+ session:: os_linux => ( @"libc. so . 6 ", @"linux") ,
72+ session:: os_android => ( @"libc. so ", @"android") ,
73+ session:: os_freebsd => ( @"libc. so . 7 ", @"freebsd")
7574 } ;
76- let tos = match sess. targ_cfg . os {
77- session:: os_win32 => @"win32",
78- session:: os_macos => @"macos",
79- session:: os_linux => @"linux",
80- session:: os_android => @"android",
81- session:: os_freebsd => @"freebsd"
82- // _ { "libc.so" }
83- } ;
84-
85- let mk = attr:: mk_name_value_item_str;
8675
8776 // ARM is bi-endian, however using NDK seems to default
8877 // to little-endian unless a flag is provided.
8978 let ( end, arch, wordsz) = match sess. targ_cfg . arch {
90- abi:: X86 => ( @"little", @"x86", @"32 ") ,
91- abi:: X86_64 => ( @"little", @"x86_64", @"64 ") ,
92- abi:: Arm => ( @"little", @"arm", @"32 ") ,
93- abi:: Mips => ( @"big", @"mips", @"32 ")
79+ abi:: X86 => ( @"little", @"x86", @"32 ") ,
80+ abi:: X86_64 => ( @"little", @"x86_64", @"64 ") ,
81+ abi:: Arm => ( @"little", @"arm", @"32 ") ,
82+ abi:: Mips => ( @"big", @"mips", @"32 ")
9483 } ;
9584
85+ let mk = attr:: mk_name_value_item_str;
9686 return ~[ // Target bindings.
9787 attr:: mk_word_item ( os:: FAMILY . to_managed ( ) ) ,
9888 mk ( @"target_os", tos) ,
@@ -463,36 +453,37 @@ pub fn pretty_print_input(sess: Session, cfg: ast::crate_cfg, input: &input,
463453}
464454
465455pub fn get_os(triple: &str) -> Option<session::os> {
466- if triple.contains(" win32") ||
467- triple. contains ( "mingw32" ) {
468- Some ( session:: os_win32)
469- } else if triple. contains ( "darwin" ) {
470- Some ( session:: os_macos)
471- } else if triple. contains ( "android" ) {
472- Some ( session:: os_android)
473- } else if triple. contains ( "linux" ) {
474- Some ( session:: os_linux)
475- } else if triple. contains ( "freebsd" ) {
476- Some ( session:: os_freebsd)
477- } else { None }
456+ for os_names.each |&(name, os)| {
457+ if triple.contains(name) { return Some(os) }
458+ }
459+ None
478460}
461+ static os_names : &'static [(&'static str, session::os)] = &'static [
462+ (" win32", session:: os_win32) ,
463+ ( "darwin" , session:: os_macos) ,
464+ ( "android" , session:: os_android) ,
465+ ( "linux" , session:: os_linux) ,
466+ ( "freebsd" , session:: os_freebsd) ] ;
479467
480468pub fn get_arch( triple: & str) -> Option < abi:: Architecture > {
481- if triple. contains( "i386" ) ||
482- triple. contains( "i486" ) ||
483- triple. contains( "i586" ) ||
484- triple. contains( "i686" ) ||
485- triple. contains( "i786" ) {
486- Some ( abi:: X86 )
487- } else if triple. contains ( "x86_64" ) {
488- Some ( abi:: X86_64 )
489- } else if triple. contains ( "arm" ) ||
490- triple. contains ( "xscale" ) {
491- Some ( abi:: Arm )
492- } else if triple. contains ( "mips" ) {
493- Some ( abi:: Mips )
494- } else { None }
469+ for architecture_abis. each |& ( arch, abi) | {
470+ if triple. contains( arch) { return Some ( abi) }
471+ }
472+ None
495473}
474+ static architecture_abis : & ' static [ ( & ' static str, abi:: Architecture ) ] = & ' static [
475+ ( "i386" , abi:: X86 ) ,
476+ ( "i486" , abi:: X86 ) ,
477+ ( "i586" , abi:: X86 ) ,
478+ ( "i686" , abi:: X86 ) ,
479+ ( "i786" , abi:: X86 ) ,
480+
481+ ( "x86_64" , abi:: X86_64 ) ,
482+
483+ ( "arm" , abi:: Arm ) ,
484+ ( "xscale" , abi:: Arm ) ,
485+
486+ ( "mips" , abi:: Mips ) ] ;
496487
497488pub fn build_target_config( sopts: @session:: options,
498489 demitter: diagnostic:: Emitter )
0 commit comments