am 7e8586fc: Merge "Convert to C++ Bison output"

* commit '7e8586fc1e40e7d860b05757882c3617df968fb8':
  Convert to C++ Bison output
diff --git a/tools/aidl/aidl_language.cpp b/tools/aidl/aidl_language.cpp
index 5252920..e2540658 100644
--- a/tools/aidl/aidl_language.cpp
+++ b/tools/aidl/aidl_language.cpp
@@ -1,4 +1,5 @@
 #include "aidl_language.h"
+#include "aidl_language_y.hpp"
 #include <stdio.h>
 #include <stdlib.h>
 #include <string>
@@ -74,7 +75,7 @@
 }
 
 int ParseState::RunParser() {
-  int ret = yyparse(this);
+  int ret = yy::parser(this).parse();
 
   free((void *)g_currentPackage);
   g_currentPackage = NULL;
diff --git a/tools/aidl/aidl_language_l.l b/tools/aidl/aidl_language_l.l
index 953e370..b8e53a8 100644
--- a/tools/aidl/aidl_language_l.l
+++ b/tools/aidl/aidl_language_l.l
@@ -1,6 +1,6 @@
 %{
 #include "aidl_language.h"
-#include "aidl_language_y.h"
+#include "aidl_language_y.hpp"
 #include "search_path.h"
 #include <string.h>
 #include <stdlib.h>
@@ -39,6 +39,7 @@
 %option noyywrap
 %option reentrant
 %option bison-bridge
+%option bison-locations
 
 %x COPYING LONG_COMMENT
 
@@ -65,13 +66,13 @@
 <LONG_COMMENT>\**\/             { BEGIN(INITIAL); }
 
 ^{whitespace}?import{whitespace}[^ \t\r\n]+{whitespace}?;  {
-                                                SET_BUFFER(IMPORT);
-                                                return IMPORT;
+                                                SET_BUFFER(yy::parser::token::IMPORT);
+                                                return yy::parser::token::IMPORT;
                                             }
 ^{whitespace}?package{whitespace}[^ \t\r\n]+{whitespace}?;  {
                                                 do_package_statement(yytext);
-                                                SET_BUFFER(PACKAGE);
-                                                return PACKAGE;
+                                                SET_BUFFER(yy::parser::token::PACKAGE);
+                                                return yy::parser::token::PACKAGE;
                                             }
 <<EOF>>             { yyterminate(); }
 
@@ -90,25 +91,25 @@
 =               { SET_BUFFER('='); return '='; }
 
     /* keywords */
-parcelable      { SET_BUFFER(PARCELABLE); return PARCELABLE; }
-interface       { SET_BUFFER(INTERFACE); return INTERFACE; }
-in              { SET_BUFFER(IN); return IN; }
-out             { SET_BUFFER(OUT); return OUT; }
-inout           { SET_BUFFER(INOUT); return INOUT; }
-oneway          { SET_BUFFER(ONEWAY); return ONEWAY; }
+parcelable      { SET_BUFFER(yy::parser::token::PARCELABLE); return yy::parser::token::PARCELABLE; }
+interface       { SET_BUFFER(yy::parser::token::INTERFACE); return yy::parser::token::INTERFACE; }
+in              { SET_BUFFER(yy::parser::token::IN); return yy::parser::token::IN; }
+out             { SET_BUFFER(yy::parser::token::OUT); return yy::parser::token::OUT; }
+inout           { SET_BUFFER(yy::parser::token::INOUT); return yy::parser::token::INOUT; }
+oneway          { SET_BUFFER(yy::parser::token::ONEWAY); return yy::parser::token::ONEWAY; }
 
-{brackets}+     { SET_BUFFER(ARRAY); return ARRAY; }
-{idvalue}       { SET_BUFFER(IDVALUE); return IDVALUE; }
-{identifier}                                        { SET_BUFFER(IDENTIFIER); return IDENTIFIER; }
+{brackets}+     { SET_BUFFER(yy::parser::token::ARRAY); return yy::parser::token::ARRAY; }
+{idvalue}       { SET_BUFFER(yy::parser::token::IDVALUE); return yy::parser::token::IDVALUE; }
+{identifier}                                        { SET_BUFFER(yy::parser::token::IDENTIFIER); return yy::parser::token::IDENTIFIER; }
 {identifier}\<{whitespace}*{identifier}({whitespace}*,{whitespace}*{identifier})*{whitespace}*\>    {
-                                                      SET_BUFFER(GENERIC); return GENERIC; }
+                                                      SET_BUFFER(yy::parser::token::GENERIC); return yy::parser::token::GENERIC; }
 
     /* syntax error! */
 .               { printf("UNKNOWN(%s)", yytext);
                   yylval->buffer.lineno = yylineno;
-                  yylval->buffer.token = IDENTIFIER;
+                  yylval->buffer.token = yy::parser::token::IDENTIFIER;
                   yylval->buffer.data = strdup(yytext);
-                  return IDENTIFIER;
+                  return yy::parser::token::IDENTIFIER;
                 }
 
 %%
diff --git a/tools/aidl/aidl_language_y.y b/tools/aidl/aidl_language_y.y
index 90fd58c..7a2b785 100644
--- a/tools/aidl/aidl_language_y.y
+++ b/tools/aidl/aidl_language_y.y
@@ -1,26 +1,23 @@
 %{
 #include "aidl_language.h"
+#include "aidl_language_y.hpp"
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
-int yyerror(ParseState* ps, char* errstr)
-{
-  ps->ReportError(errstr);
-  return 1;
-}
-
-int yylex(lexer_type *, void *);
+int yylex(lexer_type *, yy::parser::location_type *l, void *);
 
 static int count_brackets(const char*);
 
-#define YYLEX_PARAM ps->Scanner()
+#define lex_scanner ps->Scanner()
 
 %}
 
 %parse-param { ParseState* ps }
+%lex-param { void *lex_scanner }
 
 %pure-parser
+%skeleton "glr.cc"
 
 %token IMPORT
 %token PACKAGE
@@ -339,3 +336,8 @@
     }
     return n;
 }
+
+void yy::parser::error(const yy::parser::location_type& l, const std::string& errstr)
+{
+  ps->ReportError(errstr);
+}