Skip to content

Commit 7757367

Browse files
committed
[GR-61159] Use Env#isPreInitialization() instead of ImageInfo.inImageBuildtimeCode()
PullRequest: graalpython/3695
2 parents 2d10b2f + bbf6ab7 commit 7757367

File tree

35 files changed

+316
-405
lines changed

35 files changed

+316
-405
lines changed

graalpython/com.oracle.graal.python.shell/src/com/oracle/graal/python/shell/GraalPythonMain.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ protected List<String> preprocessArguments(List<String> givenArgs, Map<String, S
411411
}
412412
}
413413

414-
if (!ImageInfo.inImageCode()) {
414+
if (!isAOT()) {
415415
for (String arg : ManagementFactory.getRuntimeMXBean().getInputArguments()) {
416416
if (arg.equals("-ea")) {
417417
addRelaunchArg("--vm.ea");
@@ -623,7 +623,7 @@ private String[] getExecutableList() {
623623
}
624624

625625
// This should only be reached if this main is directly executed via Java.
626-
if (!ImageInfo.inImageCode()) {
626+
if (!isAOT()) {
627627
StringBuilder sb = new StringBuilder();
628628
ArrayList<String> exec_list = new ArrayList<>();
629629
sb.append(System.getProperty("java.home")).append(File.separator).append("bin").append(File.separator).append("java");

graalpython/com.oracle.graal.python.test/src/META-INF/services/com.oracle.graal.python.builtins.PythonBuiltins

Lines changed: 0 additions & 1 deletion
This file was deleted.

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/advanced/CustomBuiltinsTest.java

Lines changed: 0 additions & 52 deletions
This file was deleted.

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/advanced/CustomModule.java

Lines changed: 0 additions & 65 deletions
This file was deleted.

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/PythonLanguage.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
import java.util.logging.Level;
5454

5555
import org.graalvm.home.Version;
56-
import org.graalvm.nativeimage.ImageInfo;
5756
import org.graalvm.options.OptionDescriptors;
5857
import org.graalvm.options.OptionKey;
5958
import org.graalvm.options.OptionValues;
@@ -385,8 +384,8 @@ public StructSequence.DescriptorCallTargets getOrCreateStructSequenceCallTargets
385384
return factory.apply(descriptor);
386385
}
387386
if (descriptor instanceof BuiltinTypeDescriptor builtinDescriptor) {
388-
// There must be finite set of objects initialized at build time, no need for a weak map
389-
assert !ImageInfo.inImageCode() || builtinDescriptor.wasInitializedAtBuildTime();
387+
// There must be finite set of objects initialized in static final fields, no need for a
388+
// weak map
390389
return structSequenceBuiltinTargets.computeIfAbsent(builtinDescriptor, factory);
391390
}
392391
return getOrCreateStructSeqNonBuiltinTargets(descriptor, factory);
@@ -498,6 +497,7 @@ protected boolean patchContext(PythonContext context, Env newEnv) {
498497
Python3Core.writeInfo("Cannot use preinitialized context.");
499498
return false;
500499
}
500+
context.resetPerfCounter();
501501
context.initializeHomeAndPrefixPaths(newEnv, getLanguageHome());
502502
Python3Core.writeInfo("Using preinitialized context.");
503503
context.patch(newEnv);
@@ -989,7 +989,7 @@ public static Source newSource(PythonContext ctxt, TruffleFile src, String name)
989989
}
990990

991991
private static Source newSource(PythonContext context, SourceBuilder srcBuilder) throws IOException {
992-
if (getPythonOS() == PLATFORM_WIN32 && ImageInfo.inImageBuildtimeCode()) {
992+
if (getPythonOS() == PLATFORM_WIN32 && context.getEnv().isPreInitialization()) {
993993
// canonicalization on windows means something else than on linux and causes issues
994994
// with paths
995995
srcBuilder.canonicalizePath(false);
@@ -1218,7 +1218,7 @@ protected void exitContext(PythonContext context, ExitMode exitMode, int exitCod
12181218
if (context.getCApiContext() != null) {
12191219
context.getCApiContext().exitCApiContext();
12201220
}
1221-
if (!PythonImageBuildOptions.WITHOUT_PLATFORM_ACCESS && !ImageInfo.inImageBuildtimeCode()) {
1221+
if (!PythonImageBuildOptions.WITHOUT_PLATFORM_ACCESS && !context.getEnv().isPreInitialization()) {
12221222
// Reset signal handlers back to what they were
12231223
PythonModule signalModule = context.lookupBuiltinModule(T__SIGNAL);
12241224
if (signalModule != null) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/CoreFunctions.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2021, Oracle and/or its affiliates.
2+
* Copyright (c) 2017, 2025, Oracle and/or its affiliates.
33
* Copyright (c) 2013, Regents of the University of California
44
*
55
* All rights reserved.
@@ -40,11 +40,7 @@
4040
*/
4141
PythonOS os() default PythonOS.PLATFORM_ANY;
4242

43-
String publicName() default "";
44-
4543
PythonBuiltinClassType[] extendClasses() default {};
4644

47-
String pythonFile() default "";
48-
4945
boolean isEager() default false;
5046
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 18 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,8 @@
5656
import java.util.List;
5757
import java.util.Map;
5858
import java.util.Map.Entry;
59-
import java.util.ServiceLoader;
6059
import java.util.logging.Level;
6160

62-
import org.graalvm.nativeimage.ImageInfo;
63-
6461
import com.oracle.graal.python.PythonLanguage;
6562
import com.oracle.graal.python.builtins.modules.AbcModuleBuiltins;
6663
import com.oracle.graal.python.builtins.modules.ArrayModuleBuiltins;
@@ -393,8 +390,10 @@
393390
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
394391
import com.oracle.truffle.api.RootCallTarget;
395392
import com.oracle.truffle.api.TruffleFile;
393+
import com.oracle.truffle.api.TruffleLanguage;
396394
import com.oracle.truffle.api.TruffleLanguage.Env;
397395
import com.oracle.truffle.api.TruffleLogger;
396+
import com.oracle.truffle.api.TruffleOptions;
398397
import com.oracle.truffle.api.nodes.Node;
399398
import com.oracle.truffle.api.object.Shape;
400399
import com.oracle.truffle.api.source.Source;
@@ -417,28 +416,15 @@ public abstract class Python3Core {
417416

418417
private static TruffleString[] initializeCoreFiles() {
419418
// Order matters!
420-
List<TruffleString> coreFiles = new ArrayList<>(Arrays.asList(
419+
return new TruffleString[]{
421420
toTruffleStringUncached("__graalpython__"),
422421
toTruffleStringUncached("_weakref"),
423422
toTruffleStringUncached("unicodedata"),
424423
toTruffleStringUncached("_sre"),
425424
toTruffleStringUncached("_sysconfig"),
426425
toTruffleStringUncached("java"),
427-
toTruffleStringUncached("pip_hook")));
428-
// add service loader defined python file extensions
429-
if (!ImageInfo.inImageRuntimeCode()) {
430-
ServiceLoader<PythonBuiltins> providers = ServiceLoader.load(PythonBuiltins.class, Python3Core.class.getClassLoader());
431-
PythonOS currentOs = PythonOS.getPythonOS();
432-
for (PythonBuiltins builtin : providers) {
433-
CoreFunctions annotation = builtin.getClass().getAnnotation(CoreFunctions.class);
434-
if (!annotation.pythonFile().isEmpty() &&
435-
(annotation.os() == PythonOS.PLATFORM_ANY || annotation.os() == currentOs)) {
436-
coreFiles.add(toTruffleStringUncached(annotation.pythonFile()));
437-
}
438-
}
439-
}
440-
coreFiles.removeAll(Arrays.asList(new TruffleString[]{null}));
441-
return coreFiles.toArray(new TruffleString[coreFiles.size()]);
426+
toTruffleStringUncached("pip_hook")
427+
};
442428
}
443429

444430
private final PythonBuiltins[] builtins;
@@ -470,7 +456,7 @@ private static void filterBuiltins(List<PythonBuiltins> builtins) {
470456
builtins.removeAll(toRemove);
471457
}
472458

473-
private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed, boolean socketIOAllowed) {
459+
private static PythonBuiltins[] initializeBuiltins(TruffleLanguage.Env env) {
474460
List<PythonBuiltins> builtins = new ArrayList<>(Arrays.asList(new BuiltinConstructors(),
475461
new AbcModuleBuiltins(),
476462
new BuiltinFunctions(),
@@ -647,9 +633,9 @@ private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed,
647633
new JSONModuleBuiltins(),
648634
new SREModuleBuiltins(),
649635
new AstModuleBuiltins(),
650-
PythonImageBuildOptions.WITHOUT_NATIVE_POSIX && (PythonImageBuildOptions.WITHOUT_JAVA_INET || !socketIOAllowed) ? null : new SelectModuleBuiltins(),
651-
PythonImageBuildOptions.WITHOUT_NATIVE_POSIX && (PythonImageBuildOptions.WITHOUT_JAVA_INET || !socketIOAllowed) ? null : new SocketModuleBuiltins(),
652-
PythonImageBuildOptions.WITHOUT_NATIVE_POSIX && (PythonImageBuildOptions.WITHOUT_JAVA_INET || !socketIOAllowed) ? null : new SocketBuiltins(),
636+
PythonImageBuildOptions.WITHOUT_NATIVE_POSIX && (PythonImageBuildOptions.WITHOUT_JAVA_INET || !env.isSocketIOAllowed()) ? null : new SelectModuleBuiltins(),
637+
PythonImageBuildOptions.WITHOUT_NATIVE_POSIX && (PythonImageBuildOptions.WITHOUT_JAVA_INET || !env.isSocketIOAllowed()) ? null : new SocketModuleBuiltins(),
638+
PythonImageBuildOptions.WITHOUT_NATIVE_POSIX && (PythonImageBuildOptions.WITHOUT_JAVA_INET || !env.isSocketIOAllowed()) ? null : new SocketBuiltins(),
653639
PythonImageBuildOptions.WITHOUT_PLATFORM_ACCESS ? null : new SignalModuleBuiltins(),
654640
new TracebackBuiltins(),
655641
new GcModuleBuiltins(),
@@ -803,15 +789,11 @@ private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed,
803789
builtins.add(new LsprofModuleBuiltins());
804790
builtins.add(LsprofModuleBuiltins.newProfilerBuiltins());
805791
}
806-
if (!PythonImageBuildOptions.WITHOUT_COMPRESSION_LIBRARIES && (nativeAccessAllowed || ImageInfo.inImageBuildtimeCode())) {
792+
if (!PythonImageBuildOptions.WITHOUT_COMPRESSION_LIBRARIES && (env.isNativeAccessAllowed() || env.isPreInitialization())) {
807793
builtins.add(new BZ2CompressorBuiltins());
808794
builtins.add(new BZ2DecompressorBuiltins());
809795
builtins.add(new BZ2ModuleBuiltins());
810796
}
811-
ServiceLoader<PythonBuiltins> providers = ServiceLoader.load(PythonBuiltins.class, Python3Core.class.getClassLoader());
812-
for (PythonBuiltins builtin : providers) {
813-
builtins.add(builtin);
814-
}
815797
filterBuiltins(builtins);
816798
return builtins.toArray(new PythonBuiltins[builtins.size()]);
817799
}
@@ -844,15 +826,15 @@ private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed,
844826

845827
private final PythonLanguage language;
846828

847-
public Python3Core(PythonLanguage language, boolean isNativeSupportAllowed, boolean socketIOAllowed) {
829+
public Python3Core(PythonLanguage language, TruffleLanguage.Env env) {
848830
this.language = language;
849-
this.builtins = initializeBuiltins(isNativeSupportAllowed, socketIOAllowed);
831+
this.builtins = initializeBuiltins(env);
850832
this.coreFiles = initializeCoreFiles();
851833
}
852834

853835
@CompilerDirectives.ValueType
854836
public static class SysModuleState {
855-
private int recursionLimit = ImageInfo.inImageCode() ? NATIVE_REC_LIM : REC_LIM;
837+
private int recursionLimit = TruffleOptions.AOT ? NATIVE_REC_LIM : REC_LIM;
856838
private int checkInterval = 100;
857839
private double switchInterval = 0.005;
858840

@@ -1040,10 +1022,10 @@ private void initializePython3Core(TruffleString coreHome) {
10401022
/**
10411023
* Run post-initialization code that needs a fully working Python environment. This will be run
10421024
* eagerly when the context is initialized on the JVM or a new context is created on SVM, but is
1043-
* omitted when the native image is generated.
1025+
* omitted when creating a pre-initialized context.
10441026
*/
1045-
public final void postInitialize() {
1046-
if (!ImageInfo.inImageBuildtimeCode() || ImageInfo.inImageRuntimeCode()) {
1027+
public final void postInitialize(Env env) {
1028+
if (!env.isPreInitialization()) {
10471029
initialized = false;
10481030

10491031
for (PythonBuiltins builtin : builtins) {
@@ -1060,9 +1042,9 @@ public final void postInitialize() {
10601042
* fallback to another _bz2 implementation (e.g. LLVM or maybe some Java lib). This
10611043
* needs to be done here and cannot be done in 'initializeBuiltins' because then we
10621044
* would never include the intrinsified _bz2 module in the native image since native
1063-
* access is never allowed during native image build time.
1045+
* access is never allowed during context pre-initialization.
10641046
*/
1065-
if (!PythonImageBuildOptions.WITHOUT_COMPRESSION_LIBRARIES && ImageInfo.inImageCode() && !getContext().isNativeAccessAllowed()) {
1047+
if (!PythonImageBuildOptions.WITHOUT_COMPRESSION_LIBRARIES && TruffleOptions.AOT && !getContext().isNativeAccessAllowed()) {
10661048
removeBuiltinModule(BuiltinNames.T_BZ2);
10671049
}
10681050

0 commit comments

Comments
 (0)