aboutsummaryrefslogtreecommitdiff
path: root/smali
diff options
context:
space:
mode:
authorNarayan Kamath <narayan@google.com>2016-08-17 11:39:28 +0100
committerNarayan Kamath <narayan@google.com>2016-08-17 13:15:18 +0100
commit99b80bbc5a55f53e73a143a90f94faefbd5e4f7f (patch)
treea3b4c835cda443a7f3a43e71ea96347d98f403c0 /smali
parentafc1f1593936326e1c99f8328bbce8b495865000 (diff)
downloadsmali-99b80bbc5a55f53e73a143a90f94faefbd5e4f7f.tar.gz
Revert "Add lambda experimental dalvik opcodes"
This reverts commit 144951a9e9e6c87866245f2bdeebf0ebedaa0e38.
Diffstat (limited to 'smali')
-rw-r--r--smali/src/main/antlr/smaliParser.g36
-rw-r--r--smali/src/main/antlr/smaliTreeWalker.g73
-rw-r--r--smali/src/main/jflex/smaliLexer.jflex20
-rw-r--r--smali/src/test/resources/LexerTest/InstructionTest.smali6
-rw-r--r--smali/src/test/resources/LexerTest/InstructionTest.tokens6
5 files changed, 2 insertions, 139 deletions
diff --git a/smali/src/main/antlr/smaliParser.g b/smali/src/main/antlr/smaliParser.g
index 29148f7b..29cd141b 100644
--- a/smali/src/main/antlr/smaliParser.g
+++ b/smali/src/main/antlr/smaliParser.g
@@ -86,8 +86,6 @@ tokens {
INSTRUCTION_FORMAT21c_FIELD_ODEX;
INSTRUCTION_FORMAT21c_STRING;
INSTRUCTION_FORMAT21c_TYPE;
- INSTRUCTION_FORMAT21c_LAMBDA;
- INSTRUCTION_FORMAT21c_METHOD;
INSTRUCTION_FORMAT21ih;
INSTRUCTION_FORMAT21lh;
INSTRUCTION_FORMAT21s;
@@ -96,14 +94,12 @@ tokens {
INSTRUCTION_FORMAT22c_FIELD;
INSTRUCTION_FORMAT22c_FIELD_ODEX;
INSTRUCTION_FORMAT22c_TYPE;
- INSTRUCTION_FORMAT22c_STRING;
INSTRUCTION_FORMAT22cs_FIELD;
INSTRUCTION_FORMAT22s;
INSTRUCTION_FORMAT22s_OR_ID;
INSTRUCTION_FORMAT22t;
INSTRUCTION_FORMAT22x;
INSTRUCTION_FORMAT23x;
- INSTRUCTION_FORMAT25x;
INSTRUCTION_FORMAT30t;
INSTRUCTION_FORMAT31c;
INSTRUCTION_FORMAT31i;
@@ -212,8 +208,6 @@ tokens {
I_STATEMENT_FORMAT21c_TYPE;
I_STATEMENT_FORMAT21c_FIELD;
I_STATEMENT_FORMAT21c_STRING;
- I_STATEMENT_FORMAT21c_LAMBDA;
- I_STATEMENT_FORMAT21c_METHOD;
I_STATEMENT_FORMAT21ih;
I_STATEMENT_FORMAT21lh;
I_STATEMENT_FORMAT21s;
@@ -221,12 +215,10 @@ tokens {
I_STATEMENT_FORMAT22b;
I_STATEMENT_FORMAT22c_FIELD;
I_STATEMENT_FORMAT22c_TYPE;
- I_STATEMENT_FORMAT22c_STRING;
I_STATEMENT_FORMAT22s;
I_STATEMENT_FORMAT22t;
I_STATEMENT_FORMAT22x;
I_STATEMENT_FORMAT23x;
- I_STATEMENT_FORMAT25x;
I_STATEMENT_FORMAT30t;
I_STATEMENT_FORMAT31c;
I_STATEMENT_FORMAT31i;
@@ -566,18 +558,14 @@ simple_name
| INSTRUCTION_FORMAT21c_FIELD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_FIELD_ODEX]
| INSTRUCTION_FORMAT21c_STRING -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_STRING]
| INSTRUCTION_FORMAT21c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_TYPE]
- | INSTRUCTION_FORMAT21c_LAMBDA -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_LAMBDA]
- | INSTRUCTION_FORMAT21c_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT21c_METHOD]
| INSTRUCTION_FORMAT21t -> SIMPLE_NAME[$INSTRUCTION_FORMAT21t]
| INSTRUCTION_FORMAT22c_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_FIELD]
| INSTRUCTION_FORMAT22c_FIELD_ODEX -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_FIELD_ODEX]
| INSTRUCTION_FORMAT22c_TYPE -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_TYPE]
- | INSTRUCTION_FORMAT22c_STRING -> SIMPLE_NAME[$INSTRUCTION_FORMAT22c_STRING]
| INSTRUCTION_FORMAT22cs_FIELD -> SIMPLE_NAME[$INSTRUCTION_FORMAT22cs_FIELD]
| INSTRUCTION_FORMAT22s_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT22s_OR_ID]
| INSTRUCTION_FORMAT22t -> SIMPLE_NAME[$INSTRUCTION_FORMAT22t]
| INSTRUCTION_FORMAT23x -> SIMPLE_NAME[$INSTRUCTION_FORMAT23x]
- | INSTRUCTION_FORMAT25x -> SIMPLE_NAME[$INSTRUCTION_FORMAT25x]
| INSTRUCTION_FORMAT31i_OR_ID -> SIMPLE_NAME[$INSTRUCTION_FORMAT31i_OR_ID]
| INSTRUCTION_FORMAT31t -> SIMPLE_NAME[$INSTRUCTION_FORMAT31t]
| INSTRUCTION_FORMAT35c_METHOD -> SIMPLE_NAME[$INSTRUCTION_FORMAT35c_METHOD]
@@ -823,8 +811,6 @@ instruction
| insn_format21c_field_odex
| insn_format21c_string
| insn_format21c_type
- | insn_format21c_lambda
- | insn_format21c_method
| insn_format21ih
| insn_format21lh
| insn_format21s
@@ -833,13 +819,11 @@ instruction
| insn_format22c_field
| insn_format22c_field_odex
| insn_format22c_type
- | insn_format22c_string
| insn_format22cs_field
| insn_format22s
| insn_format22t
| insn_format22x
| insn_format23x
- | insn_format25x
| insn_format30t
| insn_format31c
| insn_format31i
@@ -935,16 +919,6 @@ insn_format21c_type
INSTRUCTION_FORMAT21c_TYPE REGISTER COMMA nonvoid_type_descriptor
-> ^(I_STATEMENT_FORMAT21c_TYPE[$start, "I_STATEMENT_FORMAT21c"] INSTRUCTION_FORMAT21c_TYPE REGISTER nonvoid_type_descriptor);
-insn_format21c_lambda
- : //e.g. capture-variable v1, "foobar"
- INSTRUCTION_FORMAT21c_LAMBDA REGISTER COMMA STRING_LITERAL
- -> ^(I_STATEMENT_FORMAT21c_LAMBDA[$start, "I_STATEMENT_FORMAT21c_LAMBDA"] INSTRUCTION_FORMAT21c_LAMBDA REGISTER STRING_LITERAL);
-
-insn_format21c_method
- : //e.g. create-lambda v1, java/io/PrintStream/print(Ljava/lang/Stream;)V
- INSTRUCTION_FORMAT21c_METHOD REGISTER COMMA method_reference
- -> ^(I_STATEMENT_FORMAT21c_METHOD[$start, "I_STATEMENT_FORMAT21c_METHOD"] INSTRUCTION_FORMAT21c_METHOD REGISTER method_reference);
-
insn_format21ih
: //e.g. const/high16 v1, 1234
INSTRUCTION_FORMAT21ih REGISTER COMMA fixed_32bit_literal
@@ -990,11 +964,6 @@ insn_format22c_type
INSTRUCTION_FORMAT22c_TYPE REGISTER COMMA REGISTER COMMA nonvoid_type_descriptor
-> ^(I_STATEMENT_FORMAT22c_TYPE[$start, "I_STATEMENT_FORMAT22c_TYPE"] INSTRUCTION_FORMAT22c_TYPE REGISTER REGISTER nonvoid_type_descriptor);
-insn_format22c_string
- : //e.g. liberate-variable v0, v1, "baz"
- INSTRUCTION_FORMAT22c_STRING REGISTER COMMA REGISTER COMMA STRING_LITERAL
- -> ^(I_STATEMENT_FORMAT22c_STRING[$start, "I_STATEMENT_FORMAT22c_STRING"] INSTRUCTION_FORMAT22c_STRING REGISTER REGISTER STRING_LITERAL);
-
insn_format22cs_field
: //e.g. iget-quick v0, v1, field@0xc
INSTRUCTION_FORMAT22cs_FIELD REGISTER COMMA REGISTER COMMA FIELD_OFFSET
@@ -1022,11 +991,6 @@ insn_format23x
INSTRUCTION_FORMAT23x REGISTER COMMA REGISTER COMMA REGISTER
-> ^(I_STATEMENT_FORMAT23x[$start, "I_STATEMENT_FORMAT23x"] INSTRUCTION_FORMAT23x REGISTER REGISTER REGISTER);
-insn_format25x
- : //e.g. invoke-lambda vClosure, {vA, vB, vC, vD} -- up to 4 parameters + the closure.
- INSTRUCTION_FORMAT25x REGISTER COMMA OPEN_BRACE register_list CLOSE_BRACE
- -> ^(I_STATEMENT_FORMAT25x[$start, "I_STATEMENT_FORMAT25x"] INSTRUCTION_FORMAT25x REGISTER register_list);
-
insn_format30t
: //e.g. goto/32 endloop:
INSTRUCTION_FORMAT30t label_ref
diff --git a/smali/src/main/antlr/smaliTreeWalker.g b/smali/src/main/antlr/smaliTreeWalker.g
index 7f5657a5..d074579b 100644
--- a/smali/src/main/antlr/smaliTreeWalker.g
+++ b/smali/src/main/antlr/smaliTreeWalker.g
@@ -675,22 +675,6 @@ register_list returns[byte[\] registers, byte registerCount]
$registers[$registerCount++] = parseRegister_nibble($REGISTER.text);
})*);
-register_list4 returns[byte[\] registers, byte registerCount]
- @init
- {
- $registers = new byte[4];
- $registerCount = 0;
- }
- : ^(I_REGISTER_LIST
- (REGISTER
- {
- if ($registerCount == 4) {
- throw new SemanticException(input, $I_REGISTER_LIST, "A list4 of registers can only have a maximum of 4 " +
- "registers. Use the <op>/range alternate opcode instead.");
- }
- $registers[$registerCount++] = parseRegister_nibble($REGISTER.text);
- })*);
-
register_range returns[int startRegister, int endRegister]
: ^(I_REGISTER_RANGE (startReg=REGISTER endReg=REGISTER?)?)
{
@@ -743,8 +727,6 @@ instruction
| insn_format21c_field
| insn_format21c_string
| insn_format21c_type
- | insn_format21c_lambda
- | insn_format21c_method
| insn_format21ih
| insn_format21lh
| insn_format21s
@@ -752,12 +734,10 @@ instruction
| insn_format22b
| insn_format22c_field
| insn_format22c_type
- | insn_format22c_string
| insn_format22s
| insn_format22t
| insn_format22x
| insn_format23x
- | insn_format25x
| insn_format30t
| insn_format31c
| insn_format31i
@@ -884,30 +864,6 @@ insn_format21c_type
dexBuilder.internTypeReference($nonvoid_type_descriptor.type)));
};
-insn_format21c_lambda
- : //e.g. capture-variable v1, "foobar"
- ^(I_STATEMENT_FORMAT21c_LAMBDA INSTRUCTION_FORMAT21c_LAMBDA REGISTER string_literal)
- {
- Opcode opcode = opcodes.getOpcodeByName($INSTRUCTION_FORMAT21c_LAMBDA.text);
- short regA = parseRegister_byte($REGISTER.text);
-
- $method::methodBuilder.addInstruction(new BuilderInstruction21c(opcode, regA,
- dexBuilder.internStringReference($string_literal.value)));
- };
-
-insn_format21c_method
- : //e.g. create-lambda v1, java/io/PrintStream/print(Ljava/lang/Stream;)V
- ^(I_STATEMENT_FORMAT21c_METHOD INSTRUCTION_FORMAT21c_METHOD REGISTER method_reference)
- {
- Opcode opcode = opcodes.getOpcodeByName($INSTRUCTION_FORMAT21c_METHOD.text);
- short regA = parseRegister_byte($REGISTER.text);
-
- ImmutableMethodReference methodReference = $method_reference.methodReference;
-
- $method::methodBuilder.addInstruction(new BuilderInstruction21c(opcode, regA,
- dexBuilder.internMethodReference(methodReference)));
- };
-
insn_format21ih
: //e.g. const/high16 v1, 1234
^(I_STATEMENT_FORMAT21ih INSTRUCTION_FORMAT21ih REGISTER fixed_32bit_literal)
@@ -994,18 +950,6 @@ insn_format22c_type
dexBuilder.internTypeReference($nonvoid_type_descriptor.type)));
};
-insn_format22c_string
- : //e.g. liberate-variable v0, v1, "baz"
- ^(I_STATEMENT_FORMAT22c_STRING INSTRUCTION_FORMAT22c_STRING registerA=REGISTER registerB=REGISTER string_literal)
- {
- Opcode opcode = opcodes.getOpcodeByName($INSTRUCTION_FORMAT22c_STRING.text);
- byte regA = parseRegister_nibble($registerA.text);
- byte regB = parseRegister_nibble($registerB.text);
-
- $method::methodBuilder.addInstruction(new BuilderInstruction22c(opcode, regA, regB,
- dexBuilder.internStringReference($string_literal.value)));
- };
-
insn_format22s
: //e.g. add-int/lit16 v0, v1, 12345
^(I_STATEMENT_FORMAT22s INSTRUCTION_FORMAT22s registerA=REGISTER registerB=REGISTER short_integral_literal)
@@ -1053,23 +997,6 @@ insn_format23x
$method::methodBuilder.addInstruction(new BuilderInstruction23x(opcode, regA, regB, regC));
};
-insn_format25x
- : //e.g. invoke-lambda vClosure, {vD, vE, vF, vG} -- up to 4 parameters + the closure.
- ^(I_STATEMENT_FORMAT25x INSTRUCTION_FORMAT25x REGISTER register_list4)
- {
- Opcode opcode = opcodes.getOpcodeByName($INSTRUCTION_FORMAT25x.text);
-
- byte closureRegister = parseRegister_nibble($REGISTER.text);
-
- //this depends on the fact that register_list4 returns a byte[4]
- byte[] registers = $register_list4.registers;
- int parameterRegisterCount = $register_list4.registerCount; // don't count closure register
-
- $method::methodBuilder.addInstruction(new BuilderInstruction25x(opcode,
- parameterRegisterCount, closureRegister, registers[0], registers[1],
- registers[2], registers[3]));
- };
-
insn_format30t
: //e.g. goto/32 endloop:
^(I_STATEMENT_FORMAT30t INSTRUCTION_FORMAT30t label_ref)
diff --git a/smali/src/main/jflex/smaliLexer.jflex b/smali/src/main/jflex/smaliLexer.jflex
index e0010a93..2cf3c869 100644
--- a/smali/src/main/jflex/smaliLexer.jflex
+++ b/smali/src/main/jflex/smaliLexer.jflex
@@ -476,14 +476,6 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} |
return newToken(INSTRUCTION_FORMAT21c_TYPE);
}
- "capture-variable" { // e.g. 'capture-variable vB, <string id>'
- return newToken(INSTRUCTION_FORMAT21c_LAMBDA);
- }
-
- "create-lambda" { // e.g. 'create-lambda vClosure, <method id>'
- return newToken(INSTRUCTION_FORMAT21c_METHOD);
- }
-
"const/high16" {
return newToken(INSTRUCTION_FORMAT21ih);
}
@@ -515,14 +507,10 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} |
return newToken(INSTRUCTION_FORMAT22c_FIELD_ODEX);
}
- "instance-of" | "new-array" | "unbox-lambda" {
+ "instance-of" | "new-array" {
return newToken(INSTRUCTION_FORMAT22c_TYPE);
}
- "liberate-variable" {
- return newToken(INSTRUCTION_FORMAT22c_STRING);
- }
-
"iget-quick" | "iget-wide-quick" | "iget-object-quick" | "iput-quick" | "iput-wide-quick" | "iput-object-quick" |
"iput-boolean-quick" | "iput-byte-quick" | "iput-char-quick" | "iput-short-quick" {
return newToken(INSTRUCTION_FORMAT22cs_FIELD);
@@ -541,7 +529,7 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} |
return newToken(INSTRUCTION_FORMAT22t);
}
- "move/from16" | "move-wide/from16" | "move-object/from16" | "box-lambda" {
+ "move/from16" | "move-wide/from16" | "move-object/from16" {
return newToken(INSTRUCTION_FORMAT22x);
}
@@ -555,10 +543,6 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} |
return newToken(INSTRUCTION_FORMAT23x);
}
- "invoke-lambda" { // e.g. invoke-lambda vClosure, {vD, vE, vF, vG} -- at most 4 params
- return newToken(INSTRUCTION_FORMAT25x);
- }
-
"goto/32" {
return newToken(INSTRUCTION_FORMAT30t);
}
diff --git a/smali/src/test/resources/LexerTest/InstructionTest.smali b/smali/src/test/resources/LexerTest/InstructionTest.smali
index 174cff8c..62e51006 100644
--- a/smali/src/test/resources/LexerTest/InstructionTest.smali
+++ b/smali/src/test/resources/LexerTest/InstructionTest.smali
@@ -85,8 +85,6 @@ const-string
check-cast
new-instance
const-class
-capture-variable
-create-lambda
const/high16
const-wide/high16
const/16
@@ -125,8 +123,6 @@ iput-wide-volatile
iput-object-volatile
instance-of
new-array
-unbox-lambda
-liberate-variable
iget-quick
iget-wide-quick
iget-object-quick
@@ -153,7 +149,6 @@ if-le
move/from16
move-wide/from16
move-object/from16
-box-lambda
cmpl-float
cmpg-float
cmpl-double
@@ -204,7 +199,6 @@ add-double
sub-double
mul-double
div-double
-invoke-lambda
goto/32
const-string/jumbo
const
diff --git a/smali/src/test/resources/LexerTest/InstructionTest.tokens b/smali/src/test/resources/LexerTest/InstructionTest.tokens
index fa959bad..dfbd584b 100644
--- a/smali/src/test/resources/LexerTest/InstructionTest.tokens
+++ b/smali/src/test/resources/LexerTest/InstructionTest.tokens
@@ -85,8 +85,6 @@ INSTRUCTION_FORMAT21c_STRING("const-string")
INSTRUCTION_FORMAT21c_TYPE("check-cast")
INSTRUCTION_FORMAT21c_TYPE("new-instance")
INSTRUCTION_FORMAT21c_TYPE("const-class")
-INSTRUCTION_FORMAT21c_LAMBDA("capture-variable")
-INSTRUCTION_FORMAT21c_METHOD("create-lambda")
INSTRUCTION_FORMAT21ih("const/high16")
INSTRUCTION_FORMAT21lh("const-wide/high16")
INSTRUCTION_FORMAT21s("const/16")
@@ -125,8 +123,6 @@ INSTRUCTION_FORMAT22c_FIELD_ODEX("iput-wide-volatile")
INSTRUCTION_FORMAT22c_FIELD_ODEX("iput-object-volatile")
INSTRUCTION_FORMAT22c_TYPE("instance-of")
INSTRUCTION_FORMAT22c_TYPE("new-array")
-INSTRUCTION_FORMAT22c_TYPE("unbox-lambda")
-INSTRUCTION_FORMAT22c_STRING("liberate-variable")
INSTRUCTION_FORMAT22cs_FIELD("iget-quick")
INSTRUCTION_FORMAT22cs_FIELD("iget-wide-quick")
INSTRUCTION_FORMAT22cs_FIELD("iget-object-quick")
@@ -153,7 +149,6 @@ INSTRUCTION_FORMAT22t("if-le")
INSTRUCTION_FORMAT22x("move/from16")
INSTRUCTION_FORMAT22x("move-wide/from16")
INSTRUCTION_FORMAT22x("move-object/from16")
-INSTRUCTION_FORMAT22x("box-lambda")
INSTRUCTION_FORMAT23x("cmpl-float")
INSTRUCTION_FORMAT23x("cmpg-float")
INSTRUCTION_FORMAT23x("cmpl-double")
@@ -204,7 +199,6 @@ INSTRUCTION_FORMAT23x("add-double")
INSTRUCTION_FORMAT23x("sub-double")
INSTRUCTION_FORMAT23x("mul-double")
INSTRUCTION_FORMAT23x("div-double")
-INSTRUCTION_FORMAT25x("invoke-lambda")
INSTRUCTION_FORMAT30t("goto/32")
INSTRUCTION_FORMAT31c("const-string/jumbo")
INSTRUCTION_FORMAT31i_OR_ID("const")