diff options
author | Ben Gruver <bgruv@google.com> | 2011-11-19 17:51:58 -0800 |
---|---|---|
committer | = <bgruv@google.com> | 2011-11-20 15:47:49 -0800 |
commit | 4a5692f8275048c564abc617b91ae72bb008fcca (patch) | |
tree | bd8e6cb550c32eac1309d22ed15dfee45fa489ac /smali/src | |
parent | c8de336727bfe8e56998332fe97ad5c0e32e50fa (diff) | |
download | smali-4a5692f8275048c564abc617b91ae72bb008fcca.tar.gz |
Add support for the return-void-barrier odex instruction
Diffstat (limited to 'smali/src')
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") |