about summary refs log tree commit diff
path: root/src/libexpr/primops.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libexpr/primops.cc')
-rw-r--r--src/libexpr/primops.cc33
1 files changed, 19 insertions, 14 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 8935b147e559..262e3bec542b 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -234,11 +234,11 @@ static Expr primDerivationStrict(EvalState & state, const ATermVector & args)
 {
     startNest(nest, lvlVomit, "evaluating derivation");
 
-    ATermMap attrs;
+    ATermMap attrs(128); /* !!! */
     queryAllAttrs(evalExpr(state, args[0]), attrs, true);
 
     /* Figure out the name already (for stack backtraces). */
-    Expr eDrvName = attrs.get("name");
+    Expr eDrvName = attrs.get(toATerm("name"));
     if (!eDrvName)
         throw Error("required attribute `name' missing");
     ATerm posDrvName;
@@ -252,11 +252,11 @@ static Expr primDerivationStrict(EvalState & state, const ATermVector & args)
     string outputHashAlgo;
     bool outputHashRecursive = false;
 
-    for (ATermIterator i(attrs.keys()); i; ++i) {
-        string key = aterm2String(*i);
+    for (ATermMap::const_iterator i = attrs.begin(); i != attrs.end(); ++i) {
+        string key = aterm2String(i->key);
         ATerm value;
         Expr pos;
-        ATerm rhs = attrs.get(key);
+        ATerm rhs = i->value;
         if (!matchAttrRHS(rhs, value, pos)) abort();
         startNest(nest, lvlVomit, format("processing attribute `%1%'") % key);
 
@@ -363,9 +363,11 @@ static Expr primDerivationStrict(EvalState & state, const ATermVector & args)
     state.drvHashes[drvPath] = hashDerivationModulo(state, drv);
 
     /* !!! assumes a single output */
-    ATermMap outAttrs;
-    outAttrs.set("outPath", makeAttrRHS(makePath(toATerm(outPath)), makeNoPos()));
-    outAttrs.set("drvPath", makeAttrRHS(makePath(toATerm(drvPath)), makeNoPos()));
+    ATermMap outAttrs(2);
+    outAttrs.set(toATerm("outPath"),
+        makeAttrRHS(makePath(toATerm(outPath)), makeNoPos()));
+    outAttrs.set(toATerm("drvPath"),
+        makeAttrRHS(makePath(toATerm(drvPath)), makeNoPos()));
 
     return makeAttrs(outAttrs);
 }
@@ -374,15 +376,18 @@ static Expr primDerivationStrict(EvalState & state, const ATermVector & args)
 static Expr primDerivationLazy(EvalState & state, const ATermVector & args)
 {
     Expr eAttrs = evalExpr(state, args[0]);
-    ATermMap attrs;
+    ATermMap attrs(128); /* !!! */
     queryAllAttrs(eAttrs, attrs, true);
 
-    attrs.set("type", makeAttrRHS(makeStr(toATerm("derivation")), makeNoPos()));
+    attrs.set(toATerm("type"),
+        makeAttrRHS(makeStr(toATerm("derivation")), makeNoPos()));
 
     Expr drvStrict = makeCall(makeVar(toATerm("derivation!")), eAttrs);
 
-    attrs.set("outPath", makeAttrRHS(makeSelect(drvStrict, toATerm("outPath")), makeNoPos()));
-    attrs.set("drvPath", makeAttrRHS(makeSelect(drvStrict, toATerm("drvPath")), makeNoPos()));
+    attrs.set(toATerm("outPath"),
+        makeAttrRHS(makeSelect(drvStrict, toATerm("outPath")), makeNoPos()));
+    attrs.set(toATerm("drvPath"),
+        makeAttrRHS(makeSelect(drvStrict, toATerm("drvPath")), makeNoPos()));
     
     return makeAttrs(attrs);
 }
@@ -627,14 +632,14 @@ static Expr primCurrentTime(EvalState & state, const ATermVector & args)
 
 static Expr primRemoveAttrs(EvalState & state, const ATermVector & args)
 {
-    ATermMap attrs;
+    ATermMap attrs(128); /* !!! */
     queryAllAttrs(evalExpr(state, args[0]), attrs, true);
     
     ATermList list = evalList(state, args[1]);
 
     for (ATermIterator i(list); i; ++i)
         /* It's not an error for *i not to exist. */
-        attrs.remove(evalString(state, *i));
+        attrs.remove(toATerm(evalString(state, *i)));
 
     return makeAttrs(attrs);
 }