aboutsummaryrefslogtreecommitdiff
path: root/smali
diff options
context:
space:
mode:
authorBen Gruver <bgruv@google.com>2011-11-19 14:43:26 -0800
committer= <bgruv@google.com>2011-11-20 15:46:40 -0800
commitea7afb02658cc72b5e7156f5dadc51b9c6c212b0 (patch)
tree9d3e1cc9f6fedb8db257434c7cda04e472fd2867 /smali
parent5967598d012839eb25d50d9fa63952ac802e05dd (diff)
downloadsmali-ea7afb02658cc72b5e7156f5dadc51b9c6c212b0.tar.gz
Add support for the invoke-object-init/range opcode in ICS
Diffstat (limited to 'smali')
-rw-r--r--smali/src/main/antlr3/org/jf/smali/smaliLexer.g3
-rw-r--r--smali/src/main/antlr3/org/jf/smali/smaliParser.g5
-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, 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")