Skip to content

Commit 4e464c8

Browse files
committed
---
yaml --- r: 46555 b: refs/heads/auto c: 7e08d8f h: refs/heads/master i: 46553: 670f745 46551: 6df06da v: v3
1 parent 1cd46a0 commit 4e464c8

File tree

5 files changed

+20
-148
lines changed

5 files changed

+20
-148
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0
1414
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
1515
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
1616
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
17-
refs/heads/auto: 0ded562e8364244c9c0da1d5f4dc97cd900b4fe4
17+
refs/heads/auto: 7e08d8f23cf284b95e0d6ca237633b6756898648

branches/auto/src/libcore/os.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -566,13 +566,17 @@ pub fn path_exists(p: &Path) -> bool {
566566
*
567567
* If the given path is relative, return it prepended with the current working
568568
* directory. If the given path is already an absolute path, return it
569-
* as is. This is a shortcut for calling os::getcwd().unsafe_join(p)
569+
* as is.
570570
*/
571571
// NB: this is here rather than in path because it is a form of environment
572572
// querying; what it does depends on the process working directory, not just
573573
// the input paths.
574574
pub fn make_absolute(p: &Path) -> Path {
575-
getcwd().unsafe_join(p)
575+
if p.is_absolute {
576+
copy *p
577+
} else {
578+
getcwd().push_many(p.components)
579+
}
576580
}
577581

578582

branches/auto/src/libcore/path.rs

Lines changed: 5 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,6 @@ pub trait GenericPath {
6464
pure fn push_many((&[~str])) -> Self;
6565
pure fn pop() -> Self;
6666

67-
pure fn unsafe_join((&Self)) -> Self;
68-
pure fn is_restricted() -> bool;
69-
7067
pure fn normalize() -> Self;
7168
}
7269

@@ -488,19 +485,6 @@ impl GenericPath for PosixPath {
488485
self.push_many(other.components)
489486
}
490487

491-
pure fn unsafe_join(other: &PosixPath) -> PosixPath {
492-
if other.is_absolute {
493-
PosixPath { is_absolute: true,
494-
components: copy other.components }
495-
} else {
496-
self.push_rel(other)
497-
}
498-
}
499-
500-
pure fn is_restricted() -> bool {
501-
false
502-
}
503-
504488
pure fn push_many(cs: &[~str]) -> PosixPath {
505489
let mut v = copy self.components;
506490
for cs.each |e| {
@@ -701,61 +685,6 @@ impl GenericPath for WindowsPath {
701685
self.push_many(other.components)
702686
}
703687

704-
pure fn unsafe_join(other: &WindowsPath) -> WindowsPath {
705-
/* rhs not absolute is simple push */
706-
if !other.is_absolute {
707-
return self.push_many(other.components);
708-
}
709-
710-
/* if rhs has a host set, then the whole thing wins */
711-
match other.host {
712-
Some(copy host) => {
713-
return WindowsPath {
714-
host: Some(host),
715-
device: copy other.device,
716-
is_absolute: true,
717-
components: copy other.components
718-
};
719-
}
720-
_ => {}
721-
}
722-
723-
/* if rhs has a device set, then a part wins */
724-
match other.device {
725-
Some(copy device) => {
726-
return WindowsPath {
727-
host: None,
728-
device: Some(device),
729-
is_absolute: true,
730-
components: copy other.components
731-
};
732-
}
733-
_ => {}
734-
}
735-
736-
/* fallback: host and device of lhs win, but the
737-
whole path of the right */
738-
WindowsPath {
739-
host: copy self.host,
740-
device: copy self.device,
741-
is_absolute: self.is_absolute || other.is_absolute,
742-
components: copy other.components
743-
}
744-
}
745-
746-
pure fn is_restricted() -> bool {
747-
match self.filestem() {
748-
Some(stem) => {
749-
match stem.to_lower() {
750-
~"con" | ~"aux" | ~"com1" | ~"com2" | ~"com3" | ~"com4" |
751-
~"lpt1" | ~"lpt2" | ~"lpt3" | ~"prn" | ~"nul" => true,
752-
_ => false
753-
}
754-
},
755-
None => false
756-
}
757-
}
758-
759688
pure fn push_many(cs: &[~str]) -> WindowsPath {
760689
let mut v = copy self.components;
761690
for cs.each |e| {
@@ -796,10 +725,7 @@ impl GenericPath for WindowsPath {
796725
pure fn normalize() -> WindowsPath {
797726
return WindowsPath {
798727
host: copy self.host,
799-
device: match self.device {
800-
None => None,
801-
Some(ref device) => Some(device.to_upper())
802-
},
728+
device: copy self.device,
803729
is_absolute: self.is_absolute,
804730
components: normalize(self.components)
805731
}
@@ -838,13 +764,13 @@ pub mod windows {
838764
839765
pub pure fn extract_unc_prefix(s: &str) -> Option<(~str,~str)> {
840766
if (s.len() > 1 &&
841-
(s[0] == '\\' as u8 || s[0] == '/' as u8) &&
842-
s[0] == s[1]) {
767+
s[0] == '\\' as u8 &&
768+
s[1] == '\\' as u8) {
843769
let mut i = 2;
844770
while i < s.len() {
845-
if is_sep(s[i]) {
771+
if s[i] == '\\' as u8 {
846772
let pre = s.slice(2, i);
847-
let mut rest = s.slice(i, s.len());
773+
let rest = s.slice(i, s.len());
848774
return Some((pre, rest));
849775
}
850776
i += 1;
@@ -990,21 +916,13 @@ mod tests {
990916
#[test]
991917
fn test_extract_unc_prefixes() {
992918
assert windows::extract_unc_prefix("\\\\").is_none();
993-
assert windows::extract_unc_prefix("//").is_none();
994919
assert windows::extract_unc_prefix("\\\\hi").is_none();
995-
assert windows::extract_unc_prefix("//hi").is_none();
996920
assert windows::extract_unc_prefix("\\\\hi\\") ==
997921
Some((~"hi", ~"\\"));
998-
assert windows::extract_unc_prefix("//hi\\") ==
999-
Some((~"hi", ~"\\"));
1000922
assert windows::extract_unc_prefix("\\\\hi\\there") ==
1001923
Some((~"hi", ~"\\there"));
1002-
assert windows::extract_unc_prefix("//hi/there") ==
1003-
Some((~"hi", ~"/there"));
1004924
assert windows::extract_unc_prefix("\\\\hi\\there\\friends.txt") ==
1005925
Some((~"hi", ~"\\there\\friends.txt"));
1006-
assert windows::extract_unc_prefix("//hi\\there\\friends.txt") ==
1007-
Some((~"hi", ~"\\there\\friends.txt"));
1008926
}
1009927

1010928
#[test]
@@ -1063,61 +981,5 @@ mod tests {
1063981
.push_many([~"lib", ~"thingy.dll"])
1064982
.with_filename("librustc.dll")),
1065983
"c:\\program files (x86)\\rust\\lib\\librustc.dll");
1066-
1067-
t(&(WindowsPath("\\\\computer\\share")
1068-
.unsafe_join(&WindowsPath("\\a"))),
1069-
"\\\\computer\\a");
1070-
1071-
t(&(WindowsPath("//computer/share")
1072-
.unsafe_join(&WindowsPath("\\a"))),
1073-
"\\\\computer\\a");
1074-
1075-
t(&(WindowsPath("//computer/share")
1076-
.unsafe_join(&WindowsPath("\\\\computer\\share"))),
1077-
"\\\\computer\\share");
1078-
1079-
t(&(WindowsPath("C:/whatever")
1080-
.unsafe_join(&WindowsPath("//computer/share/a/b"))),
1081-
"\\\\computer\\share\\a\\b");
1082-
1083-
t(&(WindowsPath("C:")
1084-
.unsafe_join(&WindowsPath("D:/foo"))),
1085-
"D:\\foo");
1086-
1087-
t(&(WindowsPath("C:")
1088-
.unsafe_join(&WindowsPath("B"))),
1089-
"C:B");
1090-
1091-
t(&(WindowsPath("C:")
1092-
.unsafe_join(&WindowsPath("/foo"))),
1093-
"C:\\foo");
1094-
1095-
t(&(WindowsPath("C:\\")
1096-
.unsafe_join(&WindowsPath("\\bar"))),
1097-
"C:\\bar");
1098-
1099-
t(&(WindowsPath("")
1100-
.unsafe_join(&WindowsPath(""))),
1101-
"");
1102-
1103-
t(&(WindowsPath("")
1104-
.unsafe_join(&WindowsPath("a"))),
1105-
"a");
1106-
1107-
t(&(WindowsPath("")
1108-
.unsafe_join(&WindowsPath("C:\\a"))),
1109-
"C:\\a");
1110-
1111-
t(&(WindowsPath("c:\\foo")
1112-
.normalize()),
1113-
"C:\\foo");
1114-
}
1115-
1116-
#[test]
1117-
fn test_windows_path_restrictions() {
1118-
assert WindowsPath("hi").is_restricted() == false;
1119-
assert WindowsPath("C:\\NUL").is_restricted() == true;
1120-
assert WindowsPath("C:\\COM1.TXT").is_restricted() == true;
1121-
assert WindowsPath("c:\\prn.exe").is_restricted() == true;
1122984
}
1123985
}

branches/auto/src/librustc/middle/resolve.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5285,10 +5285,13 @@ pub impl Resolver {
52855285
for module_.import_resolutions.each_value |&import_resolution| {
52865286
// Ignore dummy spans for things like automatically injected
52875287
// imports for the prelude, and also don't warn about the same
5288-
// import statement being unused more than once.
5288+
// import statement being unused more than once. Furthermore, if
5289+
// the import is public, then we can't be sure whether it's unused
5290+
// or not so don't warn about it.
52895291
if !import_resolution.state.used &&
52905292
!import_resolution.state.warned &&
5291-
import_resolution.span != dummy_sp() {
5293+
import_resolution.span != dummy_sp() &&
5294+
import_resolution.privacy != Public {
52925295
import_resolution.state.warned = true;
52935296
match self.unused_import_lint_level {
52945297
warn => {

branches/auto/src/test/compile-fail/unused-imports-warn.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ mod foo {
3131
}
3232

3333
mod bar {
34+
// Don't ignore on 'pub use' because we're not sure if it's used or not
35+
pub use core::cmp::Eq;
36+
3437
pub mod c {
3538
use foo::Point;
3639
use foo::Square; //~ ERROR unused import

0 commit comments

Comments
 (0)