Merge "Error message for incorrect FQNames."
diff --git a/hidl-gen_l.ll b/hidl-gen_l.ll
index 5dd3c85..5945df9 100644
--- a/hidl-gen_l.ll
+++ b/hidl-gen_l.ll
@@ -23,9 +23,9 @@
COMPONENT {L}({L}|{D})*
DOT [.]
-PATH {COMPONENT}({DOT}{COMPONENT})*
AT [@]
VERSION {AT}{D}+{DOT}{D}+
+FQNAME ({COMPONENT}|{VERSION})(({DOT}|":"+){COMPONENT}|{VERSION})*
%{
@@ -157,15 +157,8 @@
"?" { return('?'); }
"@" { return('@'); }
-{PATH}{VERSION}"::"{PATH} { yylval->str = strdup(yytext); return token::FQNAME; }
-{VERSION}"::"{PATH} { yylval->str = strdup(yytext); return token::FQNAME; }
-{PATH}{VERSION} { yylval->str = strdup(yytext); return token::FQNAME; }
-{COMPONENT}({DOT}{COMPONENT})+ { yylval->str = strdup(yytext); return token::FQNAME; }
{COMPONENT} { yylval->str = strdup(yytext); return token::IDENTIFIER; }
-
-{PATH}{VERSION}"::"{PATH}":"{COMPONENT} { yylval->str = strdup(yytext); return token::FQNAME; }
-{VERSION}"::"{PATH}":"{COMPONENT} { yylval->str = strdup(yytext); return token::FQNAME; }
-{PATH}":"{COMPONENT} { yylval->str = strdup(yytext); return token::FQNAME; }
+{FQNAME} { yylval->str = strdup(yytext); return token::FQNAME; }
0[xX]{H}+{IS}? { yylval->str = strdup(yytext); return token::INTEGER; }
0{D}+{IS}? { yylval->str = strdup(yytext); return token::INTEGER; }
diff --git a/hidl-gen_y.yy b/hidl-gen_y.yy
index 56bb605..35f7405 100644
--- a/hidl-gen_y.yy
+++ b/hidl-gen_y.yy
@@ -904,7 +904,9 @@
$$ = $2;
if ($$ != NULL && !$$->isValidEnumStorageType()) {
- std::cerr << "ERROR: Invalid enum storage type specified. at "
+ std::cerr << "ERROR: Invalid enum storage type ("
+ << $2->typeName()
+ << ") specified. at "
<< @2 << "\n";
YYERROR;
diff --git a/main.cpp b/main.cpp
index 7c529a9..b7d5a96 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1367,6 +1367,12 @@
argc -= optind;
argv += optind;
+ if (argc == 0) {
+ fprintf(stderr, "ERROR: no fqname specified.\n");
+ usage(me);
+ exit(1);
+ }
+
if (rootPath.empty()) {
const char *ANDROID_BUILD_TOP = getenv("ANDROID_BUILD_TOP");