Skip to content

Commit 5c274cc

Browse files
committed
---
yaml --- r: 40762 b: refs/heads/dist-snap c: 3ee1adb h: refs/heads/master v: v3
1 parent 18a8625 commit 5c274cc

File tree

2 files changed

+60
-19
lines changed

2 files changed

+60
-19
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: a810c03263670238bccd64cabb12a23a46e3a278
99
refs/heads/incoming: e90142e536c150df0d9b4b2f11352152177509b5
10-
refs/heads/dist-snap: bfb09ee80d8c322e6d5c6c91af753bfc000b57d1
10+
refs/heads/dist-snap: 3ee1adb7ece94da682109707cca6cd08aacb131a
1111
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1212
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
1313
refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0

branches/dist-snap/src/libstd/workcache.rs

Lines changed: 59 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -118,17 +118,18 @@ struct Database {
118118

119119
impl Database {
120120
pure fn prepare(_fn_name: &str,
121-
_declared_inputs: &const WorkMap) ->
122-
Option<(WorkMap, WorkMap, WorkMap, ~str)> {
121+
_declared_inputs: &const WorkMap,
122+
_declared_outputs: &const WorkMap) ->
123+
Option<(WorkMap, WorkMap, ~str)> {
123124
// XXX: load
124125
None
125126
}
126127
pure fn cache(_fn_name: &str,
127-
_declared_inputs: &WorkMap,
128-
_declared_outputs: &WorkMap,
129-
_discovered_inputs: &WorkMap,
130-
_discovered_outputs: &WorkMap,
131-
_result: &str) {
128+
_declared_inputs: &WorkMap,
129+
_declared_outputs: &WorkMap,
130+
_discovered_inputs: &WorkMap,
131+
_discovered_outputs: &WorkMap,
132+
_result: &str) {
132133
// XXX: store
133134
}
134135
}
@@ -138,11 +139,19 @@ struct Logger {
138139
a: ()
139140
}
140141

142+
impl Logger {
143+
pure fn info(i: &str) {
144+
unsafe {
145+
io::println(~"workcache: " + i.to_owned());
146+
}
147+
}
148+
}
149+
141150
struct Context {
142151
db: @Database,
143152
logger: @Logger,
144153
cfg: @json::Object,
145-
freshness: LinearMap<~str,~fn(&str,&str)->bool>
154+
freshness: LinearMap<~str,@pure fn(&str,&str)->bool>
146155
}
147156
148157
struct Prep {
@@ -213,25 +222,57 @@ impl Prep {
213222
val.to_owned());
214223
}
215224
225+
pure fn is_fresh(cat: &str, kind: &str,
226+
name: &str, val: &str) -> bool {
227+
let k = kind.to_owned();
228+
let f = (self.ctxt.freshness.get(&k))(name, val);
229+
if f {
230+
self.ctxt.logger.info(fmt!("%s %s:%s is fresh",
231+
cat, kind, name));
232+
} else {
233+
self.ctxt.logger.info(fmt!("%s %s:%s is not fresh",
234+
cat, kind, name))
235+
}
236+
return f;
237+
}
238+
239+
pure fn all_fresh(cat: &str, map: WorkMap) -> bool {
240+
for map.each |k,v| {
241+
if ! self.is_fresh(cat, k.kind, k.name, *v) {
242+
return false;
243+
}
244+
}
245+
return true;
246+
}
247+
216248
fn exec<T:Send
217249
Serializable<json::Serializer>
218250
Deserializable<json::Deserializer>>(
219251
@mut self, blk: ~fn(&Exec) -> T) -> Work<T> {
252+
220253
let cached = self.ctxt.db.prepare(self.fn_name,
221-
&self.declared_inputs);
254+
&self.declared_inputs,
255+
&self.declared_outputs);
222256

223257
match move cached {
224258
None => (),
225-
Some((move _decl_out,
226-
move _disc_in,
227-
move _disc_out,
259+
Some((move disc_in,
260+
move disc_out,
228261
move res)) => {
229-
// XXX: check deps for freshness, only return if fresh.
230-
let v : T = do io::with_str_reader(res) |rdr| {
231-
let j = result::unwrap(json::from_reader(rdr));
232-
deserialize(&json::Deserializer(move j))
233-
};
234-
return Work::new(self, move Left(move v));
262+
263+
if self.all_fresh("declared input",
264+
self.declared_inputs) &&
265+
self.all_fresh("declared output",
266+
self.declared_outputs) &&
267+
self.all_fresh("discovered input", disc_in) &&
268+
self.all_fresh("discovered output", disc_out) {
269+
270+
let v : T = do io::with_str_reader(res) |rdr| {
271+
let j = result::unwrap(json::from_reader(rdr));
272+
deserialize(&json::Deserializer(move j))
273+
};
274+
return Work::new(self, move Left(move v));
275+
}
235276
}
236277
}
237278

0 commit comments

Comments
 (0)