From 70de698edf94d78e6bc8f7e432210c150924caa1 Mon Sep 17 00:00:00 2001 From: 7908837174 Date: Tue, 3 Mar 2026 05:31:48 +0530 Subject: [PATCH] Fix constant pool parsing for module/package tags (issue #252) with regression tests and parallel-safe compiler usage --- output.txt | 2 +- src/main/gov/nasa/jpf/jvm/ClassFile.java | 24 +++- .../gov/nasa/jpf/jvm/ClassFilePrinter.java | 14 +++ .../jpf/jvm/PackageModuleConstantTest.java | 115 ++++++++++++++++++ .../gov/nasa/jpf/test/java/io/FileTest.java | 23 ++-- .../jpf/test/java/net/URLClassLoaderTest.java | 53 ++++---- 6 files changed, 191 insertions(+), 40 deletions(-) create mode 100644 src/tests/gov/nasa/jpf/jvm/PackageModuleConstantTest.java diff --git a/output.txt b/output.txt index 39e2f69be..c226cb71f 100644 --- a/output.txt +++ b/output.txt @@ -1 +1 @@ -After. +After. diff --git a/src/main/gov/nasa/jpf/jvm/ClassFile.java b/src/main/gov/nasa/jpf/jvm/ClassFile.java index d6f7195aa..5679a1286 100644 --- a/src/main/gov/nasa/jpf/jvm/ClassFile.java +++ b/src/main/gov/nasa/jpf/jvm/ClassFile.java @@ -43,6 +43,9 @@ public class ClassFile extends BinaryClassSource { public static final int METHOD_REF = 10; public static final int INTERFACE_METHOD_REF = 11; public static final int NAME_AND_TYPE = 12; + // Java 9 tags introduced for module and package info + public static final int CONSTANT_MODULE = 19; // module_info entry + public static final int CONSTANT_PACKAGE = 20; // package_info entry public static final int METHOD_HANDLE = 15; public static final int METHOD_TYPE = 16; public static final int INVOKE_DYNAMIC = 18; @@ -83,7 +86,9 @@ public static enum CpInfo { MethodHandle, // 15 MethodType, // 16 Unused_17, - InvokeDynamic // 18 + InvokeDynamic, // 18 + ConstantModule, // 19 + ConstantPackage // 20 } // <2do> this is going away @@ -1153,6 +1158,18 @@ protected void parseCp(int cpCount) throws ClassParseException { values[i] = CpInfo.InvokeDynamic; j += 5; break; + + case CONSTANT_MODULE: // Module_info { u1 tag; u2 name_index; } + dataIdx[i] = j; + values[i] = CpInfo.ConstantModule; + j += 3; + break; + + case CONSTANT_PACKAGE: // Package_info { u1 tag; u2 name_index; } + dataIdx[i] = j; + values[i] = CpInfo.ConstantPackage; + j += 3; + break; default: error("illegal constpool tag: " + data[j]); @@ -1165,8 +1182,9 @@ protected void parseCp(int cpCount) throws ClassParseException { for (int i=1; i