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.cc17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 4f0a9f1bdbf5..dbb8f51b0243 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -357,21 +357,21 @@ static Expr primFalse(EvalState & state, const ATermVector & args)
 
 
 /* Return the null value. */
-Expr primNull(EvalState & state, const ATermVector & args)
+static Expr primNull(EvalState & state, const ATermVector & args)
 {
     return makeNull();
 }
 
 
 /* Determine whether the argument is the null value. */
-Expr primIsNull(EvalState & state, const ATermVector & args)
+static Expr primIsNull(EvalState & state, const ATermVector & args)
 {
     return makeBool(matchNull(evalExpr(state, args[0])));
 }
 
 
 /* Apply a function to every element of a list. */
-Expr primMap(EvalState & state, const ATermVector & args)
+static Expr primMap(EvalState & state, const ATermVector & args)
 {
     Expr fun = evalExpr(state, args[0]);
     Expr list = evalExpr(state, args[1]);
@@ -388,11 +388,22 @@ Expr primMap(EvalState & state, const ATermVector & args)
 }
 
 
+/* Return a string constant representing the current platform.  Note!
+   that differs between platforms, so Nix expressions using
+   `__currentSystem' can evaluate to different values on different
+   platforms. */
+static Expr primCurrentSystem(EvalState & state, const ATermVector & args)
+{
+    return makeStr(toATerm(thisSystem));
+}
+
+
 void EvalState::addPrimOps()
 {
     addPrimOp("true", 0, primTrue);
     addPrimOp("false", 0, primFalse);
     addPrimOp("null", 0, primNull);
+    addPrimOp("__currentSystem", 0, primCurrentSystem);
 
     addPrimOp("import", 1, primImport);
     addPrimOp("derivation", 1, primDerivation);