2003-10-30 17:48:26 +01:00
|
|
|
#ifndef __EVAL_H
|
|
|
|
#define __EVAL_H
|
|
|
|
|
|
|
|
#include <map>
|
|
|
|
|
2003-11-18 12:22:29 +01:00
|
|
|
#include "aterm.hh"
|
|
|
|
#include "hash.hh"
|
2003-11-18 13:06:07 +01:00
|
|
|
#include "nixexpr.hh"
|
2003-10-30 17:48:26 +01:00
|
|
|
|
|
|
|
|
2003-10-31 18:09:31 +01:00
|
|
|
typedef map<Path, PathSet> DrvPaths;
|
|
|
|
typedef map<Path, Hash> DrvHashes;
|
2003-10-30 17:48:26 +01:00
|
|
|
|
2004-02-04 17:03:29 +01:00
|
|
|
struct EvalState;
|
|
|
|
typedef Expr (* PrimOp0) (EvalState &);
|
|
|
|
typedef Expr (* PrimOp1) (EvalState &, Expr arg);
|
|
|
|
|
|
|
|
|
2003-10-30 17:48:26 +01:00
|
|
|
struct EvalState
|
|
|
|
{
|
2003-11-03 21:30:40 +01:00
|
|
|
ATermMap normalForms;
|
2004-02-04 17:03:29 +01:00
|
|
|
ATermMap primOps0; /* nullary primops */
|
|
|
|
ATermMap primOps1; /* unary primops */
|
|
|
|
ATermMap primOpsAll;
|
2003-10-31 18:09:31 +01:00
|
|
|
DrvPaths drvPaths;
|
|
|
|
DrvHashes drvHashes; /* normalised derivation hashes */
|
2003-10-30 17:48:26 +01:00
|
|
|
Expr blackHole;
|
|
|
|
|
2003-10-31 18:09:31 +01:00
|
|
|
unsigned int nrEvaluated;
|
|
|
|
unsigned int nrCached;
|
|
|
|
|
2003-10-30 17:48:26 +01:00
|
|
|
EvalState();
|
2004-02-04 17:03:29 +01:00
|
|
|
|
|
|
|
void addPrimOp0(const string & name, PrimOp0 primOp);
|
|
|
|
void addPrimOp1(const string & name, PrimOp1 primOp);
|
2003-10-30 17:48:26 +01: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 18:09:31 +01:00
|
|
|
/* Specific results. */
|
|
|
|
string evalString(EvalState & state, Expr e);
|
|
|
|
Path evalPath(EvalState & state, Expr e);
|
|
|
|
|
|
|
|
/* Print statistics. */
|
|
|
|
void printEvalStats(EvalState & state);
|
|
|
|
|
2003-10-30 17:48:26 +01:00
|
|
|
|
|
|
|
#endif /* !__EVAL_H */
|