Skip to content

Commit 27f1315

Browse files
timfelcosminbasca
authored andcommitted
search for builtin providers when creating a new context
1 parent 538d50f commit 27f1315

File tree

2 files changed

+97
-80
lines changed

2 files changed

+97
-80
lines changed

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

Lines changed: 93 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,16 @@
3333
import java.math.BigInteger;
3434
import java.net.MalformedURLException;
3535
import java.net.URL;
36+
import java.util.ArrayList;
3637
import java.util.Arrays;
3738
import java.util.HashMap;
39+
import java.util.List;
3840
import java.util.Map;
3941
import java.util.Map.Entry;
42+
import java.util.ServiceLoader;
4043

4144
import com.oracle.graal.python.PythonLanguage;
45+
import com.oracle.graal.python.builtins.PythonBuiltins.PythonBuiltinProvider;
4246
import com.oracle.graal.python.builtins.modules.ArrayModuleBuiltins;
4347
import com.oracle.graal.python.builtins.modules.AstModuleBuiltins;
4448
import com.oracle.graal.python.builtins.modules.AtexitModuleBuiltins;
@@ -185,86 +189,95 @@ public final class Python3Core implements PythonCore {
185189
"_sre",
186190
};
187191

188-
private final PythonBuiltins[] BUILTINS = new PythonBuiltins[]{
189-
new BuiltinConstructors(),
190-
new BuiltinFunctions(),
191-
new InteropModuleBuiltins(),
192-
new ObjectBuiltins(),
193-
new CellBuiltins(),
194-
new BoolBuiltins(),
195-
new FloatBuiltins(),
196-
new BytesBuiltins(),
197-
new ComplexBuiltins(),
198-
new ByteArrayBuiltins(),
199-
new TypeBuiltins(),
200-
new IntBuiltins(),
201-
new TruffleObjectBuiltins(),
202-
new ListBuiltins(),
203-
new DictBuiltins(),
204-
new DictViewBuiltins(),
205-
new DictValuesBuiltins(),
206-
new DictKeysIteratorBuiltins(),
207-
new DictValuesIteratorBuiltins(),
208-
new DictItemsIteratorBuiltins(),
209-
new RangeBuiltins(),
210-
new SliceBuiltins(),
211-
new TupleBuiltins(),
212-
new StringBuiltins(),
213-
new SetBuiltins(),
214-
new FrozenSetBuiltins(),
215-
new IteratorBuiltins(),
216-
new ReversedBuiltins(),
217-
new PZipBuiltins(),
218-
new EnumerateBuiltins(),
219-
new SentinelIteratorBuiltins(),
220-
new ForeignIteratorBuiltins(),
221-
new GeneratorBuiltins(),
222-
new AbstractFunctionBuiltins(),
223-
new FunctionBuiltins(),
224-
new BuiltinFunctionBuiltins(),
225-
new AbstractMethodBuiltins(),
226-
new MethodBuiltins(),
227-
new BuiltinMethodBuiltins(),
228-
new CodeBuiltins(),
229-
new FrameBuiltins(),
230-
new MappingproxyBuiltins(),
231-
new GetSetDescriptorTypeBuiltins(),
232-
new BaseExceptionBuiltins(),
233-
new PosixModuleBuiltins(),
234-
new ImpModuleBuiltins(),
235-
new ArrayModuleBuiltins(),
236-
new ArrayBuiltins(),
237-
new TimeModuleBuiltins(),
238-
new MathModuleBuiltins(),
239-
new MarshalModuleBuiltins(),
240-
new RandomModuleBuiltins(),
241-
new RandomBuiltins(),
242-
new TruffleCextBuiltins(),
243-
new WeakRefModuleBuiltins(),
244-
new ReferenceTypeBuiltins(),
245-
new IOModuleBuiltins(),
246-
new StringModuleBuiltins(),
247-
new ItertoolsModuleBuiltins(),
248-
new FunctoolsModuleBuiltins(),
249-
new ErrnoModuleBuiltins(),
250-
new CodecsModuleBuiltins(),
251-
new CollectionsModuleBuiltins(),
252-
new JavaModuleBuiltins(),
253-
new SREModuleBuiltins(),
254-
new AstModuleBuiltins(),
255-
new SelectModuleBuiltins(),
256-
new SignalModuleBuiltins(),
257-
new TracebackBuiltins(),
258-
new GcModuleBuiltins(),
259-
new AtexitModuleBuiltins(),
260-
new FaulthandlerModuleBuiltins(),
261-
new UnicodeDataModuleBuiltins(),
262-
new LocaleModuleBuiltins(),
263-
new SysModuleBuiltins(),
264-
new BufferBuiltins(),
265-
new MemoryviewBuiltins(),
266-
new SuperBuiltins(),
267-
};
192+
private static final PythonBuiltins[] BUILTINS;
193+
static {
194+
List<PythonBuiltins> builtins = new ArrayList<>();
195+
builtins.addAll(Arrays.asList(new PythonBuiltins[]{
196+
new BuiltinConstructors(),
197+
new BuiltinFunctions(),
198+
new InteropModuleBuiltins(),
199+
new ObjectBuiltins(),
200+
new CellBuiltins(),
201+
new BoolBuiltins(),
202+
new FloatBuiltins(),
203+
new BytesBuiltins(),
204+
new ComplexBuiltins(),
205+
new ByteArrayBuiltins(),
206+
new TypeBuiltins(),
207+
new IntBuiltins(),
208+
new TruffleObjectBuiltins(),
209+
new ListBuiltins(),
210+
new DictBuiltins(),
211+
new DictViewBuiltins(),
212+
new DictValuesBuiltins(),
213+
new DictKeysIteratorBuiltins(),
214+
new DictValuesIteratorBuiltins(),
215+
new DictItemsIteratorBuiltins(),
216+
new RangeBuiltins(),
217+
new SliceBuiltins(),
218+
new TupleBuiltins(),
219+
new StringBuiltins(),
220+
new SetBuiltins(),
221+
new FrozenSetBuiltins(),
222+
new IteratorBuiltins(),
223+
new ReversedBuiltins(),
224+
new PZipBuiltins(),
225+
new EnumerateBuiltins(),
226+
new SentinelIteratorBuiltins(),
227+
new ForeignIteratorBuiltins(),
228+
new GeneratorBuiltins(),
229+
new AbstractFunctionBuiltins(),
230+
new FunctionBuiltins(),
231+
new BuiltinFunctionBuiltins(),
232+
new AbstractMethodBuiltins(),
233+
new MethodBuiltins(),
234+
new BuiltinMethodBuiltins(),
235+
new CodeBuiltins(),
236+
new FrameBuiltins(),
237+
new MappingproxyBuiltins(),
238+
new GetSetDescriptorTypeBuiltins(),
239+
new BaseExceptionBuiltins(),
240+
new PosixModuleBuiltins(),
241+
new ImpModuleBuiltins(),
242+
new ArrayModuleBuiltins(),
243+
new ArrayBuiltins(),
244+
new TimeModuleBuiltins(),
245+
new MathModuleBuiltins(),
246+
new MarshalModuleBuiltins(),
247+
new RandomModuleBuiltins(),
248+
new RandomBuiltins(),
249+
new TruffleCextBuiltins(),
250+
new WeakRefModuleBuiltins(),
251+
new ReferenceTypeBuiltins(),
252+
new IOModuleBuiltins(),
253+
new StringModuleBuiltins(),
254+
new ItertoolsModuleBuiltins(),
255+
new FunctoolsModuleBuiltins(),
256+
new ErrnoModuleBuiltins(),
257+
new CodecsModuleBuiltins(),
258+
new CollectionsModuleBuiltins(),
259+
new JavaModuleBuiltins(),
260+
new SREModuleBuiltins(),
261+
new AstModuleBuiltins(),
262+
new SelectModuleBuiltins(),
263+
new SignalModuleBuiltins(),
264+
new TracebackBuiltins(),
265+
new GcModuleBuiltins(),
266+
new AtexitModuleBuiltins(),
267+
new FaulthandlerModuleBuiltins(),
268+
new UnicodeDataModuleBuiltins(),
269+
new LocaleModuleBuiltins(),
270+
new SysModuleBuiltins(),
271+
new BufferBuiltins(),
272+
new MemoryviewBuiltins(),
273+
new SuperBuiltins(),
274+
}));
275+
ServiceLoader<PythonBuiltinProvider> providers = ServiceLoader.load(PythonBuiltinProvider.class);
276+
for (PythonBuiltins.PythonBuiltinProvider provider : providers) {
277+
builtins.add(provider.createInstance());
278+
}
279+
BUILTINS = builtins.toArray(new PythonBuiltins[builtins.size()]);
280+
}
268281

269282
// not using EnumMap, HashMap, etc. to allow this to fold away during partial evaluation
270283
@CompilationFinal(dimensions = 1) private final PythonBuiltinClass[] builtinTypes = new PythonBuiltinClass[PythonBuiltinClassType.VALUES.length];

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@
4848
import com.oracle.truffle.api.dsl.NodeFactory;
4949

5050
public abstract class PythonBuiltins {
51+
public static interface PythonBuiltinProvider {
52+
public abstract PythonBuiltins createInstance();
53+
}
54+
5155
protected final Map<String, Object> builtinConstants = new HashMap<>();
5256
private final Map<String, BoundBuiltinCallable<?>> builtinFunctions = new HashMap<>();
5357
private final Map<PythonBuiltinClass, Map.Entry<PythonBuiltinClassType[], Boolean>> builtinClasses = new HashMap<>();

0 commit comments

Comments
 (0)