Skip to content

Commit d14f7b5

Browse files
committed
---
yaml --- r: 79837 b: refs/heads/try c: 634bddd h: refs/heads/master i: 79835: cbac60c v: v3
1 parent 4e1c0a6 commit d14f7b5

File tree

30 files changed

+846
-1078
lines changed

30 files changed

+846
-1078
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
refs/heads/master: ba9fa89bfb4aae53db93e9ecac31807af96356fc
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 54ae2800ffb30513f89ce13d27ac3c8d095d98ac
5-
refs/heads/try: 7820fb5ca99785c4812ad32be80998a2a4fb4213
5+
refs/heads/try: 634bddde0577b7630f39bcf7edf2f52e22982dd5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: 147ecfdd8221e4a4d4e090486829a06da1e0ca3c

branches/try/src/libextra/base64.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,8 +315,11 @@ mod test {
315315
use std::vec;
316316
317317
do 1000.times {
318-
let times = task_rng().gen_uint_range(1, 100);
319-
let v = vec::from_fn(times, |_| random::<u8>());
318+
let v: ~[u8] = do vec::build |push| {
319+
do task_rng().gen_uint_range(1, 100).times {
320+
push(random());
321+
}
322+
};
320323
assert_eq!(v.to_base64(STANDARD).from_base64().unwrap(), v);
321324
}
322325
}

branches/try/src/libextra/workcache.rs

Lines changed: 20 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,17 @@
1212

1313
use digest::Digest;
1414
use json;
15-
use json::ToJson;
1615
use sha1::Sha1;
1716
use serialize::{Encoder, Encodable, Decoder, Decodable};
1817
use arc::{Arc,RWArc};
1918
use treemap::TreeMap;
19+
2020
use std::cell::Cell;
2121
use std::comm::{PortOne, oneshot};
2222
use std::either::{Either, Left, Right};
23-
use std::{io, os, task};
23+
use std::io;
24+
use std::run;
25+
use std::task;
2426

