about summary refs log tree commit diff
path: root/src/libexpr/nixexpr.cc
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2013-05-16T17·08+0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2013-05-16T17·08+0200
commit18a48d80a0686ba81959057e8becc6272acd6c46 (patch)
treee3f1fabe22a2c2da63c0ea7880cedee6bdb55a87 /src/libexpr/nixexpr.cc
parent1b3a03f1610b714adca41637ccd85a8157e236ab (diff)
Show function names in error messages
Functions in Nix are anonymous, but if they're assigned to a
variable/attribute, we can use the variable/attribute name in error
messages, e.g.

while evaluating `concatMapStrings' at `/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/pkgs/lib/strings.nix:18:25':
...
Diffstat (limited to 'src/libexpr/nixexpr.cc')
-rw-r--r--src/libexpr/nixexpr.cc20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libexpr/nixexpr.cc b/src/libexpr/nixexpr.cc
index c52a413916..9b75bb6448 100644
--- a/src/libexpr/nixexpr.cc
+++ b/src/libexpr/nixexpr.cc
@@ -324,4 +324,24 @@ void ExprConcatStrings::bindVars(const StaticEnv & env)
 }
 
 
+/* Storing function names. */
+
+void Expr::setName(Symbol & name)
+{
+}
+
+
+void ExprLambda::setName(Symbol & name)
+{
+    this->name = name;
+    body->setName(name);
+}
+
+
+string ExprLambda::showNamePos()
+{
+    return (format("%1% at %2%") % (name.set() ? "`" + (string) name + "'" : "an anonymous function") % pos).str();
+}
+
+
 }