aboutsummaryrefslogtreecommitdiff
path: root/smali/src
diff options
context:
space:
mode:
authorBen Gruver <bgruv@google.com>2011-11-19 17:51:58 -0800
committer= <bgruv@google.com>2011-11-20 15:47:49 -0800
commit4a5692f8275048c564abc617b91ae72bb008fcca (patch)
treebd8e6cb550c32eac1309d22ed15dfee45fa489ac /smali/src
parentc8de336727bfe8e56998332fe97ad5c0e32e50fa (diff)
downloadsmali-4a5692f8275048c564abc617b91ae72bb008fcca.tar.gz
Add support for the return-void-barrier odex instruction
Diffstat (limited to 'smali/src')
-rw-r--r--smali/src/main/antlr3/org/jf/smali/smaliLexer.g3
-rw-r--r--smali/src/main/antlr3/org/jf/smali/smaliParser.g8
-rw-r--r--smali/src/main/jflex/smaliLexer.flex4
-rw-r--r--smali/src/test/resources/LexerTest/InstructionTest.smali1
-rw-r--r--smali/src/test/resources/LexerTest/InstructionTest.tokens1
5 files changed, 16 insertions, 1 deletions
diff --git a/smali/src/main/antlr3/org/jf/smali/smaliLexer.g b/smali/src/main/antlr3/org/jf/smali/smaliLexer.g
index 8cb499c2..84cfb65e 100644
--- a/smali/src/main/antlr3/org/jf/smali/smaliLexer.g
+++ b/smali/src/main/antlr3/org/jf/smali/smaliLexer.g
@@ -373,6 +373,9 @@ INSTRUCTION_FORMAT10x
: 'return-void'
| 'nop';
+INSTRUCTION_FORMAT10x_ODEX
+ : 'return-void-barrier';
+
INSTRUCTION_FORMAT11n
: 'const/4';
diff --git a/smali/src/main/antlr3/org/jf/smali/smaliParser.g b/smali/src/main/antlr3/org/jf/smali/smaliParser.g
index 0eb834d1..3fb50d0f 100644
--- a/smali/src/main/antlr3/org/jf/smali/smaliParser.g
+++ b/smali/src/main/antlr3/org/jf/smali/smaliParser.g
@@ -446,6 +446,7 @@ simple_name
| ANNOTATION_VISIBILITY -> SIMPLE_NAME[$ANNOTATION_VISIBILITY]
| INSTRUCTION_FORMAT10t -> SIMPLE_NAME[$INSTRUCTION_FORMAT10t]
| INSTRUCTION_FORMAT10x -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x]
+ | INSTRUCTION_FORMAT10x_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT10x_ODEX]
| INSTRUCTION_FORMAT11x -> SIMPLE_NAME[$INSTRUCTION_FORMAT11x]
| INSTRUCTION_FORMAT12x_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT12x_OR_ID]
| INSTRUCTION_FORMAT21c_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD]
@@ -689,9 +690,14 @@ instruction returns [int size]
//e.g. goto +3
INSTRUCTION_FORMAT10t label_ref_or_offset {$size = Format.Format10t.size;}
-> ^(I_STATEMENT_FORMAT10t[$start, "I_STATEMENT_FORMAT10t"] INSTRUCTION_FORMAT10t label_ref_or_offset)
- | //e.g. return
+ | //e.g. return-void
INSTRUCTION_FORMAT10x {$size = Format.Format10x.size;}
-> ^(I_STATEMENT_FORMAT10x[$start, "I_STATEMENT_FORMAT10x"] INSTRUCTION_FORMAT10x)
+ | //e.g. return-void-barrier
+ INSTRUCTION_FORMAT10x_ODEX {$size = Format.Format10x.size;}
+ {
+ throwOdexedInstructionException(input, $INSTRUCTION_FORMAT10x_ODEX.text);
+ }
| //e.g. const/4 v0, 5
INSTRUCTION_FORMAT11n REGISTER COMMA integral_literal {$size = Format.Format11n.size;}
-> ^(I_STATEMENT_FORMAT11n[$start, "I_STATEMENT_FORMAT11n"] INSTRUCTION_FORMAT11n REGISTER integral_literal)
diff --git a/smali/src/main/jflex/smaliLexer.flex b/smali/src/main/jflex/smaliLexer.flex
index 79323de2..8ceec774 100644
--- a/smali/src/main/jflex/smaliLexer.flex
+++ b/smali/src/main/jflex/smaliLexer.flex
@@ -388,6 +388,10 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayDescriptor}
return newToken(INSTRUCTION_FORMAT10x);
}
+ "return-void-barrier" {
+ return newToken(INSTRUCTION_FORMAT10x_ODEX);
+ }
+
"const/4" {
return newToken(INSTRUCTION_FORMAT11n);
}
diff --git a/smali/src/test/resources/LexerTest/InstructionTest.smali b/smali/src/test/resources/LexerTest/InstructionTest.smali
index d6207936..7a85dce4 100644
--- a/smali/src/test/resources/LexerTest/InstructionTest.smali
+++ b/smali/src/test/resources/LexerTest/InstructionTest.smali
@@ -1,6 +1,7 @@
goto
return-void
nop
+return-void-barrier
const/4
move-result
move-result-wide
diff --git a/smali/src/test/resources/LexerTest/InstructionTest.tokens b/smali/src/test/resources/LexerTest/InstructionTest.tokens
index 9c649895..fb0014c3 100644
--- a/smali/src/test/resources/LexerTest/InstructionTest.tokens
+++ b/smali/src/test/resources/LexerTest/InstructionTest.tokens
@@ -1,6 +1,7 @@
INSTRUCTION_FORMAT10t("goto")
INSTRUCTION_FORMAT10x("return-void")
INSTRUCTION_FORMAT10x("nop")
+INSTRUCTION_FORMAT10x_ODEX("return-void-barrier")
INSTRUCTION_FORMAT11n("const/4")
INSTRUCTION_FORMAT11x("move-result")
INSTRUCTION_FORMAT11x("move-result-wide")