2003-10-30 16:48:26 +00:00
|
|
|
#ifndef __EVAL_H
|
|
|
|
#define __EVAL_H
|
|
|
|
|
|
|
|
#include <map>
|
|
|
|
|
2003-11-18 11:22:29 +00:00
|
|
|
#include "aterm.hh"
|
|
|
|
#include "hash.hh"
|
2003-11-18 12:06:07 +00:00
|
|
|
#include "nixexpr.hh"
|
2003-10-30 16:48:26 +00:00
|
|
|
|
|
|
|
|
2004-10-25 14:38:23 +00:00
|
|
|
typedef map<Path, PathSet> DrvRoots;
|
2003-10-31 17:09:31 +00:00
|
|
|
typedef map<Path, Hash> DrvHashes;
|
2003-10-30 16:48:26 +00:00
|
|
|
|
2006-03-09 15:09:18 +00:00
|
|
|
/* Cache for calls to addToStore(); maps source paths to the store
|
|
|
|
paths. */
|
|
|
|
typedef map<Path, Path> SrcToStore;
|
|
|
|
|
2004-02-04 16:03:29 +00:00
|
|
|
struct EvalState;
|
2004-08-04 10:59:20 +00:00
|
|
|
|
|
|
|
/* Note: using a ATermVector is safe here, since when we call a primop
|
|
|
|
we also have an ATermList on the stack. */
|
|
|
|
typedef Expr (* PrimOp) (EvalState &, const ATermVector & args);
|
2004-02-04 16:03:29 +00:00
|
|
|
|
|
|
|
|
2003-10-30 16:48:26 +00:00
|
|
|
struct EvalState
|
|
|
|
{
|
2003-11-03 20:30:40 +00:00
|
|
|
ATermMap normalForms;
|
2004-08-04 10:59:20 +00:00
|
|
|
ATermMap primOps;
|
2004-10-25 14:38:23 +00:00
|
|
|
DrvRoots drvRoots;
|
2003-10-31 17:09:31 +00:00
|
|
|
DrvHashes drvHashes; /* normalised derivation hashes */
|
2006-03-09 15:09:18 +00:00
|
|
|
SrcToStore srcToStore;
|
2003-10-30 16:48:26 +00:00
|
|
|
|
2003-10-31 17:09:31 +00:00
|
|
|
unsigned int nrEvaluated;
|
|
|
|
unsigned int nrCached;
|
|
|
|
|
2003-10-30 16:48:26 +00:00
|
|
|
EvalState();
|
2004-02-04 16:03:29 +00:00
|
|
|
|
2004-08-04 10:59:20 +00:00
|
|
|
void addPrimOps();
|
|
|
|
void addPrimOp(const string & name,
|
|
|
|
unsigned int arity, PrimOp primOp);
|
2003-10-30 16:48:26 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* Evaluate an expression to normal form. */
|
|
|
|
Expr evalExpr(EvalState & state, Expr e);
|
|
|
|
|
|
|
|
/* Evaluate an expression read from the given file to normal form. */
|
|
|
|
Expr evalFile(EvalState & state, const Path & path);
|
|
|
|
|
2003-10-31 17:09:31 +00:00
|
|
|
/* Specific results. */
|
|
|
|
string evalString(EvalState & state, Expr e);
|
|
|
|
Path evalPath(EvalState & state, Expr e);
|
2006-03-23 16:43:07 +00:00
|
|
|
bool evalBool(EvalState & state, Expr e);
|
2005-07-25 15:05:34 +00:00
|
|
|
ATermList evalList(EvalState & state, Expr e);
|
2006-03-10 16:20:42 +00:00
|
|
|
ATerm coerceToString(Expr e);
|
2003-10-31 17:09:31 +00:00
|
|
|
|
2006-05-01 09:56:56 +00:00
|
|
|
/* Contexts. */
|
|
|
|
string coerceToStringWithContext(EvalState & state,
|
|
|
|
ATermList & context, Expr e, bool & isPath);
|
|
|
|
Expr wrapInContext(ATermList context, Expr e);
|
|
|
|
|
2003-10-31 17:09:31 +00:00
|
|
|
/* Print statistics. */
|
|
|
|
void printEvalStats(EvalState & state);
|
|
|
|
|
2003-10-30 16:48:26 +00:00
|
|
|
|
|
|
|
#endif /* !__EVAL_H */
|