diff options
author | Ben Gruver <bgruv@google.com> | 2011-11-19 14:43:26 -0800 |
---|---|---|
committer | = <bgruv@google.com> | 2011-11-20 15:46:40 -0800 |
commit | ea7afb02658cc72b5e7156f5dadc51b9c6c212b0 (patch) | |
tree | 9d3e1cc9f6fedb8db257434c7cda04e472fd2867 /smali | |
parent | 5967598d012839eb25d50d9fa63952ac802e05dd (diff) | |
download | smali-ea7afb02658cc72b5e7156f5dadc51b9c6c212b0.tar.gz |
Add support for the invoke-object-init/range opcode in ICS
Diffstat (limited to 'smali')
5 files changed, 14 insertions, 0 deletions
diff --git a/smali/src/main/antlr3/org/jf/smali/smaliLexer.g b/smali/src/main/antlr3/org/jf/smali/smaliLexer.g index 445c5ea8..d1984b1d 100644 --- a/smali/src/main/antlr3/org/jf/smali/smaliLexer.g +++ b/smali/src/main/antlr3/org/jf/smali/smaliLexer.g @@ -680,6 +680,9 @@ INSTRUCTION_FORMAT3rc_METHOD | 'invoke-static/range' | 'invoke-interface/range'; +INSTRUCTION_FORMAT3rc_METHOD_ODEX + : 'invoke-object-init/range'; + INSTRUCTION_FORMAT3rc_TYPE : 'filled-new-array/range'; diff --git a/smali/src/main/antlr3/org/jf/smali/smaliParser.g b/smali/src/main/antlr3/org/jf/smali/smaliParser.g index 53b3bc92..3dc77e85 100644 --- a/smali/src/main/antlr3/org/jf/smali/smaliParser.g +++ b/smali/src/main/antlr3/org/jf/smali/smaliParser.g @@ -827,6 +827,11 @@ instruction returns [int size] | //e.g. invoke-virtual/range {v25..v26}, java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; INSTRUCTION_FORMAT3rc_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA fully_qualified_method {$size = Format.Format3rc.size;} -> ^(I_STATEMENT_FORMAT3rc_METHOD[$start, "I_STATEMENT_FORMAT3rc_METHOD"] INSTRUCTION_FORMAT3rc_METHOD register_range fully_qualified_method) + | //e.g. invoke-object-init/range {p0}, Ljava/lang/Object;-><init>()V + INSTRUCTION_FORMAT3rc_METHOD_ODEX OPEN_BRACE register_list CLOSE_BRACE COMMA fully_qualified_method + { + throwOdexedInstructionException(input, $INSTRUCTION_FORMAT3rc_METHOD_ODEX.text); + } | //e.g. filled-new-array/range {v0..v6}, I INSTRUCTION_FORMAT3rc_TYPE OPEN_BRACE register_range CLOSE_BRACE COMMA nonvoid_type_descriptor {$size = Format.Format3rc.size;} -> ^(I_STATEMENT_FORMAT3rc_TYPE[$start, "I_STATEMENT_FORMAT3rc_TYPE"] INSTRUCTION_FORMAT3rc_TYPE register_range nonvoid_type_descriptor) diff --git a/smali/src/main/jflex/smaliLexer.flex b/smali/src/main/jflex/smaliLexer.flex index c374292b..ff72c3c1 100644 --- a/smali/src/main/jflex/smaliLexer.flex +++ b/smali/src/main/jflex/smaliLexer.flex @@ -550,6 +550,10 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayDescriptor} return newToken(INSTRUCTION_FORMAT3rc_METHOD); } + "invoke-object-init/range" { + return newToken(INSTRUCTION_FORMAT3rc_METHOD_ODEX); + } + "filled-new-array/range" { return newToken(INSTRUCTION_FORMAT3rc_TYPE); } diff --git a/smali/src/test/resources/LexerTest/InstructionTest.smali b/smali/src/test/resources/LexerTest/InstructionTest.smali index 778e3c30..d6207936 100644 --- a/smali/src/test/resources/LexerTest/InstructionTest.smali +++ b/smali/src/test/resources/LexerTest/InstructionTest.smali @@ -210,6 +210,7 @@ invoke-static invoke-interface filled-new-array invoke-direct-empty +invoke-object-init/range throw-verification-error execute-inline invoke-virtual-quick diff --git a/smali/src/test/resources/LexerTest/InstructionTest.tokens b/smali/src/test/resources/LexerTest/InstructionTest.tokens index 3388fa4e..7b4860c3 100644 --- a/smali/src/test/resources/LexerTest/InstructionTest.tokens +++ b/smali/src/test/resources/LexerTest/InstructionTest.tokens @@ -210,6 +210,7 @@ INSTRUCTION_FORMAT35c_METHOD("invoke-static") INSTRUCTION_FORMAT35c_METHOD("invoke-interface") INSTRUCTION_FORMAT35c_TYPE("filled-new-array") INSTRUCTION_FORMAT35s_METHOD("invoke-direct-empty") +INSTRUCTION_FORMAT3rc_METHOD_ODEX("invoke-object-init/range") INSTRUCTION_FORMAT20bc("throw-verification-error") INSTRUCTION_FORMAT35mi_METHOD("execute-inline") INSTRUCTION_FORMAT35ms_METHOD("invoke-virtual-quick") |