Skip to content

Commit 4e7a3c0

Browse files
committed
---
yaml --- r: 152245 b: refs/heads/try2 c: 3b5d6fd h: refs/heads/master i: 152243: 2a1c831 v: v3
1 parent 9290ef9 commit 4e7a3c0

File tree

19 files changed

+264
-222
lines changed

19 files changed

+264
-222
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: a6401b52263336c22879d4ffae3eded97949ee7b
8+
refs/heads/try2: 3b5d6fd25486b29a70adfda6cb917ced614bc6d2
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/src/README.md

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,37 +5,26 @@ Source layout:
55
| Path | Description |
66
| ------------------- | --------------------------------------------------------- |
77
| `librustc/` | The self-hosted compiler |
8-
| `liballoc/` | Rust's core allocation library |
9-
| `libcore/` | The Rust core library |
10-
| `libdebug/` | Debugging utilities |
118
| `libstd/` | The standard library (imported and linked by default) |
9+
| `libextra/` | The "extras" library (slightly more peripheral code) |
1210
| `libgreen/` | The M:N runtime library |
1311
| `libnative/` | The 1:1 runtime library |
1412
| `libsyntax/` | The Rust parser and pretty-printer |
13+
| `libcollections/` | A collection of useful data structures and containers |
14+
| `libnum/` | Extended number support library (complex, rational, etc) |
1515
| `libtest/` | Rust's test-runner code |
1616
| ------------------- | --------------------------------------------------------- |
1717
| `libarena/` | The arena (a fast but limited) memory allocator |
18-
| `libbacktrace/` | The libbacktrace library |
19-
| `libcollections/` | A collection of useful data structures and containers |
2018
| `libflate/` | Simple compression library |
21-
| `libfmt_macros/` | Macro support for format strings |
2219
| `libfourcc/` | Data format identifier library |
2320
| `libgetopts/` | Get command-line-options library |
2421
| `libglob/` | Unix glob patterns library |
25-
| `libgraphviz/` | Generating files for Graphviz |
26-
| `libhexfloat/` | Hexadecimal floating-point literals |
27-
| `liblibc/` | Bindings for the C standard library |
28-
| `liblog/` | Utilities for program-wide and customizable logging |
29-
| `libnum/` | Extended number support library (complex, rational, etc) |
30-
| `librand/` | Random numbers and distributions |
3122
| `libregex/` | Regular expressions |
32-
| `libregex_macros/` | The regex! syntax extension |
3323
| `libsemver/` | Rust's semantic versioning library |
3424
| `libserialize/` | Encode-Decode types library |
3525
| `libsync/` | Concurrency mechanisms and primitives |
3626
| `libterm/` | ANSI color library for terminals |
3727
| `libtime/` | Time operations library |
38-
| `liburl/` | URL handling lirary |
3928
| `libuuid/` | UUID's handling code |
4029
| ------------------- | --------------------------------------------------------- |
4130
| `rt/` | The runtime system |

branches/try2/src/doc/intro.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ and its implications on a task that programmers usually find very difficult: con
1818

1919
Ownership is central to Rust,
2020
and is the feature from which many of Rust's powerful capabilities are derived.
21-
"Ownership" refers to which parts of your code are allowed to read,
21+
"Ownership" refers to which parts of your code are allowed read,
2222
write, and ultimately release, memory.
2323
Let's start by looking at some C++ code:
2424

branches/try2/src/liballoc/rc.rs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ use core::option::{Option, Some, None};
3333
use core::ptr;
3434
use core::ptr::RawPtr;
3535
use core::mem::{min_align_of, size_of};
36-
use core::fmt;
3736

3837
use heap::deallocate;
3938

@@ -179,12 +178,6 @@ impl<T: Ord> Ord for Rc<T> {
179178
fn cmp(&self, other: &Rc<T>) -> Ordering { (**self).cmp(&**other) }
180179
}
181180

