aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2014-04-04 18:58:15 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2014-04-04 18:59:29 +0200
commitb62d36963c45ccaebb328fceaf0bb40f9c02a14b (patch)
treed33902351ffed1c44fffb4acdc31938626da2795 /src
parentc28de6d96e7bfea834a44deac5217d4696fa8d86 (diff)
forceInt: Show position info
Diffstat (limited to 'src')
-rw-r--r--src/libexpr/eval.cc4
-rw-r--r--src/libexpr/eval.hh2
-rw-r--r--src/libexpr/primops.cc16
3 files changed, 11 insertions, 11 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index 3a2a84916..0be1e7349 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -1151,11 +1151,11 @@ void EvalState::strictForceValue(Value & v)
}
-NixInt EvalState::forceInt(Value & v)
+NixInt EvalState::forceInt(Value & v, const Pos & pos)
{
forceValue(v);
if (v.type != tInt)
- throwTypeError("value is %1% while an integer was expected", v);
+ throwTypeError("value is %1% while an integer was expected, at %2%", v, pos);
return v.integer;
}
diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh
index e69b8455e..0a424ddb9 100644
--- a/src/libexpr/eval.hh
+++ b/src/libexpr/eval.hh
@@ -158,7 +158,7 @@ public:
void strictForceValue(Value & v);
/* Force `v', and then verify that it has the expected type. */
- NixInt forceInt(Value & v);
+ NixInt forceInt(Value & v, const Pos & pos);
bool forceBool(Value & v);
inline void forceAttrs(Value & v);
inline void forceList(Value & v);
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 403edefab..b33b76bca 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -954,7 +954,7 @@ static void elemAt(EvalState & state, const Pos & pos, Value & list, int n, Valu
/* Return the n-1'th element of a list. */
static void prim_elemAt(EvalState & state, const Pos & pos, Value * * args, Value & v)
{
- elemAt(state, pos, *args[0], state.forceInt(*args[1]), v);
+ elemAt(state, pos, *args[0], state.forceInt(*args[1], pos), v);
}
@@ -1061,27 +1061,27 @@ static void prim_length(EvalState & state, const Pos & pos, Value * * args, Valu
static void prim_add(EvalState & state, const Pos & pos, Value * * args, Value & v)
{
- mkInt(v, state.forceInt(*args[0]) + state.forceInt(*args[1]));
+ mkInt(v, state.forceInt(*args[0], pos) + state.forceInt(*args[1], pos));
}
static void prim_sub(EvalState & state, const Pos & pos, Value * * args, Value & v)
{
- mkInt(v, state.forceInt(*args[0]) - state.forceInt(*args[1]));
+ mkInt(v, state.forceInt(*args[0], pos) - state.forceInt(*args[1], pos));
}
static void prim_mul(EvalState & state, const Pos & pos, Value * * args, Value & v)
{
- mkInt(v, state.forceInt(*args[0]) * state.forceInt(*args[1]));
+ mkInt(v, state.forceInt(*args[0], pos) * state.forceInt(*args[1], pos));
}
static void prim_div(EvalState & state, const Pos & pos, Value * * args, Value & v)
{
- NixInt i2 = state.forceInt(*args[1]);
+ NixInt i2 = state.forceInt(*args[1], pos);
if (i2 == 0) throw EvalError(format("division by zero, at %1%") % pos);
- mkInt(v, state.forceInt(*args[0]) / i2);
+ mkInt(v, state.forceInt(*args[0], pos) / i2);
}
@@ -1116,8 +1116,8 @@ static void prim_toString(EvalState & state, const Pos & pos, Value * * args, Va
non-negative. */
static void prim_substring(EvalState & state, const Pos & pos, Value * * args, Value & v)
{
- int start = state.forceInt(*args[0]);
- int len = state.forceInt(*args[1]);
+ int start = state.forceInt(*args[0], pos);
+ int len = state.forceInt(*args[1], pos);
PathSet context;
string s = state.coerceToString(*args[2], context);