passes: junk classes with real bodies and no fingerprint

NoisePass now builds branching helper methods (counted int loop,
random arithmetic, even/odd merge, non-throwing ops only) whose
results the entry sums into a private static field, instead of an
empty run()V. Names come from the same NameGenerator styles as
real code and live in a random real package (no more shadow/decoy
uniformity for grep to catch); every generated method gets fresh
StackMapTable frames. weave_first_reachable takes (class, entry)
pairs. New NoiseConfig.junk_methods_per_class (default 3).

Tests assert invariants (unique valid identifiers, calls, field
store, determinism) plus real-JVM verification of junk classes;
paranoid+junk_ratio=1 smoke on lorep: 18 junk classes, all load.
This commit is contained in:
Loki 2026-10-09 14:04:24 +02:00
parent 74ad4552e4
commit 2cbb9db31e
Signed by: boba
GPG key ID: 253067914055423B
11 changed files with 648 additions and 159 deletions

View file

@ -97,7 +97,7 @@ fn build_frame(
})?;
if !(1..=3).contains(&count) {
return Err(ClassfileError::Write(format!(
"append-кадр на {count} local'ов (нужно 1–3)"
"append-кадр на {count} local'ов (нужно 1-3)"
)));
}
RtFrame::AppendFrame {