182-
impl<T: fmt::Show> fmt::Show for Rc<T> {
183-
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
184-
(**self).fmt(f)
185-
}
186-
}
187-
188181
/// Weak reference to a reference-counted box
189182
#[unsafe_no_drop_flag]
190183
pub struct Weak<T> {

branches/try2/src/libregex/lib.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -155,16 +155,15 @@
155155
//! # Unicode
156156
//!
157157
//! This implementation executes regular expressions **only** on sequences of
158-
//! Unicode code points while exposing match locations as byte indices into the
159-
//! search string.
158+
//! UTF8 codepoints while exposing match locations as byte indices.
160159
//!
161160
//! Currently, only naive case folding is supported. Namely, when matching
162161
//! case insensitively, the characters are first converted to their uppercase
163162
//! forms and then compared.
164163
//!
165164
//! Regular expressions themselves are also **only** interpreted as a sequence
166-
//! of Unicode code points. This means you can use Unicode characters
167-
//! directly in your expression:
165+
//! of UTF8 codepoints. This means you can embed Unicode characters directly
166+
//! into your expression:
168167
//!
169168
//! ```rust
170169
//! # #![feature(phase)]
@@ -230,10 +229,10 @@
230229
//! x*? zero or more of x (ungreedy)
231230
//! x+? one or more of x (ungreedy)
232231
//! x?? zero or one of x (ungreedy)
233-
//! x{n,m} at least n x and at most m x (greedy)
232+
//! x{n,m} at least n and at most x (greedy)
234233
//! x{n,} at least n x (greedy)
235234
//! x{n} exactly n x
236-
//! x{n,m}? at least n x and at most m x (ungreedy)
235+
//! x{n,m}? at least n and at most x (ungreedy)
237236
//! x{n,}? at least n x (ungreedy)
238237
//! x{n}? exactly n x
239238
//! </pre>
@@ -301,7 +300,7 @@
301300
//! \v vertical tab (\x0B)
302301
//! \123 octal character code (up to three digits)
303302
//! \x7F hex character code (exactly two digits)
304-
//! \x{10FFFF} any hex character code corresponding to a Unicode code point
303+
//! \x{10FFFF} any hex character code corresponding to a valid UTF8 codepoint
305304
//! </pre>
306305
//!
307306
//! ## Perl character classes (Unicode friendly)
@@ -391,7 +390,7 @@ mod vm;
391390
#[cfg(test, not(windows))]
392391
mod test;
393392

394-
/// The `native` module exists to support the `regex!` macro. Do not use.
393+
/// The `program` module exists to support the `regex!` macro. Do not use.
395394
#[doc(hidden)]
396395
pub mod native {
397396
// Exporting this stuff is bad form, but it's necessary for two reasons.

branches/try2/src/libregex/parse/mod.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -201,9 +201,6 @@ pub fn parse(s: &str) -> Result<Ast, Error> {
201201

202202
impl<'a> Parser<'a> {
203203
fn parse(&mut self) -> Result<Ast, Error> {
204-
if self.chars.len() == 0 {
205-
return Ok(Nothing);
206-
}
207204
loop {
208205
let c = self.cur();
209206
match c {

branches/try2/src/libregex/re.rs

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,8 @@ use parse;
1818
use vm;
1919
use vm::{CaptureLocs, MatchKind, Exists, Location, Submatches};
2020

21-
/// Escapes all regular expression meta characters in `text`.
22-
///
23-
/// The string returned may be safely used as a literal in a regular
24-
/// expression.
21+
/// Escapes all regular expression meta characters in `text` so that it may be
22+
/// safely used in a regular expression as a literal string.
2523
pub fn quote(text: &str) -> String {
2624
let mut quoted = String::with_capacity(text.len());
2725
for c in text.chars() {
@@ -47,18 +45,17 @@ pub fn is_match(regex: &str, text: &str) -> Result<bool, parse::Error> {
4745
Regex::new(regex).map(|r| r.is_match(text))
4846
}
4947

50-
/// A compiled regular expression
51-
///
52-
/// It is represented as either a sequence of bytecode instructions (dynamic)
53-
/// or as a specialized Rust function (native). It can be used to search, split
48+
/// Regex is a compiled regular expression, represented as either a sequence
49+
/// of bytecode instructions (dynamic) or as a specialized Rust function
50+
/// (native). It can be used to search, split
5451
/// or replace text. All searching is done with an implicit `.*?` at the
5552
/// beginning and end of an expression. To force an expression to match the
5653
/// whole string (or a prefix or a suffix), you must use an anchor like `^` or
5754
/// `$` (or `\A` and `\z`).
5855
///
5956
/// While this crate will handle Unicode strings (whether in the regular
6057
/// expression or in the search text), all positions returned are **byte
61-
/// indices**. Every byte index is guaranteed to be at a Unicode code point
58+
/// indices**. Every byte index is guaranteed to be at a UTF8 codepoint
6259
/// boundary.
6360
///
6461
/// The lifetimes `'r` and `'t` in this crate correspond to the lifetime of a
@@ -192,7 +189,7 @@ impl Regex {
192189
///
193190
/// # Example
194191
///
195-
/// Find the start and end location of the first word with exactly 13
192+
/// Find the start and end location of every word with exactly 13
196193
/// characters:
197194
///
198195
/// ```rust
@@ -219,7 +216,7 @@ impl Regex {
219216
///
220217
/// # Example
221218
///
222-
/// Find the start and end location of every word with exactly 13
219+
/// Find the start and end location of the first word with exactly 13
223220
/// characters:
224221
///
225222
/// ```rust
@@ -580,8 +577,8 @@ impl<'t> Replacer for &'t str {
580577
}
581578
}
582579

583-
impl<'t> Replacer for |&Captures|: 't -> String {
584-
fn reg_replace<'a>(&'a mut self, caps: &Captures) -> MaybeOwned<'a> {
580+
impl<'a> Replacer for |&Captures|: 'a -> String {
581+
fn reg_replace<'r>(&'r mut self, caps: &Captures) -> MaybeOwned<'r> {
585582
Owned((*self)(caps))
586583
}
587584
}
@@ -826,9 +823,8 @@ impl<'t> Iterator<Option<(uint, uint)>> for SubCapturesPos<'t> {
826823
}
827824

828825
/// An iterator that yields all non-overlapping capture groups matching a
829-
/// particular regular expression.
830-
///
831-
/// The iterator stops when no more matches can be found.
826+
/// particular regular expression. The iterator stops when no more matches can
827+
/// be found.
832828
///
833829
/// `'r` is the lifetime of the compiled expression and `'t` is the lifetime
834830
/// of the matched string.

branches/try2/src/libregex/test/tests.rs

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,6 @@ fn split() {
2828
assert_eq!(subs, vec!("cauchy", "plato", "tyler", "binx"));
2929
}
3030

31-
#[test]
32-
fn empty_regex_empty_match() {
33-
let re = regex!("");
34-
let ms = re.find_iter("").collect::<Vec<(uint, uint)>>();
35-
assert_eq!(ms, vec![(0, 0)]);
36-
}
37-
38-
#[test]
39-
fn empty_regex_nonempty_match() {
40-
let re = regex!("");
41-
let ms = re.find_iter("abc").collect::<Vec<(uint, uint)>>();
42-
assert_eq!(ms, vec![(0, 0), (1, 1), (2, 2), (3, 3)]);
43-
}
44-
4531
macro_rules! replace(
4632
($name:ident, $which:ident, $re:expr,
4733
$search:expr, $replace:expr, $result:expr) => (

branches/try2/src/libregex_macros/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
html_root_url = "http://doc.rust-lang.org/")]
2121

2222
#![feature(macro_registrar, managed_boxes, quote)]
23+
#![allow(unused_imports)] // `quote_expr!` adds some `use` globs which may be unused
2324

2425
extern crate regex;
2526
extern crate syntax;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ impl<'a> Archive<'a> {
110110
lto: bool) -> io::IoResult<()> {
111111
let object = format!("{}.o", name);
112112
let bytecode = format!("{}.bc.deflate", name);
113-
let mut ignore = vec!(bytecode.as_slice(), METADATA_FILENAME);
113+
let mut ignore = vec!(METADATA_FILENAME, bytecode.as_slice());
114114
if lto {
115115
ignore.push(object.as_slice());
116116
}

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,11 @@
1212
use middle::ty;
1313
use middle::typeck::check::FnCtxt;
1414
use middle::typeck::infer;
15-
use middle::typeck::infer::resolve_type;
16-
use middle::typeck::infer::resolve::try_resolve_tvar_shallow;
1715

1816
use std::result::{Err, Ok};
1917
use std::result;
2018
use syntax::ast;
2119
use syntax::codemap::Span;
22-
use util::ppaux::Repr;
2320

2421
// Requires that the two types unify, and prints an error message if they
2522
// don't.
@@ -61,13 +58,6 @@ pub fn eqtype(fcx: &FnCtxt, sp: Span, expected: ty::t, actual: ty::t) {
6158
// Checks that the type `actual` can be coerced to `expected`.
6259
pub fn coerce(fcx: &FnCtxt, sp: Span, expected: ty::t, expr: &ast::Expr) {
6360
let expr_ty = fcx.expr_ty(expr);
64-
debug!("demand::coerce(expected = {}, expr_ty = {})",
65-
expected.repr(fcx.ccx.tcx),
66-
expr_ty.repr(fcx.ccx.tcx));
67-
let expected = if ty::type_needs_infer(expected) {
68-
resolve_type(fcx.infcx(), expected,
69-
try_resolve_tvar_shallow).unwrap_or(expected)
70-
} else { expected };
7161
match fcx.mk_assignty(expr, expr_ty, expected) {
7262
result::Ok(()) => { /* ok */ }
7363
result::Err(ref err) => {

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

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,15 @@ pub struct Inherited<'a> {
168168
upvar_borrow_map: RefCell<ty::UpvarBorrowMap>,
169169
}
170170

171+
#[deriving(Clone)]
172+
pub enum FnKind {
173+
// A do-closure.
174+
DoBlock,
175+
176+
// A normal closure or fn item.
177+
Vanilla
178+
}
179+
171180
#[deriving(Clone)]
172181
pub struct FnStyleState {
173182
pub def: ast::NodeId,
@@ -240,6 +249,11 @@ pub struct FnCtxt<'a> {
240249
// can actually be made to live as long as it needs to live.
241250
region_lb: Cell<ast::NodeId>,
242251

252+
// Says whether we're inside a for loop, in a do block
253+
// or neither. Helps with error messages involving the
254+
// function return type.
255+
fn_kind: FnKind,
256+
243257
inh: &'a Inherited<'a>,
244258

245259
ccx: &'a CrateCtxt<'a>,
@@ -275,6 +289,7 @@ fn blank_fn_ctxt<'a>(ccx: &'a CrateCtxt<'a>,
275289
ret_ty: rty,
276290
ps: RefCell::new(FnStyleState::function(ast::NormalFn, 0)),
277291
region_lb: Cell::new(region_bnd),
292+
fn_kind: Vanilla,
278293
inh: inh,
279294
ccx: ccx
280295
}
@@ -341,7 +356,7 @@ fn check_bare_fn(ccx: &CrateCtxt,
341356
ty::ty_bare_fn(ref fn_ty) => {
342357
let inh = Inherited::new(ccx.tcx, param_env);
343358
let fcx = check_fn(ccx, fn_ty.fn_style, &fn_ty.sig,
344-
decl, id, body, &inh);
359+
decl, id, body, Vanilla, &inh);
345360

346361
vtable::resolve_in_block(&fcx, body);
347362
regionck::regionck_fn(&fcx, body);
@@ -425,6 +440,7 @@ fn check_fn<'a>(ccx: &'a CrateCtxt<'a>,
425440
decl: &ast::FnDecl,
426441
id: ast::NodeId,
427442
body: &ast::Block,
443+
fn_kind: FnKind,
428444
inherited: &'a Inherited<'a>) -> FnCtxt<'a>
429445
{
430446
/*!
@@ -463,6 +479,7 @@ fn check_fn<'a>(ccx: &'a CrateCtxt<'a>,
463479
ret_ty: ret_ty,
464480
ps: RefCell::new(FnStyleState::function(fn_style, id)),
465481
region_lb: Cell::new(body.id),
482+
fn_kind: fn_kind,
466483
inh: inherited,
467484
ccx: ccx
468485
};
@@ -2278,6 +2295,7 @@ fn check_expr_with_unifier(fcx: &FnCtxt,
22782295
store: ty::TraitStore,
22792296
decl: &ast::FnDecl,
22802297
body: ast::P<ast::Block>,
2298+
fn_kind: FnKind,
22812299
expected: Option<ty::t>) {
22822300
let tcx = fcx.ccx.tcx;
22832301

@@ -2355,7 +2373,7 @@ fn check_expr_with_unifier(fcx: &FnCtxt,
23552373
};
23562374

23572375
check_fn(fcx.ccx, inherited_style, &fty_sig,
2358-
decl, id, body, fcx.inh);
2376+
decl, id, body, fn_kind, fcx.inh);
23592377
}
23602378

23612379

@@ -3026,6 +3044,7 @@ fn check_expr_with_unifier(fcx: &FnCtxt,
30263044
ty::RegionTraitStore(region, ast::MutMutable),
30273045
decl,
30283046
body,
3047+
Vanilla,
30293048
expected);
30303049
}
30313050
ast::ExprProc(decl, body) => {
@@ -3034,6 +3053,7 @@ fn check_expr_with_unifier(fcx: &FnCtxt,
30343053
ty::UniqTraitStore,
30353054
decl,
30363055
body,
3056+
Vanilla,
30373057
expected);
30383058
}
30393059
ast::ExprBlock(b) => {

0 commit comments

Comments
 (0)