Skip to content

Commit 23077a9

Browse files
committed
---
yaml --- r: 140441 b: refs/heads/try2 c: 832f7b7 h: refs/heads/master i: 140439: 4338fbe v: v3
1 parent 0d23a78 commit 23077a9

File tree

20 files changed

+194
-528
lines changed

20 files changed

+194
-528
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: 7d9c638226a41bfb04991707e3e1fb06c48f9fd7
8+
refs/heads/try2: 832f7b758f28d36030df27c888ef9248ba584859
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/src/libcore/os.rs

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -772,28 +772,6 @@ pub fn list_dir_path(p: &Path) -> ~[~Path] {
772772
list_dir(p).map(|f| ~p.push(*f))
773773
}
774774
775-
/// Removes a directory at the specified path, after removing
776-
/// all its contents. Use carefully!
777-
pub fn remove_dir_recursive(p: &Path) -> bool {
778-
let mut error_happened = false;
779-
for walk_dir(p) |inner| {
780-
if !error_happened {
781-
if path_is_dir(inner) {
782-
if !remove_dir_recursive(inner) {
783-
error_happened = true;
784-
}
785-
}
786-
else {
787-
if !remove_file(inner) {
788-
error_happened = true;
789-
}
790-
}
791-
}
792-
};
793-
// Directory should now be empty
794-
!error_happened && remove_dir(p)
795-
}
796-
797775
/// Removes a directory at the specified path
798776
pub fn remove_dir(p: &Path) -> bool {
799777
return rmdir(p);
@@ -899,10 +877,6 @@ pub fn copy_file(from: &Path, to: &Path) -> bool {
899877
if istream as uint == 0u {
900878
return false;
901879
}
902-
// Preserve permissions
903-
let from_mode = from.get_mode().expect("copy_file: couldn't get permissions \
904-
for source file");
905-
906880
let ostream = do as_c_charp(to.to_str()) |top| {
907881
do as_c_charp("w+b") |modebuf| {
908882
libc::fopen(top, modebuf)
@@ -934,15 +908,6 @@ pub fn copy_file(from: &Path, to: &Path) -> bool {
934908
}
935909
fclose(istream);
936910
fclose(ostream);
937-
938-
// Give the new file the old file's permissions
939-
unsafe {
940-
if do str::as_c_str(to.to_str()) |to_buf| {
941-
libc::chmod(to_buf, from_mode as mode_t)
942-
} != 0 {
943-
return false; // should be a condition...
944-
}
945-
}
946911
return ok;
947912
}
948913
}
@@ -1629,15 +1594,13 @@ mod tests {
16291594
== buf.len() as size_t))
16301595
}
16311596
assert!((libc::fclose(ostream) == (0u as c_int)));
1632-
let in_mode = in.get_mode();
16331597
let rs = os::copy_file(&in, &out);
16341598
if (!os::path_exists(&in)) {
16351599
fail!(fmt!("%s doesn't exist", in.to_str()));
16361600
}
16371601
assert!((rs));
16381602
let rslt = run::run_program(~"diff", ~[in.to_str(), out.to_str()]);
16391603
assert!((rslt == 0));
1640-
assert!(out.get_mode() == in_mode);
16411604
assert!((remove_file(&in)));
16421605
assert!((remove_file(&out)));
16431606
}

branches/try2/src/libcore/prelude.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ pub use io::{print, println};
3131
/* Reexported types and traits */
3232

3333
pub use clone::Clone;
34-
pub use cmp::{Eq, Ord, TotalEq, TotalOrd, Ordering, Less, Equal, Greater, Equiv};
34+
pub use cmp::{Eq, Ord, TotalEq, TotalOrd, Ordering, Less, Equal, Greater};
3535
pub use container::{Container, Mutable, Map, Set};
3636
pub use hash::Hash;
3737
pub use old_iter::{BaseIter, ReverseIter, MutableIter, ExtendedIter, EqIter};

branches/try2/src/libcore/to_bytes.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,8 @@ impl<A> IterBytes for *const A {
419419
}
420420
}
421421

