From 9bcc7b66de6495d3da8fc7f30a2a88187dbe847d Mon Sep 17 00:00:00 2001 From: Shaojin Wen Date: Wed, 25 Sep 2024 02:30:46 +0000 Subject: [PATCH] 8340708: Optimize StackMapGenerator::processMethod Reviewed-by: liach --- .../jdk/internal/classfile/impl/StackMapGenerator.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java b/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java index f5cd9b80af8..3cf6770e49b 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java @@ -400,6 +400,8 @@ public final class StackMapGenerator { } private void processMethod() { + var frames = this.frames; + var currentFrame = this.currentFrame; currentFrame.setLocalsFromArg(methodName, methodDesc, isStatic, thisType); currentFrame.stackSize = 0; currentFrame.flags = 0; @@ -415,10 +417,10 @@ public final class StackMapGenerator { throw generatorError("Expecting a stack map frame"); } if (thisOffset == bcs.bci()) { - if (!ncf) { - currentFrame.checkAssignableTo(frames.get(stackmapIndex)); - } Frame nextFrame = frames.get(stackmapIndex++); + if (!ncf) { + currentFrame.checkAssignableTo(nextFrame); + } while (!nextFrame.dirty) { //skip unmatched frames if (stackmapIndex == frames.size()) return; //skip the rest of this round nextFrame = frames.get(stackmapIndex++); @@ -429,7 +431,7 @@ public final class StackMapGenerator { currentFrame.copyFrom(nextFrame); nextFrame.dirty = false; } else if (thisOffset < bcs.bci()) { - throw new ClassFormatError(String.format("Bad stack map offset %d", thisOffset)); + throw generatorError("Bad stack map offset"); } } else if (ncf) { throw generatorError("Expecting a stack map frame");