aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2010-08-02 11:54:44 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2010-08-02 11:54:44 +0000
commit7af6a2fd71e95bdc28e0015b1e89a9b81ef32711 (patch)
tree11e2f00de64f399186d6646efcbcd1bd9c2a1a71
parent532d766c279daf190728b4815b92f04623e7fb7f (diff)
* intersectAttrs: optimise for the case where the second set is larger
than the first set. (That's usually the case with callPackage.)
-rw-r--r--src/libexpr/primops.cc14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 42c858611..68f66acc7 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -788,13 +788,13 @@ static void prim_intersectAttrs(EvalState & state, Value * * args, Value & v)
state.forceAttrs(*args[1]);
state.mkAttrs(v);
-
- foreach (Bindings::iterator, i, *args[1]->attrs) {
- Bindings::iterator j = args[0]->attrs->find(i->first);
- if (j != args[0]->attrs->end()) {
- Attr & a = (*v.attrs)[i->first];
- mkCopy(a.value, i->second.value);
- a.pos = i->second.pos;
+
+ foreach (Bindings::iterator, i, *args[0]->attrs) {
+ Bindings::iterator j = args[1]->attrs->find(i->first);
+ if (j != args[1]->attrs->end()) {
+ Attr & a = (*v.attrs)[j->first];
+ mkCopy(a.value, j->second.value);
+ a.pos = j->second.pos;
}
}
}