Repository navigation
v0.1.29
New Features
- Three new cure (0.1.4-0.1.8) source-level simplification rules, measured on three fresh random APK corpora (telegram/chatglm/cmb, 68k files):
dead_pure_call: discard-resultLong.compare(a,b)/Objects.toString(x)statements — the dex cmp-instruction rendering family (~63k sites)trailing_else_flatten: the else keyword after a terminal then-branch (~41k sites)(T)(Object)x→(T)xcast folding on Object-typed operands (the dex check-cast widening noise)
--fastnow works on every Java-source command:getclass,getmethod,pkg(in addition to the main decompile path) — skip the simplification pass, keep formatting (~half the time)
Bug Fixes
- Float constants emitted as raw IEEE bit patterns: dex const literals are untyped bits; in float/double arithmetic they must be reinterpreted with
from_bits, not numerically converted (1073741824 is 2.0f, not 1.07e9f) — >27k lines of silently wrong values on telegram alone, invisible to the compile gate - JLS 6.4.2 obscured-member static-import escape: inherited field captures package name in qualified static member references (reqable variable-cannot-finds 103→5)
- Seven type/scoping guards in cure found on ddc corpora (null literal overload ambiguity, for-each on non-Iterable, owner-confused method inline, enum constant shadowing, cast-position type loss, dangling cut locals, and the two first-version rule bugs in this release)
Performance
- Four IR shape passes retired into cure (trailing-return, ternary fold, final dead assigns, bool xor): −360 lines of ddc source with gate parity
--fastmode: parse+print only (~10× cheaper than the simplify engine) — weibo 23.4s → 11.5s
Quality Metrics
- Four-corpus javac gate: 8,633 errors (v0.1.28: 8,647, −14) — reqable 317 flat, weibo −1, lark −15
- Output lines: weibo 15.47M → 14.78M (−4.5% from the three new rules)
- docs/quality.md (bilingual) with the E1/S1/S2/D1/P1 metric definitions and reproduction script
Full Changelog: v0.1.28...v0.1.29