422-
pub trait ToBytes {
422+
423+
trait ToBytes {
423424
fn to_bytes(&self, lsb0: bool) -> ~[u8];
424425
}
425426

branches/try2/src/librustc/back/link.rs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -752,18 +752,26 @@ pub fn link_binary(sess: Session,
752752
// instead of hard-coded gcc.
753753
// For win32, there is no cc command,
754754
// so we add a condition to make it use gcc.
755-
let cc_prog: ~str = if sess.targ_cfg.os == session::os_android {
756-
match &sess.opts.android_cross_path {
757-
&Some(copy path) => {
758-
fmt!("%s/bin/arm-linux-androideabi-gcc", path)
759-
}
760-
&None => {
761-
sess.fatal(~"need Android NDK path for linking \
762-
(--android-cross-path)")
755+
let cc_prog: ~str = match sess.opts.linker {
756+
Some(copy linker) => linker,
757+
None => {
758+
if sess.targ_cfg.os == session::os_android {
759+
match &sess.opts.android_cross_path {
760+
&Some(copy path) => {
761+
fmt!("%s/bin/arm-linux-androideabi-gcc", path)
762+
}
763+
&None => {
764+
sess.fatal(~"need Android NDK path for linking \
765+
(--android-cross-path)")
766+
}
767+
}
768+
} else if sess.targ_cfg.os == session::os_win32 {
769+
~"gcc"
770+
} else {
771+
~"cc"
763772
}
764773
}
765-
} else if sess.targ_cfg.os == session::os_win32 { ~"gcc" }
766-
else { ~"cc" };
774+
};
767775
// The invocations of cc share some flags across platforms
768776
769777

branches/try2/src/librustc/back/rpath.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pub fn get_rpath_flags(sess: session::Session, out_filename: &Path)
4040
// where rustrt is and we know every rust program needs it
4141
let libs = vec::append_one(libs, get_sysroot_absolute_rt_lib(sess));
4242

43-
let rpaths = get_rpaths(os, sysroot, output, libs,
43+
let rpaths = get_rpaths(os, &sysroot, output, libs,
4444
sess.opts.target_triple);
4545
rpaths_to_flags(rpaths)
4646
}

branches/try2/src/librustc/driver/driver.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@ pub fn build_session_options(binary: @~str,
603603
link::output_type_bitcode
604604
} else { link::output_type_exe };
605605
let sysroot_opt = getopts::opt_maybe_str(matches, ~"sysroot");
606-
let sysroot_opt = sysroot_opt.map(|m| @Path(*m));
606+
let sysroot_opt = sysroot_opt.map(|m| Path(*m));
607607
let target_opt = getopts::opt_maybe_str(matches, ~"target");
608608
let target_feature_opt = getopts::opt_maybe_str(matches, ~"target-feature");
609609
let save_temps = getopts::opt_present(matches, ~"save-temps");
@@ -650,7 +650,7 @@ pub fn build_session_options(binary: @~str,
650650
};
651651
652652
let addl_lib_search_paths = getopts::opt_strs(matches, ~"L").map(|s| Path(*s));
653-
653+
let linker = getopts::opt_maybe_str(matches, ~"linker");
654654
let linker_args = getopts::opt_strs(matches, ~"link-args").flat_map( |a| {
655655
let mut args = ~[];
656656
for str::each_split_char(*a, ' ') |arg| {
@@ -676,6 +676,7 @@ pub fn build_session_options(binary: @~str,
676676
jit: jit,
677677
output_type: output_type,
678678
addl_lib_search_paths: addl_lib_search_paths,
679+
linker: linker,
679680
linker_args: linker_args,
680681
maybe_sysroot: sysroot_opt,
681682
target_triple: target,
@@ -760,6 +761,7 @@ pub fn optgroups() -> ~[getopts::groups::OptGroup] {
760761
optmulti("L", "", "Add a directory to the library search path",
761762
"PATH"),
762763
optflag("", "lib", "Compile a library crate"),
764+
optopt("", "linker", "Program to use for linking instead of the default.", "LINKER"),
763765
optmulti("", "link-args", "FLAGS is a space-separated list of flags
764766
passed to the linker", "FLAGS"),
765767
optflag("", "ls", "List the symbols defined by a library crate"),

branches/try2/src/librustc/driver/session.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,9 @@ pub struct options {
124124
jit: bool,
125125
output_type: back::link::output_type,
126126
addl_lib_search_paths: ~[Path],
127+
linker: Option<~str>,
127128
linker_args: ~[~str],
128-
maybe_sysroot: Option<@Path>,
129+
maybe_sysroot: Option<Path>,
129130
target_triple: ~str,
130131
target_feature: ~str,
131132
// User-specified cfg meta items. The compiler itself will add additional
@@ -302,7 +303,8 @@ pub fn basic_options() -> @options {
302303
jit: false,
303304
output_type: link::output_type_exe,
304305
addl_lib_search_paths: ~[],
305-
linker_args:~[],
306+
linker: None,
307+
linker_args: ~[],
306308
maybe_sysroot: None,
307309
target_triple: host_triple(),
308310
target_feature: ~"",

branches/try2/src/librustc/metadata/filesearch.rs

Lines changed: 24 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,48 +20,41 @@ pub fn pick_file(file: Path, path: &Path) -> Option<Path> {
2020
}
2121

2222
pub trait FileSearch {
23-
fn sysroot(&self) -> @Path;
24-
fn for_each_lib_search_path(&self, f: &fn(&Path) -> bool);
23+
fn sysroot(&self) -> Path;
24+
fn lib_search_paths(&self) -> ~[Path];
2525
fn get_target_lib_path(&self) -> Path;
2626
fn get_target_lib_file_path(&self, file: &Path) -> Path;
2727
}
2828

29-
pub fn mk_filesearch(maybe_sysroot: &Option<@Path>,
29+
pub fn mk_filesearch(maybe_sysroot: &Option<Path>,
3030
target_triple: &str,
3131
addl_lib_search_paths: ~[Path])
3232
-> @FileSearch {
3333
struct FileSearchImpl {
34-
sysroot: @Path,
34+
sysroot: Path,
3535
addl_lib_search_paths: ~[Path],
3636
target_triple: ~str
3737
}
3838
impl FileSearch for FileSearchImpl {
39-
fn sysroot(&self) -> @Path { self.sysroot }
40-
fn for_each_lib_search_path(&self, f: &fn(&Path) -> bool) {
41-
debug!("filesearch: searching additional lib search paths");
42-
// a little weird
43-
self.addl_lib_search_paths.each(f);
44-
45-
debug!("filesearch: searching target lib path");
46-
if !f(&make_target_lib_path(self.sysroot,
47-
self.target_triple)) {
48-
return;
39+
fn sysroot(&self) -> Path { /*bad*/copy self.sysroot }
40+
fn lib_search_paths(&self) -> ~[Path] {
41+
let mut paths = /*bad*/copy self.addl_lib_search_paths;
42+
43+
paths.push(
44+
make_target_lib_path(&self.sysroot,
45+
self.target_triple));
46+
match get_rustpkg_lib_path_nearest() {
47+
result::Ok(ref p) => paths.push((/*bad*/copy *p)),
48+
result::Err(_) => ()
4949
}
50-
debug!("filesearch: searching rustpkg lib path nearest");
51-
if match get_rustpkg_lib_path_nearest() {
52-
result::Ok(ref p) => f(p),
53-
result::Err(_) => true
54-
} {
55-
return;
56-
}
57-
debug!("filesearch: searching rustpkg lib path");
58-
match get_rustpkg_lib_path() {
59-
result::Ok(ref p) => f(p),
60-
result::Err(_) => true
61-
};
50+
match get_rustpkg_lib_path() {
51+
result::Ok(ref p) => paths.push((/*bad*/copy *p)),
52+
result::Err(_) => ()
53+
}
54+
paths
6255
}
6356
fn get_target_lib_path(&self) -> Path {
64-
make_target_lib_path(self.sysroot, self.target_triple)
57+
make_target_lib_path(&self.sysroot, self.target_triple)
6558
}
6659
fn get_target_lib_file_path(&self, file: &Path) -> Path {
6760
self.get_target_lib_path().push_rel(file)
@@ -79,7 +72,7 @@ pub fn mk_filesearch(maybe_sysroot: &Option<@Path>,
7972

8073
pub fn search<T:Copy>(filesearch: @FileSearch, pick: pick<T>) -> Option<T> {
8174
let mut rslt = None;
82-
for filesearch.for_each_lib_search_path() |lib_search_path| {
75+
for filesearch.lib_search_paths().each |lib_search_path| {
8376
debug!("searching %s", lib_search_path.to_str());
8477
for os::list_dir_path(lib_search_path).each |path| {
8578
debug!("testing %s", path.to_str());
@@ -115,10 +108,10 @@ fn get_or_default_sysroot() -> Path {
115108
}
116109
}
117110
118-
fn get_sysroot(maybe_sysroot: &Option<@Path>) -> @Path {
111+
fn get_sysroot(maybe_sysroot: &Option<Path>) -> Path {
119112
match *maybe_sysroot {
120-
option::Some(sr) => sr,
121-
option::None => @get_or_default_sysroot()
113+
option::Some(ref sr) => (/*bad*/copy *sr),
114+
option::None => get_or_default_sysroot()
122115
}
123116
}
124117

branches/try2/src/librustc/middle/typeck/check/_match.rs

Lines changed: 31 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -114,53 +114,37 @@ pub fn check_pat_variant(pcx: &pat_ctxt, pat: @ast::pat, path: @ast::Path,
114114
ty::ty_enum(_, ref expected_substs) => {
115115
// Lookup the enum and variant def ids:
116116
let v_def = lookup_def(pcx.fcx, pat.span, pat.id);
117-
match ast_util::variant_def_ids(v_def) {
118-
Some((enm, var)) => {
119-
// Assign the pattern the type of the *enum*, not the variant.
120-
let enum_tpt = ty::lookup_item_type(tcx, enm);
121-
instantiate_path(pcx.fcx, path, enum_tpt, pat.span, pat.id,
122-
pcx.block_region);
123-
124-
// check that the type of the value being matched is a subtype
125-
// of the type of the pattern:
126-
let pat_ty = fcx.node_ty(pat.id);
127-
demand::subtype(fcx, pat.span, expected, pat_ty);
128-
129-
// Get the expected types of the arguments.
130-
arg_types = {
131-
let vinfo =
132-
ty::enum_variant_with_id(tcx, enm, var);
133-
let var_tpt = ty::lookup_item_type(tcx, var);
134-
vinfo.args.map(|t| {
135-
if var_tpt.generics.type_param_defs.len() ==
136-
expected_substs.tps.len()
137-
{
138-
ty::subst(tcx, expected_substs, *t)
139-
}
140-
else {
141-
*t // In this case, an error was already signaled
142-
// anyway
143-
}
144-
})
145-
};
146-
147-
kind_name = "variant";
148-
}
149-
None => {
150-
let resolved_expected =
151-
fcx.infcx().ty_to_str(fcx.infcx().resolve_type_vars_if_possible(expected));
152-
fcx.infcx().type_error_message_str(pat.span,
153-
|actual| {
154-
fmt!("mismatched types: expected `%s` but found %s",
155-
resolved_expected, actual)},
156-
~"a structure pattern",
157-
None);
158-
fcx.write_error(pat.id);
159-
kind_name = "[error]";
160-
arg_types = (copy subpats).get_or_default(~[]).map(|_|
161-
ty::mk_err());
162-
}
163-
}
117+
let (enm, var) = ast_util::variant_def_ids(v_def);
118+
119+
// Assign the pattern the type of the *enum*, not the variant.
120+
let enum_tpt = ty::lookup_item_type(tcx, enm);
121+
instantiate_path(pcx.fcx, path, enum_tpt, pat.span, pat.id,
122+
pcx.block_region);
123+
124+
// check that the type of the value being matched is a subtype
125+
// of the type of the pattern:
126+
let pat_ty = fcx.node_ty(pat.id);
127+
demand::subtype(fcx, pat.span, expected, pat_ty);
128+
129+
// Get the expected types of the arguments.
130+
arg_types = {
131+
let vinfo =
132+
ty::enum_variant_with_id(tcx, enm, var);
133+
let var_tpt = ty::lookup_item_type(tcx, var);
134+
vinfo.args.map(|t| {
135+
if var_tpt.generics.type_param_defs.len() ==
136+
expected_substs.tps.len()
137+
{
138+
ty::subst(tcx, expected_substs, *t)
139+
}
140+
else {
141+
*t // In this case, an error was already signaled
142+
// anyway
143+
}
144+
})
145+
};
146+
147+
kind_name = "variant";
164148
}
165149
ty::ty_struct(struct_def_id, ref expected_substs) => {
166150
// Lookup the struct ctor def id

branches/try2/src/librustpkg/conditions.rs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,5 @@ condition! {
1818
}
1919

2020
condition! {
21-
nonexistent_package: (super::PkgId, ~str) -> ();
22-
}
23-
24-
condition! {
25-
copy_failed: (super::Path, super::Path) -> ();
26-
}
27-
28-
condition! {
29-
missing_pkg_files: (super::PkgId) -> ();
21+
nonexistent_package: (super::PkgId, ~str) -> super::Path;
3022
}

0 commit comments

Comments
 (0)