aboutsummaryrefslogtreecommitdiff
path: root/smali/src
diff options
context:
space:
mode:
authorBen Gruver <bgruv@google.com>2011-11-09 16:28:26 -0800
committerBen Gruver <jesusfreke@jesusfreke.com>2011-11-19 11:39:49 -0800
commitb0c62b9781751e4d04d2ddb4458940d545cc8bb2 (patch)
treed963038014fc14559d1b56f9d3d883079003265f /smali/src
parentbda056b7b0d4a5b51a71ce2ddad265e2c8e74a93 (diff)
downloadsmali-b0c62b9781751e4d04d2ddb4458940d545cc8bb2.tar.gz
Seperate out execute-inline and execute-inline/range into seperate 35mi and 3rmi formats
Diffstat (limited to 'smali/src')
-rw-r--r--smali/src/main/antlr3/org/jf/smali/smaliLexer.g17
-rw-r--r--smali/src/main/antlr3/org/jf/smali/smaliParser.g17
-rw-r--r--smali/src/main/jflex/smaliLexer.flex15
-rw-r--r--smali/src/test/resources/LexerTest/InstructionTest.smali1
-rw-r--r--smali/src/test/resources/LexerTest/InstructionTest.tokens3
-rw-r--r--smali/src/test/resources/LexerTest/MiscTest.smali7
-rw-r--r--smali/src/test/resources/LexerTest/MiscTest.tokens13
7 files changed, 58 insertions, 15 deletions
diff --git a/smali/src/main/antlr3/org/jf/smali/smaliLexer.g b/smali/src/main/antlr3/org/jf/smali/smaliLexer.g
index ceac9545..c07970ea 100644
--- a/smali/src/main/antlr3/org/jf/smali/smaliLexer.g
+++ b/smali/src/main/antlr3/org/jf/smali/smaliLexer.g
@@ -343,7 +343,10 @@ VERIFICATION_ERROR_TYPE
| 'class-change-error'
| 'instantiation-error';
-VTABLE_OFFSET
+INLINE_INDEX
+ : 'inline@0x' HEX_DIGIT+;
+
+VTABLE_INDEX
: 'vtable@0x' HEX_DIGIT+;
FIELD_OFFSET
@@ -663,9 +666,11 @@ INSTRUCTION_FORMAT35c_TYPE
INSTRUCTION_FORMAT35s_METHOD
: 'invoke-direct-empty';
+INSTRUCTION_FORMAT35mi_METHOD
+ : 'execute-inline';
+
INSTRUCTION_FORMAT35ms_METHOD
- : 'execute-inline'
- | 'invoke-virtual-quick'
+ : 'invoke-virtual-quick'
| 'invoke-super-quick';
INSTRUCTION_FORMAT3rc_METHOD
@@ -678,9 +683,11 @@ INSTRUCTION_FORMAT3rc_METHOD
INSTRUCTION_FORMAT3rc_TYPE
: 'filled-new-array/range';
+INSTRUCTION_FORMAT3rmi_METHOD
+ : 'execute-inline/range';
+
INSTRUCTION_FORMAT3rms_METHOD
- : 'execute-inline/range'
- | 'invoke-virtual-quick/range'
+ : 'invoke-virtual-quick/range'
| 'invoke-super-quick/range';
INSTRUCTION_FORMAT51l
diff --git a/smali/src/main/antlr3/org/jf/smali/smaliParser.g b/smali/src/main/antlr3/org/jf/smali/smaliParser.g
index 942b6ca6..e69e4111 100644
--- a/smali/src/main/antlr3/org/jf/smali/smaliParser.g
+++ b/smali/src/main/antlr3/org/jf/smali/smaliParser.g
@@ -459,6 +459,7 @@ simple_name
| INSTRUCTION_FORMAT35c_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD]
| INSTRUCTION_FORMAT35c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_TYPE]
| INSTRUCTION_FORMAT35s_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35s_METHOD]
+ | INSTRUCTION_FORMAT35mi_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35mi_METHOD]
| INSTRUCTION_FORMAT35ms_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35ms_METHOD]
| INSTRUCTION_FORMAT51l -> SIMPLE_NAME[$INSTRUCTION_FORMAT51l];
@@ -806,8 +807,13 @@ instruction returns [int size]
{
throwOdexedInstructionException(input, $INSTRUCTION_FORMAT35s_METHOD.text);
}
- | //e.g. invoke-virtual-range {v0, v1}, vtable@0x4
- INSTRUCTION_FORMAT35ms_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA VTABLE_OFFSET
+ | //e.g. execute-inline {v0, v1}, inline@0x4
+ INSTRUCTION_FORMAT35mi_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA INLINE_INDEX
+ {
+ throwOdexedInstructionException(input, $INSTRUCTION_FORMAT35mi_METHOD.text);
+ }
+ | //e.g. invoke-virtual-quick {v0, v1}, vtable@0x4
+ INSTRUCTION_FORMAT35ms_METHOD OPEN_BRACE register_list CLOSE_BRACE COMMA VTABLE_INDEX
{
throwOdexedInstructionException(input, $INSTRUCTION_FORMAT35ms_METHOD.text);
}
@@ -817,8 +823,13 @@ instruction returns [int size]
| //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)
+ | //e.g. execute-inline/range {v0 .. v10}, inline@0x14
+ INSTRUCTION_FORMAT3rmi_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA INLINE_INDEX
+ {
+ throwOdexedInstructionException(input, $INSTRUCTION_FORMAT3rmi_METHOD.text);
+ }
| //e.g. invoke-virtual-quick/range {v0 .. v10}, vtable@0x14
- INSTRUCTION_FORMAT3rms_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA VTABLE_OFFSET
+ INSTRUCTION_FORMAT3rms_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA VTABLE_INDEX
{
throwOdexedInstructionException(input, $INSTRUCTION_FORMAT3rms_METHOD.text);
}
diff --git a/smali/src/main/jflex/smaliLexer.flex b/smali/src/main/jflex/smaliLexer.flex
index ab1dca9b..8697b8d7 100644
--- a/smali/src/main/jflex/smaliLexer.flex
+++ b/smali/src/main/jflex/smaliLexer.flex
@@ -369,7 +369,8 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayDescriptor}
return newToken(VERIFICATION_ERROR_TYPE);
}
- "vtable@0x" {HexDigit}+ { return newToken(VTABLE_OFFSET); }
+ "inline@0x" {HexDigit}+ { return newToken(INLINE_INDEX); }
+ "vtable@0x" {HexDigit}+ { return newToken(VTABLE_INDEX); }
"field@0x" {HexDigit}+ { return newToken(FIELD_OFFSET); }
"+" {Integer} { return newToken(OFFSET); }
@@ -536,7 +537,11 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayDescriptor}
return newToken(INSTRUCTION_FORMAT35s_METHOD);
}
- "execute-inline" | "invoke-virtual-quick" | "invoke-super-quick" {
+ "execute-inline" {
+ return newToken(INSTRUCTION_FORMAT35mi_METHOD);
+ }
+
+ "invoke-virtual-quick" | "invoke-super-quick" {
return newToken(INSTRUCTION_FORMAT35ms_METHOD);
}
@@ -549,7 +554,11 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayDescriptor}
return newToken(INSTRUCTION_FORMAT3rc_TYPE);
}
- "execute-inline/range" | "invoke-virtual-quick/range" | "invoke-super-quick/range" {
+ "execute-inline/range" {
+ return newToken(INSTRUCTION_FORMAT3rmi_METHOD);
+ }
+
+ "invoke-virtual-quick/range" | "invoke-super-quick/range" {
return newToken(INSTRUCTION_FORMAT3rms_METHOD);
}
diff --git a/smali/src/test/resources/LexerTest/InstructionTest.smali b/smali/src/test/resources/LexerTest/InstructionTest.smali
index e5fa785f..7a7c3352 100644
--- a/smali/src/test/resources/LexerTest/InstructionTest.smali
+++ b/smali/src/test/resources/LexerTest/InstructionTest.smali
@@ -219,6 +219,7 @@ invoke-super/range
invoke-direct/range
invoke-static/range
filled-new-array/range
+execute-inline/range
invoke-virtual-quick/range
invoke-super-quick/range
const-wide \ No newline at end of file
diff --git a/smali/src/test/resources/LexerTest/InstructionTest.tokens b/smali/src/test/resources/LexerTest/InstructionTest.tokens
index a4b1b74b..23e48956 100644
--- a/smali/src/test/resources/LexerTest/InstructionTest.tokens
+++ b/smali/src/test/resources/LexerTest/InstructionTest.tokens
@@ -211,7 +211,7 @@ INSTRUCTION_FORMAT35c_METHOD("invoke-interface")
INSTRUCTION_FORMAT35c_TYPE("filled-new-array")
INSTRUCTION_FORMAT35s_METHOD("invoke-direct-empty")
INSTRUCTION_FORMAT20bc("throw-verification-error")
-INSTRUCTION_FORMAT35ms_METHOD("execute-inline")
+INSTRUCTION_FORMAT35mi_METHOD("execute-inline")
INSTRUCTION_FORMAT35ms_METHOD("invoke-virtual-quick")
INSTRUCTION_FORMAT35ms_METHOD("invoke-super-quick")
INSTRUCTION_FORMAT3rc_METHOD("invoke-virtual/range")
@@ -219,6 +219,7 @@ INSTRUCTION_FORMAT3rc_METHOD("invoke-super/range")
INSTRUCTION_FORMAT3rc_METHOD("invoke-direct/range")
INSTRUCTION_FORMAT3rc_METHOD("invoke-static/range")
INSTRUCTION_FORMAT3rc_TYPE("filled-new-array/range")
+INSTRUCTION_FORMAT3rmi_METHOD("execute-inline/range")
INSTRUCTION_FORMAT3rms_METHOD("invoke-virtual-quick/range")
INSTRUCTION_FORMAT3rms_METHOD("invoke-super-quick/range")
INSTRUCTION_FORMAT51l("const-wide") \ No newline at end of file
diff --git a/smali/src/test/resources/LexerTest/MiscTest.smali b/smali/src/test/resources/LexerTest/MiscTest.smali
index 3c280e8f..32bbd272 100644
--- a/smali/src/test/resources/LexerTest/MiscTest.smali
+++ b/smali/src/test/resources/LexerTest/MiscTest.smali
@@ -45,6 +45,10 @@ illegal-method-access
class-change-error
instantiation-error
+inline@0xABCD
+inline@0x0123
+inline@0x0123ABCD
+
vtable@0xABCD
vtable@0x0123
vtable@0x0123ABCD
@@ -53,6 +57,9 @@ field@0xABCD
field@0x0123
field@0x0123ABCD
+inline@
+inline@zzz
+inline@abcd
vtable@
vtable@zzz
vtable@abcd
diff --git a/smali/src/test/resources/LexerTest/MiscTest.tokens b/smali/src/test/resources/LexerTest/MiscTest.tokens
index fda05c45..841c9935 100644
--- a/smali/src/test/resources/LexerTest/MiscTest.tokens
+++ b/smali/src/test/resources/LexerTest/MiscTest.tokens
@@ -45,14 +45,21 @@ VERIFICATION_ERROR_TYPE("illegal-method-access")
VERIFICATION_ERROR_TYPE("class-change-error")
VERIFICATION_ERROR_TYPE("instantiation-error")
-VTABLE_OFFSET("vtable@0xABCD")
-VTABLE_OFFSET("vtable@0x0123")
-VTABLE_OFFSET("vtable@0x0123ABCD")
+INLINE_INDEX("inline@0xABCD")
+INLINE_INDEX("inline@0x0123")
+INLINE_INDEX("inline@0x0123ABCD")
+
+VTABLE_INDEX("vtable@0xABCD")
+VTABLE_INDEX("vtable@0x0123")
+VTABLE_INDEX("vtable@0x0123ABCD")
FIELD_OFFSET("field@0xABCD")
FIELD_OFFSET("field@0x0123")
FIELD_OFFSET("field@0x0123ABCD")
+SIMPLE_NAME("inline") INVALID_TOKEN("@")
+SIMPLE_NAME("inline") INVALID_TOKEN("@") SIMPLE_NAME("zzz")
+SIMPLE_NAME("inline") INVALID_TOKEN("@") SIMPLE_NAME("abcd")
SIMPLE_NAME("vtable") INVALID_TOKEN("@")
SIMPLE_NAME("vtable") INVALID_TOKEN("@") SIMPLE_NAME("zzz")
SIMPLE_NAME("vtable") INVALID_TOKEN("@") SIMPLE_NAME("abcd")