< prev index next > src/java.base/share/classes/jdk/internal/classfile/impl/CodeImpl.java
Print this page
return attributes;
}
@Override
public void writeTo(BufWriterImpl buf) {
- if (buf.canWriteDirect(classReader)) {
+ var methodInfo = (MethodInfo) enclosingMethod;
+ if (Util.canSkipMethodInflation(classReader, methodInfo, buf)) {
super.writeTo(buf);
}
else {
- DirectCodeBuilder.build((MethodInfo) enclosingMethod,
+ DirectCodeBuilder.build(methodInfo,
Util.writingAll(this),
(SplitConstantPool)buf.constantPool(),
buf.context(),
null).writeTo(buf);
}
int bci = -1; //compensate for offsetDelta + 1
int nEntries = classReader.readU2(stackMapPos);
int p = stackMapPos + 2;
for (int i = 0; i < nEntries; ++i) {
int frameType = classReader.readU1(p);
- int offsetDelta;
+ int offsetDelta = -1;
if (frameType < 64) {
offsetDelta = frameType;
++p;
}
else if (frameType < 128) {
offsetDelta = frameType & 0x3f;
p = adjustForObjectOrUninitialized(p + 1);
}
- else
+ else {
switch (frameType) {
+ case 246 -> {
+ int numberOfUnsetFields = classReader.readU2(p + 1);
+ p += 3;
+ p += 2 * numberOfUnsetFields;
+ continue; // do not move bci/create label
+ }
case 247 -> {
offsetDelta = classReader.readU2(p + 1);
p = adjustForObjectOrUninitialized(p + 3);
}
case 248, 249, 250, 251 -> {
p = adjustForObjectOrUninitialized(p);
}
}
default -> throw new IllegalArgumentException("Bad frame type: " + frameType);
}
+ }
bci += offsetDelta + 1;
inflateLabel(bci);
}
}
< prev index next >