From c9c58dba55fc9e46375bb67fdc9e2b55ef3805ff Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Sun, 10 Apr 2005 17:38:19 +0000 Subject: [PATCH] * Primop `__currentSystem' to return the current platform identifier. --- src/libexpr/nixexpr.hh | 6 ------ src/libexpr/primops.cc | 17 ++++++++++++++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/libexpr/nixexpr.hh b/src/libexpr/nixexpr.hh index 9c49751c7d..b7decaa3d9 100644 --- a/src/libexpr/nixexpr.hh +++ b/src/libexpr/nixexpr.hh @@ -89,11 +89,5 @@ void checkVarDefs(const ATermMap & def, Expr e); /* Create an expression representing a boolean. */ Expr makeBool(bool b); -/* Create an expression representing a string. */ -Expr makeString(const string & s); - -/* Create an expression representing a path. */ -Expr makePath(const Path & path); - #endif /* !__NIXEXPR_H */ diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc index 4f0a9f1bdb..dbb8f51b02 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);