feat: 添加对 GraalVM native-image 的支持
- 在 LocalVariableStore 中添加对 native-image环境的检测 - 在 VMUtils 中实现 isNativeImage 方法 - 更新 module-info.java,添加对 org.graalvm.nativeimage 的依赖 - 优化调试模式下的 UI 显示逻辑,避免在 native-image 环境中显示 Swing 窗口
This commit is contained in:
parent
ebb9524db0
commit
80deaa9c4f
@ -4,6 +4,7 @@ module org.jcnc.snow.compiler {
|
|||||||
uses CLICommand;
|
uses CLICommand;
|
||||||
requires java.desktop;
|
requires java.desktop;
|
||||||
requires java.logging;
|
requires java.logging;
|
||||||
|
requires org.graalvm.nativeimage;
|
||||||
exports org.jcnc.snow.compiler.ir.core;
|
exports org.jcnc.snow.compiler.ir.core;
|
||||||
exports org.jcnc.snow.compiler.ir.instruction;
|
exports org.jcnc.snow.compiler.ir.instruction;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,6 +6,8 @@ import org.jcnc.snow.vm.utils.LoggingUtils;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import static org.jcnc.snow.vm.utils.VMUtils.isNativeImage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The {@code LocalVariableStore} represents a simple dynamically-sized
|
* The {@code LocalVariableStore} represents a simple dynamically-sized
|
||||||
* local-variable table (<em>frame locals</em>) of the VM.
|
* local-variable table (<em>frame locals</em>) of the VM.
|
||||||
@ -84,6 +86,9 @@ public class LocalVariableStore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ---------- internal helpers ---------- */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears all variables (used when a stack frame is popped).
|
* Clears all variables (used when a stack frame is popped).
|
||||||
*/
|
*/
|
||||||
@ -106,9 +111,6 @@ public class LocalVariableStore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ---------- internal helpers ---------- */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensures backing list can hold {@code minCapacity} slots.
|
* Ensures backing list can hold {@code minCapacity} slots.
|
||||||
*/
|
*/
|
||||||
@ -120,12 +122,18 @@ public class LocalVariableStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mode-specific UI hook (unchanged).
|
* Mode-specific UI hook for debugging.
|
||||||
|
* <p>
|
||||||
|
* If debug mode is enabled and not running inside a GraalVM native-image,
|
||||||
|
* this method will open the Swing-based variable inspector window.
|
||||||
|
* In native-image environments (where AWT/Swing is unavailable),
|
||||||
|
* the window will not be displayed.
|
||||||
*/
|
*/
|
||||||
private void handleMode() {
|
private void handleMode() {
|
||||||
/* no-op */
|
|
||||||
if (SnowConfig.isDebug()) {
|
if (SnowConfig.isDebug()) {
|
||||||
|
if (isNativeImage()) return;
|
||||||
LocalVariableStoreSwing.display(this, "Local Variable Table");
|
LocalVariableStoreSwing.display(this, "Local Variable Table");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package org.jcnc.snow.vm.utils;
|
package org.jcnc.snow.vm.utils;
|
||||||
|
|
||||||
|
import org.graalvm.nativeimage.ImageInfo;
|
||||||
import org.jcnc.snow.vm.engine.VirtualMachineEngine;
|
import org.jcnc.snow.vm.engine.VirtualMachineEngine;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -39,4 +40,21 @@ public class VMUtils {
|
|||||||
vm.printStack();
|
vm.printStack();
|
||||||
vm.printLocalVariables();
|
vm.printLocalVariables();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detects if the current runtime environment is a GraalVM native-image.
|
||||||
|
* <p>
|
||||||
|
* Uses GraalVM's {@code org.graalvm.nativeimage.ImageInfo.inImageCode()} API to determine
|
||||||
|
* if the application is running as a native executable. If the class is not present
|
||||||
|
* (for example, in a standard JVM), returns {@code false}.
|
||||||
|
*
|
||||||
|
* @return {@code true} if running inside a GraalVM native-image, otherwise {@code false}
|
||||||
|
*/
|
||||||
|
public static boolean isNativeImage() {
|
||||||
|
try {
|
||||||
|
return ImageInfo.inImageCode();
|
||||||
|
} catch (Throwable t) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user