5656import java .util .List ;
5757import java .util .Map ;
5858import java .util .Map .Entry ;
59- import java .util .ServiceLoader ;
6059import java .util .logging .Level ;
6160
62- import org .graalvm .nativeimage .ImageInfo ;
63-
6461import com .oracle .graal .python .PythonLanguage ;
6562import com .oracle .graal .python .builtins .modules .AbcModuleBuiltins ;
6663import com .oracle .graal .python .builtins .modules .ArrayModuleBuiltins ;
393390import com .oracle .truffle .api .CompilerDirectives .TruffleBoundary ;
394391import com .oracle .truffle .api .RootCallTarget ;
395392import com .oracle .truffle .api .TruffleFile ;
393+ import com .oracle .truffle .api .TruffleLanguage ;
396394import com .oracle .truffle .api .TruffleLanguage .Env ;
397395import com .oracle .truffle .api .TruffleLogger ;
396+ import com .oracle .truffle .api .TruffleOptions ;
398397import com .oracle .truffle .api .nodes .Node ;
399398import com .oracle .truffle .api .object .Shape ;
400399import 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