From 5fd193d88de3f5f3d5bd5facced72a23d959f43c Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Sun, 12 May 2013 12:00:58 +0200 Subject: [PATCH] Account for maximum stack size Just using ClassWriter.COMPUTE_FRAMES does not work: it end up with ClassNotFound from somewhere withing ASM --- .../instrumentation/InterceptionInstrumenter.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/InterceptionInstrumenter.java b/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/InterceptionInstrumenter.java index 3184f6015e0..656b9efe5d1 100644 --- a/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/InterceptionInstrumenter.java +++ b/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/InterceptionInstrumenter.java @@ -194,7 +194,7 @@ public class InterceptionInstrumenter { private byte[] instrument(byte[] classData, final List instrumenters) { final ClassReader cr = new ClassReader(classData); - ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_FRAMES); + ClassWriter cw = new ClassWriter(cr, 0); cr.accept(new ClassVisitor(ASM4, cw) { private final Map matchedMethods = new HashMap(); @@ -243,6 +243,12 @@ public class InterceptionInstrumenter { return ia; } + @Override + public void visitMaxs(int maxStack, int maxLocals) { + int sizes = Type.getArgumentsAndReturnSizes(desc); + super.visitMaxs(Math.max(maxStack, sizes + 1), maxLocals); + } + @Override public void visitCode() { for (MethodData methodData : enterData) {