This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-compress.git
The following commit(s) were added to refs/heads/master by this push: new 48dab7c02 Javadoc 48dab7c02 is described below commit 48dab7c02f281d42264f93a35b0f80fc3fe16c03 Author: Gary D. Gregory <garydgreg...@gmail.com> AuthorDate: Thu Aug 14 22:23:33 2025 -0400 Javadoc --- .../compress/harmony/unpack200/BcBands.java | 36 +++++++++++++++++++++- .../unpack200/bytecode/forms/LookupSwitchForm.java | 12 ++------ 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/BcBands.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/BcBands.java index 67927e193..af4a2bea0 100644 --- a/src/main/java/org/apache/commons/compress/harmony/unpack200/BcBands.java +++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/BcBands.java @@ -37,7 +37,41 @@ import org.apache.commons.compress.harmony.unpack200.bytecode.OperandManager; /** - * Bytecode bands. + * Bytecode bands that transmit bytecode instructions. + * + * <pre> + * bc_bands: + * *bc_codes :BYTE1 [...] + * *bc_case_count :UNSIGNED5 [COUNT(switch,*bc_codes)] + * *bc_case_value :DELTA5 [...] + * *bc_byte :BYTE1 [...] + * *bc_short :DELTA5 [...] + * *bc_local :UNSIGNED5 [...] + * *bc_label :BRANCH5 [...] + * *bc_intref :DELTA5 [...] (cp_Int) + * *bc_floatref :DELTA5 [...] (cp_Float) + * *bc_longref :DELTA5 [...] (cp_Long) + * *bc_doubleref :DELTA5 [...] (cp_Double) + * *bc_stringref :DELTA5 [...] (cp_String) + * *bc_loadablevalueref :DELTA5 [...] (cp_LoadableValue) + * *bc_classref :UNSIGNED5 [...] (current class or cp_Class) + * *bc_fieldref :DELTA5 [...] (cp_Field) + * *bc_methodref :UNSIGNED5 [...] (cp_Method) + * *bc_imethodref :DELTA5 [...] (cp_Imethod) + * *bc_indyref :DELTA5 [...] (cp_InvokeDynamic) + * *bc_thisfield :UNSIGNED5 [...] (cp_Field, only for current class) + * *bc_superfield :UNSIGNED5 [...] (cp_Field, only for current super) + * *bc_thismethod :UNSIGNED5 [...] (cp_Method, only for current class) + * *bc_supermethod :UNSIGNED5 [...] (cp_Method, only for current super) + * *bc_initref :UNSIGNED5 [...] (cp_Field, only for most recent new) + * *bc_escref :UNSIGNED5 [COUNT(ref_escape,*bc_codes)] (cp_All) + * *bc_escrefsize :UNSIGNED5 [...] + * *bc_escsize :UNSIGNED5 [...] + * *bc_escbyte :BYTE1 [...] + * </pre> + * + * @see <a href="https://docs.oracle.com/en/java/javase/13/docs/specs/pack-spec.html">Pack200: A Packed Class Deployment Format For Java Applications - 5.10. + * Bytecode Instructions</a> */ public class BcBands extends BandSet { diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/forms/LookupSwitchForm.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/forms/LookupSwitchForm.java index 625c9d08e..c44215168 100644 --- a/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/forms/LookupSwitchForm.java +++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/forms/LookupSwitchForm.java @@ -46,21 +46,19 @@ public void setByteCodeOperands(final ByteCode byteCode, final OperandManager op Arrays.setAll(caseValues, i -> operandManager.nextCaseValues()); final int[] casePcs = new int[caseCount]; Arrays.setAll(casePcs, i -> operandManager.nextLabel()); - final int[] labelsArray = new int[caseCount + 1]; labelsArray[0] = defaultPc; System.arraycopy(casePcs, 0, labelsArray, 1, caseCount + 1 - 1); byteCode.setByteCodeTargets(labelsArray); - // All this gets dumped into the rewrite bytes of the // poor bytecode. - + // // Unlike most byte codes, the LookupSwitch is a // variable-sized bytecode. Because of this, the // rewrite array has to be defined here individually // for each bytecode, rather than in the ByteCodeForm // class. - + // // First, there's the bytecode. Then there are 0-3 // bytes of padding so that the first (default) // label is on a 4-byte offset. @@ -68,31 +66,25 @@ public void setByteCodeOperands(final ByteCode byteCode, final OperandManager op final int rewriteSize = 1 + padLength + 4 // defaultbytes + 4 // npairs + 4 * caseValues.length + 4 * casePcs.length; - final int[] newRewrite = new int[rewriteSize]; int rewriteIndex = 0; - // Fill in what we can now // opcode newRewrite[rewriteIndex++] = byteCode.getOpcode(); - // padding for (int index = 0; index < padLength; index++) { newRewrite[rewriteIndex++] = 0; } - // defaultbyte // This gets overwritten by fixUpByteCodeTargets newRewrite[rewriteIndex++] = -1; newRewrite[rewriteIndex++] = -1; newRewrite[rewriteIndex++] = -1; newRewrite[rewriteIndex++] = -1; - // npairs final int npairsIndex = rewriteIndex; setRewrite4Bytes(caseValues.length, npairsIndex, newRewrite); rewriteIndex += 4; - // match-offset pairs // The caseValues aren't overwritten, but the // casePcs will get overwritten by fixUpByteCodeTargets