Skip to content

Commit fb31866

Browse files
committed
---
yaml --- r: 153053 b: refs/heads/try2 c: dd812cc h: refs/heads/master i: 153051: f93f8db v: v3
1 parent 91f9878 commit fb31866

File tree

14 files changed

+973
-715
lines changed

14 files changed

+973
-715
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: 77f72d36ecd447877634d8e5c54b8d793e34cefa
8+
refs/heads/try2: dd812ccbb56193c36819993dea25912788b447f0
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/src/doc/rust.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2155,8 +2155,6 @@ These are functions:
21552155

21562156
* `str_eq`
21572157
: Compare two strings (`&str`) for equality.
2158-
* `uniq_str_eq`
2159-
: Compare two owned strings (`String`) for equality.
21602158
* `strdup_uniq`
21612159
: Return a new unique string
21622160
containing a copy of the contents of a unique string.

branches/try2/src/doc/rustdoc.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ Calculates the factorial of a number.
5151
5252
Given the input integer `n`, this function will calculate `n!` and return it.
5353
"]
54-
pub fn factorial(n: int) -> int { if n < 2 {1} else {n * factorial(n)} }
54+
pub fn factorial(n: int) -> int { if n < 2 {1} else {n * factorial(n - 1)} }
5555
# fn main() {}
5656
~~~
5757

branches/try2/src/etc/install.sh

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ need_ok() {
3535
fi
3636
}
3737

38+
need_cmd() {
39+
if command -v $1 >/dev/null 2>&1
40+
then msg "found $1"
41+
else err "need $1"
42+
fi
43+
}
44+
3845
putvar() {
3946
local T
4047
eval T=\$$1
@@ -198,6 +205,15 @@ absolutify() {
198205
ABSOLUTIFIED="${FILE_PATH}"
199206
}
200207

208+
msg "looking for install programs"
209+
need_cmd mkdir
210+
need_cmd printf
211+
need_cmd cut
212+
need_cmd grep
213+
need_cmd uname
214+
need_cmd tr
215+
need_cmd sed
216+
201217
CFG_SRC_DIR="$(cd $(dirname $0) && pwd)/"
202218
CFG_SELF="$0"
203219
CFG_ARGS="$@"
@@ -216,16 +232,65 @@ else
216232
step_msg "processing $CFG_SELF args"
217233
fi
218234

235+
# Check for mingw or cygwin in order to special case $CFG_LIBDIR_RELATIVE.
236+
# This logic is duplicated from configure in order to get the correct libdir
237+
# for Windows installs.
238+
CFG_OSTYPE=$(uname -s)
239+
240+
case $CFG_OSTYPE in
241+
242+
MINGW32*)
243+
CFG_OSTYPE=pc-mingw32
244+
;;
245+
246+
MINGW64*)
247+
# msys2, MSYSTEM=MINGW64
248+
CFG_OSTYPE=w64-mingw32
249+
;;
250+
251+
# Thad's Cygwin identifers below
252+
253+
# Vista 32 bit
254+
CYGWIN_NT-6.0)
255+
CFG_OSTYPE=pc-mingw32
256+
;;
257+
258+
# Vista 64 bit
259+
CYGWIN_NT-6.0-WOW64)
260+
CFG_OSTYPE=w64-mingw32
261+
;;
262+
263+
# Win 7 32 bit
264+
CYGWIN_NT-6.1)
265+
CFG_OSTYPE=pc-mingw32
266+
;;
267+
268+
# Win 7 64 bit
269+
CYGWIN_NT-6.1-WOW64)
270+
CFG_OSTYPE=w64-mingw32
271+
;;
272+
esac
273+
219274
OPTIONS=""
220275
BOOL_OPTIONS=""
221276
VAL_OPTIONS=""
222277

