aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libexpr/lexer.l8
-rw-r--r--src/libexpr/value.hh2
2 files changed, 7 insertions, 3 deletions
diff --git a/src/libexpr/lexer.l b/src/libexpr/lexer.l
index 29ca327c1..a052447d3 100644
--- a/src/libexpr/lexer.l
+++ b/src/libexpr/lexer.l
@@ -12,6 +12,8 @@
%{
+#include <boost/lexical_cast.hpp>
+
#include "nixexpr.hh"
#include "parser-tab.hh"
@@ -124,9 +126,11 @@ or { return OR_KW; }
{ID} { yylval->id = strdup(yytext); return ID; }
{INT} { errno = 0;
- yylval->n = strtol(yytext, 0, 10);
- if (errno != 0)
+ try {
+ yylval->n = boost::lexical_cast<int64_t>(yytext);
+ } catch (const boost::bad_lexical_cast &) {
throw ParseError(format("invalid integer '%1%'") % yytext);
+ }
return INT;
}
{FLOAT} { errno = 0;
diff --git a/src/libexpr/value.hh b/src/libexpr/value.hh
index 809772f7c..e1ec87d3b 100644
--- a/src/libexpr/value.hh
+++ b/src/libexpr/value.hh
@@ -43,7 +43,7 @@ class XMLWriter;
class JSONPlaceholder;
-typedef long NixInt;
+typedef int64_t NixInt;
typedef double NixFloat;
/* External values must descend from ExternalValueBase, so that