diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-08-04T17·48+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-08-04T17·48+0000 |
commit | 587dc8aa003cc5f676cc7d01b4fea984f5033107 (patch) | |
tree | 0b04f6705e122f54aa3c7bd25103b8eddebd6a58 /src/libexpr/eval.cc | |
parent | fd9c77dfc7b90d447e6bfdb4f0d5b521184aeddb (diff) | |
parent | 750be19ae865da3ee03c132a287148f2402ad72b (diff) |
* Sync with the trunk.
Diffstat (limited to 'src/libexpr/eval.cc')
-rw-r--r-- | src/libexpr/eval.cc | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index eb1d8d432c69..96bda43a322a 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -750,13 +750,15 @@ void ExprOpImpl::eval(EvalState & state, Env & env, Value & v) void ExprOpUpdate::eval(EvalState & state, Env & env, Value & v) { - Value v2; - state.evalAttrs(env, e1, v2); - - state.cloneAttrs(v2, v); - + Value v1, v2; + state.evalAttrs(env, e1, v1); state.evalAttrs(env, e2, v2); - + + if (v1.attrs->size() == 0) { v = v2; return; } + if (v2.attrs->size() == 0) { v = v1; return; } + + state.cloneAttrs(v1, v); + foreach (Bindings::iterator, i, *v2.attrs) { Attr & a = (*v.attrs)[i->first]; mkCopy(a.value, i->second.value); |