278+
# On windows we just store the libraries in the bin directory because
279+
# there's no rpath. This is where the build system itself puts libraries;
280+
# --libdir is used to configure the installation directory.
281+
# FIXME: Thise needs to parameterized over target triples. Do it in platform.mk
282+
CFG_LIBDIR_RELATIVE=lib
283+
if [ "$CFG_OSTYPE" = "pc-mingw32" ] || [ "$CFG_OSTYPE" = "w64-mingw32" ]
284+
then
285+
CFG_LIBDIR_RELATIVE=bin
286+
fi
287+
223288
flag uninstall "only uninstall from the installation prefix"
224289
opt verify 1 "verify that the installed binaries run correctly"
225290
valopt prefix "/usr/local" "set installation prefix"
226291
# NB This isn't quite the same definition as in `configure`.
227292
# just using 'lib' instead of CFG_LIBDIR_RELATIVE
228-
valopt libdir "${CFG_PREFIX}/lib" "install libraries"
293+
valopt libdir "${CFG_PREFIX}/${CFG_LIBDIR_RELATIVE}" "install libraries"
229294
valopt mandir "${CFG_PREFIX}/share/man" "install man pages in PATH"
230295

231296
if [ $HELP -eq 1 ]
@@ -384,7 +449,7 @@ while read p; do
384449
need_ok "failed to update manifest"
385450

386451
# The manifest lists all files to install
387-
done < "${CFG_SRC_DIR}/lib/rustlib/manifest.in"
452+
done < "${CFG_SRC_DIR}/${CFG_LIBDIR_RELATIVE}/rustlib/manifest.in"
388453

389454
# Sanity check: can we run the installed binaries?
390455
if [ -z "${CFG_DISABLE_VERIFY}" ]

