Releases: jumanji144/Jasm
Releases · jumanji144/Jasm
2.6.0
What's new?
- Known length array values
- Arrays created with a known array length carry this length
arraylength
instructions will then return this as a known value- Does not yet work on multidimensional arrays
- New warnings for incompatible stack types on comparison instructions
- New warnings for wide types in arithmetic instructions
- Support for optional descriptors for type instructions
What's fixed?
anewarray
not allowing multi dimensional array descriptors- Float and double compares in analysis
- Instructions being not aligned with the documentation and vice versa
- Warning for 0-length multidimensional arrays
- Remove warning for calling methods on array descriptors
Full Changelog: 2.5.0...2.6.0
2.5.0
What's New
- Manual specification of library classes in the CLI
- Warnings added to the error processor
- Added AST walking to the api
- Project now is under the MIT license
- Support for outer and inner classes
- Support for record components
- Support for nest host members
- Support for permitted subclasses
- Support for source file
- QOL: --output= defaults to .class by @Kreijstal in #15
What's Fixed
- NumberFormatException not being wrapped in instruction validatio
- Strings starting with '.' being treated as a declaration begin
- Strings only having ':' being treated as a label
- Eof causing overflow with operators
- Many issues with wrong analysis:
- Incorrect handling of
null
(now null the null object is being represented as being 'null') - Incorrect handling of multianewarry
- Incorrect handling of iinc
- Incorrect handling of descriptor
- Incorrect handling of stack merges, causing local type deviation leading to primitive -> object merge
- Incorrect handling of
- Printing sometimes causing incorrect input
- Update docs to better reflect status of xstore/xload by @0x3C50 in #16
- Fix type merging (mostly handling null merging properly now) by @Col-E in #17
New Contributors
- @0x3C50 made their first contribution in #16
- @Kreijstal made their first contribution in #15
Full Changelog: 2.4.1...2.5.0
2.4.1
What's new
- Added .jar decompile options
- Added options to load a different library folder in compile step
- Added
line
instruction: - Syntax:
line <line number>
What's fixed
- Incorrect annotation token handling
- Upstream blw fixes
2.4.0
What's new
- WIP Dalvik AST model
- Not intended for use just yet as things are not fully fleshed out, but if you're curious it is there
- Changes
Compiler
result fromClassRepresentation
toClassResult
which will hold analysis data even if a fullClassRepresentation
could not be built- This allows getting partial analysis data even if there were build problems
- Before, analysis data required the class be fully buildable in order to access
AST to CodeElement
andCodeElement to AST
lookups inAnalysisResults
- Pairs will with the prior change above with partial builds
- Allows easy look-ups of compilation mappings without having to do a lot of work yourself
- Shortcuts for common
invokedynamic
bootstrap methodsLambdaMetaFactory.metafactory
->java.lang.invoke.LambdaMetafactory.metafactory(MethodHandles.Lookup, String, MethodType, MethodType, MethodHandle, MethodType)
LambdaMetaFactory.altMetafactory
->java.lang.invoke.LambdaMetafactory.altMetafactory(MethodHandles.Lookup, String, MethodType, Object...)
ConstantBootstraps.nullConstant
->java.lang.invoke.ConstantBootstraps.nullConstant(MethodHandles.Lookup, String, Class)
ConstantBootstraps.primitiveClass
->java.lang.invoke.ConstantBootstraps.primitiveClass(MethodHandles.Lookup, String, Class)
ConstantBootstraps.enumConstant
->java.lang.invoke.ConstantBootstraps.enumConstant(MethodHandles.Lookup, String, Class)
ConstantBootstraps.getStaticFinal
->java.lang.invoke.ConstantBootstraps.getStaticFinal(MethodHandles.Lookup, String, Class, Class)
ConstantBootstraps.invoke
->java.lang.invoke.ConstantBootstraps.invoke(MethodHandles.Lookup, String, Class, MethodHandle, Object...)
ConstantBootstraps.fieldVarHandle
->java.lang.invoke.ConstantBootstraps.fieldVarHandle(MethodHandles.Lookup, String, Class, Class, Class)
ConstantBootstraps.staticFieldVarHandle
->java.lang.invoke.ConstantBootstraps.staticFieldVarHandle(MethodHandles.Lookup, String, Class, Class, Class)
ConstantBootstraps.arrayVarHandle
->java.lang.invoke.ConstantBootstraps.arrayVarHandle(MethodHandles.Lookup, String, Class, Class)
ConstantBootstraps.explicitCast
->java.lang.invoke.ConstantBootstraps.explicitCast(MethodHandles.Lookup, String, Class, Object)
SwitchBootstraps.enumSwitch
->java.lang.runtime.SwitchBootstraps.enumSwitch(MethodHandles.Lookup, String, MethodType, Object...)
SwitchBootstraps.stringSwitch
->java.lang.runtime.SwitchBootstraps.typeSwitch(MethodHandles.Lookup, String, MethodType, Object...)
ObjectMethods.bootstrap
->java.lang.runtime.ObjectMethods.bootstrap(MethodHandles.Lookup, String, TypeDescriptor, Class, String, MethodHandle...)
- Field and method descriptors are now verified for correct formatting
- More supported values in the provided
BasicMethodValueLookup
(which got moved to a new package) - Value lookups for fields/methods are only attempted when value content is known
What's Fixed
- Tokenizer associating tokens with wrong column
- OOBE when printing a virtual method with no parameters
- Unintended breakage of annotation path selection in
CompilerOptions
ASTElement.range()
yielding unexpected positions due to unsorted children- Missing special case handling for numbers (
NaN
and the like) - Incorrectly creating additional parameters when disassembling methods with wide-type parameters
- Many analysis engine problems
nop
,arraylength
,*aload
and*astore
instructions not being implementedanewarray
not popping array size off the stackcheckcase
not changing the value type on the stack- Value analysis truncating small floats and doubles
- Analysis engine errors not being reported in the common error collector system
- Revisiting control flow would not merge frames, but overwrite them with the last visited iteration
- Jump target frames being put at the wrong index
- Unmatched
push
andpop
in a variety of stack-manipulating and math instructions - Incorrect handling of frame merging for terminal instructions
- Incorrect printing of annotation enum values
- Incorrect printing of annotation class values
- Unexpected re-ordering of annotation values
- Missing char/special-case-number support for annotation values
Full Changelog: 2.3.0...2.4.0
2.3.0
What's Changed
ASTElement
will no longer havenull
childrenASTElement
children are sorted by positionASTElement.range()
will now consider childrenASTMethod
now has children:modifiers
,exception
,code
- Fixes its
range()
computation
- Fixes its
- Fixes in analysis with missing opcode handling
Full Changelog: 2.2.0...2.3.0
2.2.0-beta pre release
What's Changed
- Split method analysis into typed/valued engines - #11
- Annotation support
- Constant dynamic support
- Various parser fixes
Full Changelog: 2.1.0...2.2.0
2.1.0-beta pre release
- Expose stack analysis results in compiler interface
Full Changelog: 2.0.2...2.1.0
2.0.2-beta pre release
- Fix class replacing visitor scrambling field/method order
Full Changelog: 2.0.1...2.0.2
2.0.1-beta pre release
- fully fixed up analyzer thanks to @xxDark
- added exception handlers
Full Changelog: 2.0.0.1...2.0.1
2.0.0.1-beta pre release
What's Changed
- JDK-8274347: Do not use switch expressions inline with method call parameters by @Col-E in #7
- Varied fixes by @Col-E in #8
- Asorted fixes by @Nowilltolife
Full Changelog: 2.0.0...2.0.0.1