2527
/**
2628
*
@@ -105,27 +107,11 @@ impl WorkKey {
105107
}
106108
}
107109

108-
// FIXME #8883: The key should be a WorkKey and not a ~str.
109-
// This is working around some JSON weirdness.
110-
#[deriving(Clone, Eq, Encodable, Decodable)]
111-
struct WorkMap(TreeMap<~str, KindMap>);
112-
113110
#[deriving(Clone, Eq, Encodable, Decodable)]
114-
struct KindMap(TreeMap<~str, ~str>);
111+
struct WorkMap(TreeMap<WorkKey, ~str>);
115112

116113
impl WorkMap {
117114
fn new() -> WorkMap { WorkMap(TreeMap::new()) }
118-
119-
fn insert_work_key(&mut self, k: WorkKey, val: ~str) {
120-
let WorkKey { kind, name } = k;
121-
match self.find_mut(&name) {
122-
Some(&KindMap(ref mut m)) => { m.insert(kind, val); return; }
123-
None => ()
124-
}
125-
let mut new_map = TreeMap::new();
126-
new_map.insert(kind, val);
127-
self.insert(name, KindMap(new_map));
128-
}
129115
}
130116

131117
struct Database {
@@ -137,15 +123,11 @@ struct Database {
137123
impl Database {
138124

139125
pub fn new(p: Path) -> Database {
140-
let mut rslt = Database {
126+
Database {
141127
db_filename: p,
142128
db_cache: TreeMap::new(),
143129
db_dirty: false
144-
};
145-
if os::path_exists(&rslt.db_filename) {
146-
rslt.load();
147130
}
148-
rslt
149131
}
150132

151133
pub fn prepare(&self,
@@ -172,41 +154,6 @@ impl Database {
172154
self.db_cache.insert(k,v);
173155
self.db_dirty = true
174156
}
175-
176-
// FIXME #4330: This should have &mut self and should set self.db_dirty to false.
177-
fn save(&self) {
178-
let f = io::file_writer(&self.db_filename, [io::Create, io::Truncate]).unwrap();
179-
self.db_cache.to_json().to_pretty_writer(f);
180-
}
181-
182-
fn load(&mut self) {
183-
assert!(!self.db_dirty);
184-
assert!(os::path_exists(&self.db_filename));
185-
let f = io::file_reader(&self.db_filename);
186-
match f {
187-
Err(e) => fail!("Couldn't load workcache database %s: %s",
188-
self.db_filename.to_str(), e.to_str()),
189-
Ok(r) =>
190-
match json::from_reader(r) {
191-
Err(e) => fail!("Couldn't parse workcache database (from file %s): %s",
192-
self.db_filename.to_str(), e.to_str()),
193-
Ok(r) => {
194-
let mut decoder = json::Decoder(r);
195-
self.db_cache = Decodable::decode(&mut decoder);
196-
}
197-
}
198-
}
199-
}
200-
}
201-
202-
// FIXME #4330: use &mut self here
203-
#[unsafe_destructor]
204-
impl Drop for Database {
205-
fn drop(&self) {
206-
if self.db_dirty {
207-
self.save();
208-
}
209-
}
210157
}
211158

212159
struct Logger {
@@ -225,20 +172,12 @@ impl Logger {
225172
}
226173
}
227174
228-
type FreshnessMap = TreeMap<~str,extern fn(&str,&str)->bool>;
229-
230175
#[deriving(Clone)]
231176
struct Context {
232177
db: RWArc<Database>,
233178
logger: RWArc<Logger>,
234179
cfg: Arc<json::Object>,
235-
/// Map from kinds (source, exe, url, etc.) to a freshness function.
236-
/// The freshness function takes a name (e.g. file path) and value
237-
/// (e.g. hash of file contents) and determines whether it's up-to-date.
238-
/// For example, in the file case, this would read the file off disk,
239-
/// hash it, and return the result of comparing the given hash and the
240-
/// read hash for equality.
241-
freshness: Arc<FreshnessMap>
180+
freshness: Arc<TreeMap<~str,extern fn(&str,&str)->bool>>
242181
}
243182
244183
struct Prep<'self> {
@@ -266,7 +205,6 @@ fn json_encode<T:Encodable<json::Encoder>>(t: &T) -> ~str {
266205
267206
// FIXME(#5121)
268207
fn json_decode<T:Decodable<json::Decoder>>(s: &str) -> T {
269-
debug!("json decoding: %s", s);
270208
do io::with_str_reader(s) |rdr| {
271209
let j = json::from_reader(rdr).unwrap();
272210
let mut decoder = json::Decoder(j);
@@ -292,18 +230,11 @@ impl Context {
292230
pub fn new(db: RWArc<Database>,
293231
lg: RWArc<Logger>,
294232
cfg: Arc<json::Object>) -> Context {
295-
Context::new_with_freshness(db, lg, cfg, Arc::new(TreeMap::new()))
296-
}
297-
298-
pub fn new_with_freshness(db: RWArc<Database>,
299-
lg: RWArc<Logger>,
300-
cfg: Arc<json::Object>,
301-
freshness: Arc<FreshnessMap>) -> Context {
302233
Context {
303234
db: db,
304235
logger: lg,
305236
cfg: cfg,
306-
freshness: freshness
237+
freshness: Arc::new(TreeMap::new())
307238
}
308239
}
309240
@@ -318,36 +249,6 @@ impl Context {
318249
319250
}
320251
321-
impl Exec {
322-
pub fn discover_input(&mut self,
323-
dependency_kind: &str,
324-
dependency_name: &str,
325-
dependency_val: &str) {
326-
debug!("Discovering input %s %s %s", dependency_kind, dependency_name, dependency_val);
327-
self.discovered_inputs.insert_work_key(WorkKey::new(dependency_kind, dependency_name),
328-
dependency_val.to_owned());
329-
}
330-
pub fn discover_output(&mut self,
331-
dependency_kind: &str,
332-
dependency_name: &str,
333-
dependency_val: &str) {
334-
debug!("Discovering output %s %s %s", dependency_kind, dependency_name, dependency_val);
335-
self.discovered_outputs.insert_work_key(WorkKey::new(dependency_kind, dependency_name),
336-
dependency_val.to_owned());
337-
}
338-
339-
// returns pairs of (kind, name)
340-
pub fn lookup_discovered_inputs(&self) -> ~[(~str, ~str)] {
341-
let mut rs = ~[];
342-
for (k, v) in self.discovered_inputs.iter() {
343-
for (k1, _) in v.iter() {
344-
rs.push((k1.clone(), k.clone()));
345-
}
346-
}
347-
rs
348-
}
349-
}
350-
351252
impl<'self> Prep<'self> {
352253
fn new(ctxt: &'self Context, fn_name: &'self str) -> Prep<'self> {
353254
Prep {
@@ -356,30 +257,18 @@ impl<'self> Prep<'self> {
356257
declared_inputs: WorkMap::new()
357258
}
358259
}
359-
360-
pub fn lookup_declared_inputs(&self) -> ~[~str] {
361-
let mut rs = ~[];
362-
for (_, v) in self.declared_inputs.iter() {
363-
for (inp, _) in v.iter() {
364-
rs.push(inp.clone());
365-
}
366-
}
367-
rs
368-
}
369260
}
370261
371262
impl<'self> Prep<'self> {
372-
pub fn declare_input(&mut self, kind: &str, name: &str, val: &str) {
373-
debug!("Declaring input %s %s %s", kind, name, val);
374-
self.declared_inputs.insert_work_key(WorkKey::new(kind, name),
263+
fn declare_input(&mut self, kind:&str, name:&str, val:&str) {
264+
self.declared_inputs.insert(WorkKey::new(kind, name),
375265
val.to_owned());
376266
}
377267
378268
fn is_fresh(&self, cat: &str, kind: &str,
379269
name: &str, val: &str) -> bool {
380270
let k = kind.to_owned();
381271
let f = self.ctxt.freshness.get().find(&k);
382-
debug!("freshness for: %s/%s/%s/%s", cat, kind, name, val)
383272
let fresh = match f {
384273
None => fail!("missing freshness-function for '%s'", kind),
385274
Some(f) => (*f)(name, val)
@@ -397,31 +286,27 @@ impl<'self> Prep<'self> {
397286
}
398287

399288
fn all_fresh(&self, cat: &str, map: &WorkMap) -> bool {
400-
for (k_name, kindmap) in map.iter() {
401-
for (k_kind, v) in kindmap.iter() {
402-
if ! self.is_fresh(cat, *k_kind, *k_name, *v) {
403-
return false;
289+
for (k, v) in map.iter() {
290+
if ! self.is_fresh(cat, k.kind, k.name, *v) {
291+
return false;
404292
}
405-
}
406293
}
407294
return true;
408295
}
409296

410-
pub fn exec<T:Send +
297+
fn exec<T:Send +
411298
Encodable<json::Encoder> +
412299
Decodable<json::Decoder>>(
413-
&'self self, blk: ~fn(&mut Exec) -> T) -> T {
300+
&'self self, blk: ~fn(&Exec) -> T) -> T {
414301
self.exec_work(blk).unwrap()
415302
}
416303

417304
fn exec_work<T:Send +
418305
Encodable<json::Encoder> +
419306
Decodable<json::Decoder>>( // FIXME(#5121)
420-
&'self self, blk: ~fn(&mut Exec) -> T) -> Work<'self, T> {
307+
&'self self, blk: ~fn(&Exec) -> T) -> Work<'self, T> {
421308
let mut bo = Some(blk);
422309

423-
debug!("exec_work: looking up %s and %?", self.fn_name,
424-
self.declared_inputs);
425310
let cached = do self.ctxt.db.read |db| {
426311
db.prepare(self.fn_name, &self.declared_inputs)
427312
};
@@ -431,26 +316,21 @@ impl<'self> Prep<'self> {
431316
if self.all_fresh("declared input",&self.declared_inputs) &&
432317
self.all_fresh("discovered input", disc_in) &&
433318
self.all_fresh("discovered output", disc_out) => {
434-
debug!("Cache hit!");
435-
debug!("Trying to decode: %? / %? / %?",
436-
disc_in, disc_out, *res);
437319
Left(json_decode(*res))
438320
}
439321

440322
_ => {
441-
debug!("Cache miss!");
442323
let (port, chan) = oneshot();
443324
let blk = bo.take_unwrap();
444325
let chan = Cell::new(chan);
445326

446-
// What happens if the task fails?
447327
do task::spawn {
448-
let mut exe = Exec {
328+
let exe = Exec {
449329
discovered_inputs: WorkMap::new(),
450330
discovered_outputs: WorkMap::new(),
451331
};
452332
let chan = chan.take();
453-
let v = blk(&mut exe);
333+
let v = blk(&exe);
454334
chan.send((exe, v));
455335
}
456336
Right(port)
@@ -491,23 +371,17 @@ impl<'self, T:Send +
491371
}
492372

493373

494-
#[test]
374+
//#[test]
495375
fn test() {
496376
use std::io::WriterUtil;
497-
use std::{os, run};
498377

499378
let pth = Path("foo.c");
500379
{
501380
let r = io::file_writer(&pth, [io::Create]);
502381
r.unwrap().write_str("int main() { return 0; }");
503382
}
504383

505-
let db_path = os::self_exe_path().expect("workcache::test failed").pop().push("db.json");
506-
if os::path_exists(&db_path) {
507-
os::remove_file(&db_path);
508-
}
509-
510-
let cx = Context::new(RWArc::new(Database::new(db_path)),
384+
let cx = Context::new(RWArc::new(Database::new(Path("db.json"))),
511385
RWArc::new(Logger::new()),
512386
Arc::new(TreeMap::new()));
513387

branches/try/src/librustc/middle/trans/_match.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,8 @@ fn enter_opt<'r>(bcx: @mut Block,
671671
let mut reordered_patterns = ~[];
672672
let r = ty::lookup_struct_fields(tcx, struct_id);
673673
for field in r.iter() {
674-
match field_pats.iter().find(|p| p.ident == field.ident) {
674+
match field_pats.iter().find(|p| p.ident.name
675+
== field.ident.name) {
675676
None => reordered_patterns.push(dummy),
676677
Some(fp) => reordered_patterns.push(fp.pat)
677678
}
@@ -752,7 +753,7 @@ fn enter_rec_or_struct<'r>(bcx: @mut Block,
752753
ast::PatStruct(_, ref fpats, _) => {
753754
let mut pats = ~[];
754755
for fname in fields.iter() {
755-
match fpats.iter().find(|p| p.ident == *fname) {
756+
match fpats.iter().find(|p| p.ident.name == fname.name) {
756757
None => pats.push(dummy),
757758
Some(pat) => pats.push(pat.pat)
758759
}
@@ -1102,7 +1103,7 @@ fn collect_record_or_struct_fields(bcx: @mut Block,
11021103
fn extend(idents: &mut ~[ast::Ident], field_pats: &[ast::FieldPat]) {
11031104
for field_pat in field_pats.iter() {
11041105
let field_ident = field_pat.ident;
1105-
if !idents.iter().any(|x| *x == field_ident) {
1106+
if !idents.iter().any(|x| x.name == field_ident.name) {
11061107
idents.push(field_ident);
11071108
}
11081109
}

branches/try/src/librustc/middle/trans/reflect.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,8 @@ impl Reflector {
256256
let fields = ty::struct_fields(tcx, did, substs);
257257
let mut named_fields = false;
258258
if !fields.is_empty() {
259-
named_fields = fields[0].ident != special_idents::unnamed_field;
259+
named_fields =
260+
fields[0].ident.name != special_idents::unnamed_field.name;
260261
}
261262

262263
let extra = ~[self.c_slice(ty_to_str(tcx, t).to_managed()),

0 commit comments

Comments
 (0)