* Allow integer bindings in derivations.

This commit is contained in:
Eelco Dolstra 2003-11-25 12:05:48 +00:00
parent d1d87badf6
commit 6e8c19714a
4 changed files with 25 additions and 1 deletions

View file

@ -127,6 +127,7 @@ Expr evalExpr2(EvalState & state, Expr e)
if (atMatch(m, e) >> "Str" || if (atMatch(m, e) >> "Str" ||
atMatch(m, e) >> "Path" || atMatch(m, e) >> "Path" ||
atMatch(m, e) >> "Uri" || atMatch(m, e) >> "Uri" ||
atMatch(m, e) >> "Int" ||
atMatch(m, e) >> "Bool" || atMatch(m, e) >> "Bool" ||
atMatch(m, e) >> "Function" || atMatch(m, e) >> "Function" ||
atMatch(m, e) >> "Attrs" || atMatch(m, e) >> "Attrs" ||

View file

@ -89,6 +89,13 @@ static string processBinding(EvalState & state, Expr e, StoreExpr & ne)
if (atMatch(m, e) >> "Bool" >> "True") return "1"; if (atMatch(m, e) >> "Bool" >> "True") return "1";
if (atMatch(m, e) >> "Bool" >> "False") return ""; if (atMatch(m, e) >> "Bool" >> "False") return "";
int n;
if (atMatch(m, e) >> "Int" >> n) {
ostringstream st;
st << n;
return st.str();
}
if (atMatch(m, e) >> "Attrs" >> es) { if (atMatch(m, e) >> "Attrs" >> es) {
Expr a = queryAttr(e, "type"); Expr a = queryAttr(e, "type");
if (a && evalString(state, a) == "derivation") { if (a && evalString(state, a) == "derivation") {

View file

@ -81,6 +81,18 @@ ATMatcher & operator >> (ATMatcher & pos, const string & s)
} }
ATMatcher & operator >> (ATMatcher & pos, int & n)
{
n = 0;
ATerm t;
pos = pos >> t;
if (failed(pos)) return pos;
if (ATgetType(t) != AT_INT) return fail(pos);
n = ATgetInt((ATermInt) t);
return pos;
}
ATMatcher & operator >> (ATMatcher & pos, ATermList & out) ATMatcher & operator >> (ATMatcher & pos, ATermList & out)
{ {
out = 0; out = 0;

View file

@ -61,7 +61,7 @@ ATMatcher & atMatch(ATMatcher & pos, ATerm t);
/* Get the next argument of an application. */ /* Get the next argument of an application. */
ATMatcher & operator >> (ATMatcher & pos, ATerm & out); ATMatcher & operator >> (ATMatcher & pos, ATerm & out);
/* Get the name of the function symbol of an applicatin, or the next /* Get the name of the function symbol of an application, or the next
argument of an application as a string. */ argument of an application as a string. */
ATMatcher & operator >> (ATMatcher & pos, string & out); ATMatcher & operator >> (ATMatcher & pos, string & out);
@ -69,6 +69,10 @@ ATMatcher & operator >> (ATMatcher & pos, string & out);
string. */ string. */
ATMatcher & operator >> (ATMatcher & pos, const string & s); ATMatcher & operator >> (ATMatcher & pos, const string & s);
/* Get the next argument of an application, and verify that it is a
integer. */
ATMatcher & operator >> (ATMatcher & pos, int & n);
/* Get the next argument of an application, and verify that it is a /* Get the next argument of an application, and verify that it is a
list. */ list. */
ATMatcher & operator >> (ATMatcher & pos, ATermList & out); ATMatcher & operator >> (ATMatcher & pos, ATermList & out);