lix-releng-staging/src/libexpr/nixexpr.hh

72 lines
1.6 KiB
C++
Raw Normal View History

#ifndef __NIXEXPR_H
#define __NIXEXPR_H
2003-10-30 16:11:24 +00:00
#include <map>
2006-05-04 12:21:08 +00:00
#include "aterm-map.hh"
#include "types.hh"
namespace nix {
2003-10-30 16:11:24 +00:00
MakeError(EvalError, Error)
MakeError(ParseError, Error)
MakeError(AssertionError, EvalError)
MakeError(ThrownError, AssertionError)
2006-08-23 15:46:00 +00:00
MakeError(Abort, EvalError)
MakeError(TypeError, EvalError)
/* Nix expressions are represented as ATerms. The maximal sharing
2003-10-30 16:11:24 +00:00
property of the ATerm library allows us to implement caching of
normals forms efficiently. */
typedef ATerm Expr;
typedef ATerm DefaultValue;
typedef ATerm Pos;
typedef ATerm Pattern;
typedef ATerm ATermBool;
2003-10-30 16:11:24 +00:00
/* A STL vector of ATerms. Should be used with great care since it's
stored on the heap, and the elements are therefore not roots to the
ATerm garbage collector. */
typedef vector<ATerm> ATermVector;
/* Show a position. */
string showPos(ATerm pos);
2010-04-08 11:41:19 +00:00
2003-10-30 16:11:24 +00:00
/* Generic bottomup traversal over ATerms. The traversal first
recursively descends into subterms, and then applies the given term
function to the resulting term. */
struct TermFun
{
2006-09-20 16:36:29 +00:00
virtual ~TermFun() { }
2003-10-30 16:11:24 +00:00
virtual ATerm operator () (ATerm e) = 0;
};
ATerm bottomupRewrite(TermFun & f, ATerm e);
/* Create an attribute set expression from an Attrs value. */
Expr makeAttrs(const ATermMap & attrs);
/* Check whether all variables are defined in the given expression.
Throw an exception if this isn't the case. */
void checkVarDefs(const ATermMap & def, Expr e);
/* Manipulation of Str() nodes. Note: matchStr() does not clear
context! */
bool matchStr(Expr e, string & s, PathSet & context);
Expr makeStr(const string & s, const PathSet & context = PathSet());
}
2003-10-30 16:11:24 +00:00
#endif /* !__NIXEXPR_H */