aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/eval.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/libexpr/eval.hh')
-rw-r--r--src/libexpr/eval.hh112
1 files changed, 1 insertions, 111 deletions
diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh
index 75438f5eb..91004fe4c 100644
--- a/src/libexpr/eval.hh
+++ b/src/libexpr/eval.hh
@@ -1,6 +1,7 @@
#ifndef __EVAL_H
#define __EVAL_H
+#include "value.hh"
#include "nixexpr.hh"
#include "symbol-table.hh"
#include "hash.hh"
@@ -16,8 +17,6 @@ namespace nix {
class EvalState;
-struct Env;
-struct Value;
struct Attr;
@@ -38,23 +37,6 @@ public:
};
-typedef enum {
- tInt = 1,
- tBool,
- tString,
- tPath,
- tNull,
- tAttrs,
- tList,
- tThunk,
- tApp,
- tLambda,
- tBlackhole,
- tPrimOp,
- tPrimOpApp,
-} ValueType;
-
-
typedef void (* PrimOpFun) (EvalState & state, Value * * args, Value & v);
@@ -68,64 +50,6 @@ struct PrimOp
};
-struct Value
-{
- ValueType type;
- union
- {
- int integer;
- bool boolean;
-
- /* Strings in the evaluator carry a so-called `context' (the
- ATermList) which is a list of strings representing store
- paths. This is to allow users to write things like
-
- "--with-freetype2-library=" + freetype + "/lib"
-
- where `freetype' is a derivation (or a source to be copied
- to the store). If we just concatenated the strings without
- keeping track of the referenced store paths, then if the
- string is used as a derivation attribute, the derivation
- will not have the correct dependencies in its inputDrvs and
- inputSrcs.
-
- The semantics of the context is as follows: when a string
- with context C is used as a derivation attribute, then the
- derivations in C will be added to the inputDrvs of the
- derivation, and the other store paths in C will be added to
- the inputSrcs of the derivations.
-
- For canonicity, the store paths should be in sorted order. */
- struct {
- const char * s;
- const char * * context; // must be in sorted order
- } string;
-
- const char * path;
- Bindings * attrs;
- struct {
- unsigned int length;
- Value * * elems;
- } list;
- struct {
- Env * env;
- Expr * expr;
- } thunk;
- struct {
- Value * left, * right;
- } app;
- struct {
- Env * env;
- ExprLambda * fun;
- } lambda;
- PrimOp * primOp;
- struct {
- Value * left, * right;
- } primOpApp;
- };
-};
-
-
struct Env
{
Env * up;
@@ -149,41 +73,7 @@ struct Attr
};
-/* After overwriting an app node, be sure to clear pointers in the
- Value to ensure that the target isn't kept alive unnecessarily. */
-static inline void clearValue(Value & v)
-{
- v.app.right = 0;
-}
-
-
-static inline void mkInt(Value & v, int n)
-{
- clearValue(v);
- v.type = tInt;
- v.integer = n;
-}
-
-
-static inline void mkBool(Value & v, bool b)
-{
- clearValue(v);
- v.type = tBool;
- v.boolean = b;
-}
-
-
-static inline void mkApp(Value & v, Value & left, Value & right)
-{
- v.type = tApp;
- v.app.left = &left;
- v.app.right = &right;
-}
-
-
-void mkString(Value & v, const char * s);
void mkString(Value & v, const string & s, const PathSet & context = PathSet());
-void mkPath(Value & v, const char * s);
void copyContext(const Value & v, PathSet & context);