Change invokespecial to invokevirtual for bridge methods

This commit is contained in:
Natalia.Ukhorskaya
2012-06-04 17:42:27 +04:00
parent 6e3c02b695
commit a1a3dfac41
@@ -218,7 +218,7 @@ public class ClosureCodegen extends ObjectOrClosureCodegen {
if(bridge.getAsmMethod().getDescriptor().equals(delegate.getDescriptor())) if(bridge.getAsmMethod().getDescriptor().equals(delegate.getDescriptor()))
return; return;
final MethodVisitor mv = cv.newMethod(fun, ACC_PUBLIC, "invoke", bridge.getAsmMethod().getDescriptor(), null, new String[0]); final MethodVisitor mv = cv.newMethod(fun, ACC_PUBLIC | ACC_BRIDGE | ACC_VOLATILE, "invoke", bridge.getAsmMethod().getDescriptor(), null, new String[0]);
if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) { if (state.getClassBuilderMode() == ClassBuilderMode.STUBS) {
StubCodegen.generateStubCode(mv); StubCodegen.generateStubCode(mv);
} }
@@ -244,7 +244,7 @@ public class ClosureCodegen extends ObjectOrClosureCodegen {
count++; count++;
} }
iv.invokespecial(className, "invoke", delegate.getDescriptor()); iv.invokevirtual(className, "invoke", delegate.getDescriptor());
StackValue.onStack(delegate.getReturnType()).put(JetTypeMapper.TYPE_OBJECT, iv); StackValue.onStack(delegate.getReturnType()).put(JetTypeMapper.TYPE_OBJECT, iv);
iv.areturn(JetTypeMapper.TYPE_OBJECT); iv.areturn(JetTypeMapper.TYPE_OBJECT);