- Introduces two new instruction formats, 45cc and 4rcc. As the name suggests,
these instructions are similar to 35c and 3rc, expect that they encode an
additional constant pool reference in their 4th byte.
- Introduce two new instructions, invoke-polymorphic and
invoke-polymorphic/range - used to implement signature polymorphism.
- Allow instructions to directly reference the proto_id section of the
dex file. This involves the introduction of a new kind of reference
(MethodProtoReference) and has the side effect of cleaning up a fair
amount of special casing in ProtoPool.
- Disable support for ART version based switches (and remove LambdaTest
which depends on it). Experimental lambda support and support for ART
version based switches will be removed in a follow up change.
Bug: 30550796
Test: test-art
Test: ./gradlew build
* Add new -X/--experimental flag to [dis]assemble opcodes not in art yet
* Add new opcodes liberate-variable, box-lambda, unbox-lambda,
capture-variable, create-lambda, invoke-lambda
* Add support for encoding 25x instructions
* Adds LambdaTest to check new opcodes assemble/disassemble properly
TODO: invoke-lambda-range
Change-Id: I5c8bcbfa8b6cb9a13ef2017fce2d1b7fda6e11c3
This is needed to allow smalidea to have an outer array type element to
represent the type as a whole, and an inner class type element for the
actual element type
jflex appears to be using the default locale for a String.toUpperCase
somewhere, which causes incorrect java code to be generated in the
turkish locale.
Dalvik allows accesses and definitions of fields with angle brackets
It "allows" definitions of bracketed method names, but it will reject any
attempt to actually call them (except <init>, of course).
The DexWriter implementations now write to a generic "DexDataStore", instead
of writing directly to a file.
Also, writing of the DebugItems and CodeItems are linked, with the code
items being written to a temporary location, and then the entire code item
section is written as a batch after the debug item section.
DexBuilder.internMethod now accepts a generic MethodImplementation instead. It is assumed that
the various String/Type/etc. references will have been interned by and returned from the
appropriate DexBuilder methodDelete BuilderMethodImplementation
DexBuilder.internMethod now accepts a generic MethodImplementation instead. It
is assumed that the various String/Type/etc. references will have been
interned by and returned from the appropriate DexBuilder method