summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libexpr/lexer.l1
-rw-r--r--src/libexpr/parser.y15
2 files changed, 14 insertions, 2 deletions
diff --git a/src/libexpr/lexer.l b/src/libexpr/lexer.l
index 625e044b68..5db13a7169 100644
--- a/src/libexpr/lexer.l
+++ b/src/libexpr/lexer.l
@@ -10,6 +10,7 @@
 #include "aterm.hh"
 #include "nixexpr.hh"
 #include "nixexpr-ast.hh"
+#define BISON_HEADER_HACK
 #include "parser-tab.hh"
 
 using namespace nix;
diff --git a/src/libexpr/parser.y b/src/libexpr/parser.y
index dd4d509a45..e4b220e04f 100644
--- a/src/libexpr/parser.y
+++ b/src/libexpr/parser.y
@@ -2,12 +2,20 @@
 %pure-parser
 %locations
 %error-verbose
+%defines
+%no-lines
 %parse-param { yyscan_t scanner }
 %parse-param { ParseData * data }
 %lex-param { yyscan_t scanner }
 
 
 %{
+/* Newer versions of Bison copy the declarations below to
+   parser-tab.hh, which sucks bigtime since lexer.l doesn't want that
+   stuff.  So allow it to be excluded. */
+#ifndef BISON_HEADER_HACK
+#define BISON_HEADER_HACK
+    
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -75,7 +83,7 @@ static Pos makeCurPos(YYLTYPE * loc, ParseData * data)
 }
 
 
-void yyerror(YYLTYPE * loc, yyscan_t scanner, ParseData * data, char * error)
+void yyerror(YYLTYPE * loc, yyscan_t scanner, ParseData * data, const char * error)
 {
     data->error = (format("%1%, at `%2%':%3%:%4%")
         % error % data->path % loc->first_line % loc->first_column).str();
@@ -100,7 +108,10 @@ static void freeAndUnprotect(void * p)
 #define YYMALLOC mallocAndProtect
 #define YYFREE freeAndUnprotect
 
- 
+
+#endif
+
+
 %}
 
 %union {