branches/try2/src/libcore/num/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -586,14 +586,14 @@ macro_rules! int_impl {
586586
fn rotate_left(self, n: uint) -> $T {
587587
// Protect against undefined behaviour for over-long bit shifts
588588
let n = n % $BITS;
589-
(self << n) | (self >> ($BITS - n))
589+
(self << n) | (self >> (($BITS - n) % $BITS))
590590
}
591591

592592
#[inline]
593593
fn rotate_right(self, n: uint) -> $T {
594594
// Protect against undefined behaviour for over-long bit shifts
595595
let n = n % $BITS;
596-
(self >> n) | (self << ($BITS - n))
596+
(self >> n) | (self << (($BITS - n) % $BITS))
597597
}
598598

599599
#[inline]

branches/try2/src/libcoretest/num/int_macros.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,15 @@ mod tests {
114114
assert_eq!(_1.rotate_left(124), _1);
115115
assert_eq!(_0.rotate_right(124), _0);
116116
assert_eq!(_1.rotate_right(124), _1);
117+
118+
// Rotating by 0 should have no effect
119+
assert_eq!(A.rotate_left(0), A);
120+
assert_eq!(B.rotate_left(0), B);
121+
assert_eq!(C.rotate_left(0), C);
122+
// Rotating by a multiple of word size should also have no effect
123+
assert_eq!(A.rotate_left(64), A);
124+
assert_eq!(B.rotate_left(64), B);
125+
assert_eq!(C.rotate_left(64), C);
117126
}
118127

119128
#[test]

branches/try2/src/libcoretest/num/uint_macros.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,15 @@ mod tests {
7474
assert_eq!(_1.rotate_left(124), _1);
7575
assert_eq!(_0.rotate_right(124), _0);
7676
assert_eq!(_1.rotate_right(124), _1);
77+
78+
// Rotating by 0 should have no effect
79+
assert_eq!(A.rotate_left(0), A);
80+
assert_eq!(B.rotate_left(0), B);
81+
assert_eq!(C.rotate_left(0), C);
82+
// Rotating by a multiple of word size should also have no effect
83+
assert_eq!(A.rotate_left(64), A);
84+
assert_eq!(B.rotate_left(64), B);
85+
assert_eq!(C.rotate_left(64), C);
7786
}
7887

7988
#[test]

branches/try2/src/libnum/rational.rs

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -274,12 +274,17 @@ impl<T: Clone + Integer + PartialOrd>
274274
Num for Ratio<T> {}
275275

276276
/* String conversions */
277-
impl<T: fmt::Show> fmt::Show for Ratio<T> {
278-
/// Renders as `numer/denom`.
277+
impl<T: fmt::Show + Eq + One> fmt::Show for Ratio<T> {
278+
/// Renders as `numer/denom`. If denom=1, renders as numer.
279279
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
280-
write!(f, "{}/{}", self.numer, self.denom)
280+
if self.denom == One::one() {
281+
write!(f, "{}", self.numer)
282+
} else {
283+
write!(f, "{}/{}", self.numer, self.denom)
284+
}
281285
}
282286
}
287+
283288
impl<T: ToStrRadix> ToStrRadix for Ratio<T> {
284289
/// Renders as `numer/denom` where the numbers are in base `radix`.
285290
fn to_str_radix(&self, radix: uint) -> String {
@@ -291,21 +296,20 @@ impl<T: ToStrRadix> ToStrRadix for Ratio<T> {
291296

292297
impl<T: FromStr + Clone + Integer + PartialOrd>
293298
FromStr for Ratio<T> {
294-
/// Parses `numer/denom`.
299+
/// Parses `numer/denom` or just `numer`
295300
fn from_str(s: &str) -> Option<Ratio<T>> {
296-
let split: Vec<&str> = s.splitn('/', 1).collect();
297-
if split.len() < 2 {
298-
return None
301+
let mut split = s.splitn('/', 1);
302+
303+
let num = split.next().and_then(|n| FromStr::from_str(n));
304+
let den = split.next().or(Some("1")).and_then(|d| FromStr::from_str(d));
305+
306+
match (num, den) {
307+
(Some(n), Some(d)) => Some(Ratio::new(n, d)),
308+
_ => None
299309
}
300-
let a_option: Option<T> = FromStr::from_str(*split.get(0));
301-
a_option.and_then(|a| {
302-
let b_option: Option<T> = FromStr::from_str(*split.get(1));
303-
b_option.and_then(|b| {
304-
Some(Ratio::new(a.clone(), b.clone()))
305-
})
306-
})
307310
}
308311
}
312+
309313
impl<T: FromStrRadix + Clone + Integer + PartialOrd>
310314
FromStrRadix for Ratio<T> {
311315
/// Parses `numer/denom` where the numbers are in base `radix`.
@@ -429,6 +433,13 @@ mod test {
429433
assert!(!_neg1_2.is_integer());
430434
}
431435

436+
#[test]
437+
fn test_show() {
438+
assert_eq!(format!("{}", _2), "2".to_string());
439+
assert_eq!(format!("{}", _1_2), "1/2".to_string());
440+
assert_eq!(format!("{}", _0), "0".to_string());
441+
assert_eq!(format!("{}", Ratio::from_integer(-2i)), "-2".to_string());
442+
}
432443

433444
mod arith {
434445
use super::{_0, _1, _2, _1_2, _3_2, _neg1_2, to_big};
@@ -562,11 +573,11 @@ mod test {
562573
assert_eq!(FromStr::from_str(s.as_slice()), Some(r));
563574
assert_eq!(r.to_str(), s);
564575
}
565-
test(_1, "1/1".to_string());
566-
test(_0, "0/1".to_string());
576+
test(_1, "1".to_string());
577+
test(_0, "0".to_string());
567578
test(_1_2, "1/2".to_string());
568579
test(_3_2, "3/2".to_string());
569-
test(_2, "2/1".to_string());
580+
test(_2, "2".to_string());
570581
test(_neg1_2, "-1/2".to_string());
571582
}
572583
#[test]

branches/try2/src/librustc/middle/check_match.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,12 @@ impl fmt::Show for Matrix {
7474
}
7575
}
7676

77-
struct MatchCheckCtxt<'a> {
78-
tcx: &'a ty::ctxt
77+
pub struct MatchCheckCtxt<'a> {
78+
pub tcx: &'a ty::ctxt
7979
}
8080

8181
#[deriving(Clone, PartialEq)]
82-
enum Constructor {
82+
pub enum Constructor {
8383
/// The constructor of all patterns that don't vary by constructor,
8484
/// e.g. struct patterns and fixed-length arrays.
8585
Single,
@@ -492,9 +492,9 @@ fn is_useful_specialized(cx: &MatchCheckCtxt, &Matrix(ref m): &Matrix, v: &[Gc<P
492492
ctor: Constructor, lty: ty::t, witness: WitnessPreference) -> Usefulness {
493493
let arity = constructor_arity(cx, &ctor, lty);
494494
let matrix = Matrix(m.iter().filter_map(|r| {
495-
specialize(cx, r.as_slice(), &ctor, arity)
495+
specialize(cx, r.as_slice(), &ctor, 0u, arity)
496496
}).collect());
497-
match specialize(cx, v, &ctor, arity) {
497+
match specialize(cx, v, &ctor, 0u, arity) {
498498
Some(v) => is_useful(cx, &matrix, v.as_slice(), witness),
499499
None => NotUseful
500500
}
@@ -580,7 +580,7 @@ fn is_wild(cx: &MatchCheckCtxt, p: Gc<Pat>) -> bool {
580580
///
581581
/// For instance, a tuple pattern (_, 42u, Some([])) has the arity of 3.
582582
/// A struct pattern's arity is the number of fields it contains, etc.
583-
fn constructor_arity(cx: &MatchCheckCtxt, ctor: &Constructor, ty: ty::t) -> uint {
583+
pub fn constructor_arity(cx: &MatchCheckCtxt, ctor: &Constructor, ty: ty::t) -> uint {
584584
match ty::get(ty).sty {
585585
ty::ty_tup(ref fs) => fs.len(),
586586
ty::ty_box(_) | ty::ty_uniq(_) => 1u,
@@ -628,11 +628,11 @@ fn range_covered_by_constructor(ctor: &Constructor,
628628
/// different patterns.
629629
/// Structure patterns with a partial wild pattern (Foo { a: 42, .. }) have their missing
630630
/// fields filled with wild patterns.
631-
fn specialize(cx: &MatchCheckCtxt, r: &[Gc<Pat>],
632-
constructor: &Constructor, arity: uint) -> Option<Vec<Gc<Pat>>> {
631+
pub fn specialize(cx: &MatchCheckCtxt, r: &[Gc<Pat>],
632+
constructor: &Constructor, col: uint, arity: uint) -> Option<Vec<Gc<Pat>>> {
633633
let &Pat {
634634
id: pat_id, node: ref node, span: pat_span
635-
} = &(*raw_pat(r[0]));
635+
} = &(*raw_pat(r[col]));
636636
let head: Option<Vec<Gc<Pat>>> = match node {
637637
&PatWild =>
638638
Some(Vec::from_elem(arity, wild())),
@@ -776,7 +776,7 @@ fn specialize(cx: &MatchCheckCtxt, r: &[Gc<Pat>],
776776
None
777777
}
778778
};
779-
head.map(|head| head.append(r.tail()))
779+
head.map(|head| head.append(r.slice_to(col)).append(r.slice_from(col + 1)))
780780
}
781781

782782
fn default(cx: &MatchCheckCtxt, r: &[Gc<Pat>]) -> Option<Vec<Gc<Pat>>> {

branches/try2/src/librustc/middle/lang_items.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,6 @@ lets_do_this! {
248248
OrdTraitLangItem, "ord", ord_trait;
249249

250250
StrEqFnLangItem, "str_eq", str_eq_fn;
251-
UniqStrEqFnLangItem, "uniq_str_eq", uniq_str_eq_fn;
252251

253252
// A number of failure-related lang items. The `fail_` item corresponds to
254253
// divide-by-zero and various failure cases with `match`. The

0 commit comments

Comments
 (0)