aboutsummaryrefslogtreecommitdiff
path: root/smali
diff options
context:
space:
mode:
authorBen Gruver <bgruv@google.com>2015-03-01 13:26:25 -0800
committerBen Gruver <bgruv@google.com>2015-03-04 20:56:53 -0800
commit06d108d791ea155c7ac7422f05e19c509b59788a (patch)
treeae80377a7e03ac5f7127f76f79888e04734299b7 /smali
parentff7172c68dfb070bb6993c17ad21ff1336db80ee (diff)
downloadsmali-06d108d791ea155c7ac7422f05e19c509b59788a.tar.gz
Refactor how the PARAM_LIST_OR_ID thing is parsed
This gets rids of the empty placeholder tokens, which cause errors in IDEA's built-in lexer support code
Diffstat (limited to 'smali')
-rw-r--r--smali/src/main/antlr3/smaliParser.g7
-rw-r--r--smali/src/main/jflex/smaliLexer.flex8
-rw-r--r--smali/src/test/resources/LexerTest/TypeAndIdentifierTest.tokens38
3 files changed, 23 insertions, 30 deletions
diff --git a/smali/src/main/antlr3/smaliParser.g b/smali/src/main/antlr3/smaliParser.g
index 0e8c2aa4..bf84af43 100644
--- a/smali/src/main/antlr3/smaliParser.g
+++ b/smali/src/main/antlr3/smaliParser.g
@@ -131,8 +131,7 @@ tokens {
PACKED_SWITCH_DIRECTIVE;
PARAM_LIST_END;
PARAM_LIST_START;
- PARAM_LIST_OR_ID_END;
- PARAM_LIST_OR_ID_START;
+ PARAM_LIST_OR_ID_PRIMITIVE_TYPE;
PARAMETER_DIRECTIVE;
POSITIVE_INTEGER_LITERAL;
PRIMITIVE_TYPE;
@@ -529,7 +528,7 @@ registers_directive
};
param_list_or_id
- : PARAM_LIST_OR_ID_START PRIMITIVE_TYPE+ PARAM_LIST_OR_ID_END;
+ : PARAM_LIST_OR_ID_PRIMITIVE_TYPE+;
/*identifiers are much more general than most languages. Any of the below can either be
the indicated type OR an identifier, depending on the context*/
@@ -584,7 +583,7 @@ method_prototype
param_list
: PARAM_LIST_START nonvoid_type_descriptor* PARAM_LIST_END -> nonvoid_type_descriptor*
- | PARAM_LIST_OR_ID_START PRIMITIVE_TYPE* PARAM_LIST_OR_ID_END -> PRIMITIVE_TYPE*
+ | (PARAM_LIST_OR_ID_PRIMITIVE_TYPE -> PRIMITIVE_TYPE[$PARAM_LIST_OR_ID_PRIMITIVE_TYPE])+
| nonvoid_type_descriptor*;
array_descriptor
diff --git a/smali/src/main/jflex/smaliLexer.flex b/smali/src/main/jflex/smaliLexer.flex
index 2849ab89..9c4a3c3a 100644
--- a/smali/src/main/jflex/smaliLexer.flex
+++ b/smali/src/main/jflex/smaliLexer.flex
@@ -307,9 +307,9 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} |
}
<PARAM_LIST_OR_ID> {
- {PrimitiveType} { return newToken(PRIMITIVE_TYPE); }
- [^] { yypushback(1); yybegin(YYINITIAL); return newToken(PARAM_LIST_OR_ID_END); }
- <<EOF>> { yybegin(YYINITIAL); return newToken(PARAM_LIST_OR_ID_END); }
+ {PrimitiveType} { return newToken(PARAM_LIST_OR_ID_PRIMITIVE_TYPE); }
+ [^] { yypushback(1); yybegin(YYINITIAL); }
+ <<EOF>> { yybegin(YYINITIAL); }
}
<PARAM_LIST> {
@@ -632,9 +632,9 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} |
}
{PrimitiveType} {PrimitiveType}+ {
+ // go back and re-lex it as a PARAM_LIST_OR_ID
yypushback(yylength());
yybegin(PARAM_LIST_OR_ID);
- return newToken(PARAM_LIST_OR_ID_START);
}
{Type} {Type}+ {
diff --git a/smali/src/test/resources/LexerTest/TypeAndIdentifierTest.tokens b/smali/src/test/resources/LexerTest/TypeAndIdentifierTest.tokens
index 03e79f03..0e850f4a 100644
--- a/smali/src/test/resources/LexerTest/TypeAndIdentifierTest.tokens
+++ b/smali/src/test/resources/LexerTest/TypeAndIdentifierTest.tokens
@@ -38,24 +38,20 @@ CLASS_DESCRIPTOR("LI/I/I;")
ARRAY_TYPE_PREFIX("[[")
PRIMITIVE_TYPE("I")
-PARAM_LIST_OR_ID_START("")
-PRIMITIVE_TYPE("I")
-PRIMITIVE_TYPE("I")
-PRIMITIVE_TYPE("I")
-PRIMITIVE_TYPE("I")
-PRIMITIVE_TYPE("I")
-PARAM_LIST_OR_ID_END("")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I")
-PARAM_LIST_OR_ID_START("")
-PRIMITIVE_TYPE("Z")
-PRIMITIVE_TYPE("B")
-PRIMITIVE_TYPE("S")
-PRIMITIVE_TYPE("C")
-PRIMITIVE_TYPE("I")
-PRIMITIVE_TYPE("J")
-PRIMITIVE_TYPE("F")
-PRIMITIVE_TYPE("D")
-PARAM_LIST_OR_ID_END("")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("Z")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("B")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("S")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("C")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("J")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("F")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("D")
PARAM_LIST_START("")
PRIMITIVE_TYPE("I")
@@ -111,11 +107,9 @@ ARRAY_TYPE_PREFIX("[") INVALID_TOKEN(";")
MEMBER_NAME("<linit>")
-PARAM_LIST_OR_ID_START("")
-PRIMITIVE_TYPE("I")
-PRIMITIVE_TYPE("I")
-PRIMITIVE_TYPE("I")
-PARAM_LIST_OR_ID_END("")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I")
+PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I")
ARRAY_TYPE_PREFIX("[")
PRIMITIVE_TYPE("I")