Skip to content

Commit 175a2e7

Browse files
committed
---
yaml --- r: 152239 b: refs/heads/try2 c: 9d39178 h: refs/heads/master i: 152237: af3062c 152235: 1b802dc 152231: 99a7ecf 152223: 72ce0db v: v3
1 parent 18bcf63 commit 175a2e7

File tree

9 files changed

+44
-49
lines changed

9 files changed

+44
-49
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: 3eeaa84a50bdbd6c3cc5e33c07a01110b59c7087
8+
refs/heads/try2: 9d39178f2f60b6076e4bd00e263f2304084f34b4
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,9 @@ 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+
}
204207
loop {
205208
let c = self.cur();
206209
match c {

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,20 @@ 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+
3145
macro_rules! replace(
3246
($name:ident, $which:ident, $re:expr,
3347
$search:expr, $replace:expr, $result:expr) => (

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) => {

branches/try2/src/test/compile-fail/issue-7573.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@ impl CrateId {
2424
}
2525

2626
pub fn remove_package_from_database() {
27-
let mut lines_to_use: Vec<&CrateId> = Vec::new();
27+
let mut lines_to_use: Vec<&CrateId> = Vec::new(); //~ ERROR cannot infer an appropriate lifetime
2828
let push_id = |installed_id: &CrateId| {
2929
lines_to_use.push(installed_id);
30-
//~^ ERROR cannot infer an appropriate lifetime for automatic coercion due to
31-
// conflicting requirements
3230
};
3331
list_database(push_id);
3432

branches/try2/src/test/run-pass/issue-14589.rs

Lines changed: 0 additions & 30 deletions
This file was deleted.

branches/try2/src/test/run-pass/issue-4446.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ use std::io::println;
1313
pub fn main() {
1414
let (tx, rx) = channel();
1515

16-
tx.send("hello, world");
17-
1816
spawn(proc() {
1917
println(rx.recv());
2018
});
19+
20+
tx.send("hello, world");
2121
}

0 commit comments

Comments
 (0)