42
42
import java .util .ServiceLoader ;
43
43
44
44
import com .oracle .graal .python .PythonLanguage ;
45
- import com .oracle .graal .python .builtins .PythonBuiltins .PythonBuiltinProvider ;
46
45
import com .oracle .graal .python .builtins .modules .ArrayModuleBuiltins ;
47
46
import com .oracle .graal .python .builtins .modules .AstModuleBuiltins ;
48
47
import com .oracle .graal .python .builtins .modules .AtexitModuleBuiltins ;
142
141
import com .oracle .truffle .api .CompilerDirectives .TruffleBoundary ;
143
142
import com .oracle .truffle .api .TruffleFile ;
144
143
import com .oracle .truffle .api .TruffleLanguage .Env ;
144
+ import com .oracle .truffle .api .TruffleOptions ;
145
145
import com .oracle .truffle .api .nodes .Node ;
146
146
import com .oracle .truffle .api .source .Source ;
147
147
import com .oracle .truffle .api .source .SourceSection ;
@@ -189,8 +189,9 @@ public final class Python3Core implements PythonCore {
189
189
"_sre" ,
190
190
};
191
191
192
- private static final PythonBuiltins [] BUILTINS ;
193
- static {
192
+ private final PythonBuiltins [] builtins ;
193
+
194
+ private static final PythonBuiltins [] initializeBuiltins () {
194
195
List <PythonBuiltins > builtins = new ArrayList <>();
195
196
builtins .addAll (Arrays .asList (new PythonBuiltins []{
196
197
new BuiltinConstructors (),
@@ -272,11 +273,13 @@ public final class Python3Core implements PythonCore {
272
273
new MemoryviewBuiltins (),
273
274
new SuperBuiltins (),
274
275
}));
275
- ServiceLoader <PythonBuiltinProvider > providers = ServiceLoader .load (PythonBuiltinProvider .class );
276
- for (PythonBuiltins .PythonBuiltinProvider provider : providers ) {
277
- builtins .add (provider .createInstance ());
276
+ if (!TruffleOptions .AOT ) {
277
+ ServiceLoader <PythonBuiltins > providers = ServiceLoader .load (PythonBuiltins .class );
278
+ for (PythonBuiltins builtin : providers ) {
279
+ builtins .add (builtin );
280
+ }
278
281
}
279
- BUILTINS = builtins .toArray (new PythonBuiltins [builtins .size ()]);
282
+ return builtins .toArray (new PythonBuiltins [builtins .size ()]);
280
283
}
281
284
282
285
// not using EnumMap, HashMap, etc. to allow this to fold away during partial evaluation
@@ -302,6 +305,7 @@ public final class Python3Core implements PythonCore {
302
305
303
306
public Python3Core (PythonParser parser ) {
304
307
this .parser = parser ;
308
+ this .builtins = initializeBuiltins ();
305
309
}
306
310
307
311
@ Override
@@ -495,7 +499,7 @@ private void initializeTypes() {
495
499
// n.b.: the builtin modules and classes and their constructors are initialized first here,
496
500
// so we have the mapping from java classes to python classes and builtin names to modules
497
501
// available.
498
- for (PythonBuiltins builtin : BUILTINS ) {
502
+ for (PythonBuiltins builtin : builtins ) {
499
503
CoreFunctions annotation = builtin .getClass ().getAnnotation (CoreFunctions .class );
500
504
if (annotation .defineModule ().length () > 0 ) {
501
505
createModule (annotation .defineModule ());
@@ -514,7 +518,7 @@ private void initializeTypes() {
514
518
}
515
519
516
520
private void populateBuiltins () {
517
- for (PythonBuiltins builtin : BUILTINS ) {
521
+ for (PythonBuiltins builtin : builtins ) {
518
522
builtin .initialize (this );
519
523
CoreFunctions annotation = builtin .getClass ().getAnnotation (CoreFunctions .class );
520
524
if (annotation .defineModule ().length () > 0 ) {
@@ -545,14 +549,14 @@ private PythonModule createModule(String name) {
545
549
return mod ;
546
550
}
547
551
548
- private void addBuiltinsTo (PythonObject obj , PythonBuiltins builtins ) {
549
- Map <String , Object > builtinConstants = builtins .getBuiltinConstants ();
552
+ private void addBuiltinsTo (PythonObject obj , PythonBuiltins builtinsForObj ) {
553
+ Map <String , Object > builtinConstants = builtinsForObj .getBuiltinConstants ();
550
554
for (Map .Entry <String , Object > entry : builtinConstants .entrySet ()) {
551
555
String constantName = entry .getKey ();
552
556
obj .setAttribute (constantName , entry .getValue ());
553
557
}
554
558
555
- Map <String , BoundBuiltinCallable <?>> builtinFunctions = builtins .getBuiltinFunctions ();
559
+ Map <String , BoundBuiltinCallable <?>> builtinFunctions = builtinsForObj .getBuiltinFunctions ();
556
560
for (Entry <String , BoundBuiltinCallable <?>> entry : builtinFunctions .entrySet ()) {
557
561
String methodName = entry .getKey ();
558
562
Object value ;
@@ -565,7 +569,7 @@ private void addBuiltinsTo(PythonObject obj, PythonBuiltins builtins) {
565
569
obj .setAttribute (methodName , value );
566
570
}
567
571
568
- Map <PythonBuiltinClass , Entry <PythonBuiltinClassType [], Boolean >> builtinClasses = builtins .getBuiltinClasses ();
572
+ Map <PythonBuiltinClass , Entry <PythonBuiltinClassType [], Boolean >> builtinClasses = builtinsForObj .getBuiltinClasses ();
569
573
for (Entry <PythonBuiltinClass , Entry <PythonBuiltinClassType [], Boolean >> entry : builtinClasses .entrySet ()) {
570
574
boolean isPublic = entry .getValue ().getValue ();
571
575
if (isPublic ) {
0 commit comments