|
33 | 33 | import java.math.BigInteger;
|
34 | 34 | import java.net.MalformedURLException;
|
35 | 35 | import java.net.URL;
|
| 36 | +import java.util.ArrayList; |
36 | 37 | import java.util.Arrays;
|
37 | 38 | import java.util.HashMap;
|
| 39 | +import java.util.List; |
38 | 40 | import java.util.Map;
|
39 | 41 | import java.util.Map.Entry;
|
| 42 | +import java.util.ServiceLoader; |
40 | 43 |
|
41 | 44 | import com.oracle.graal.python.PythonLanguage;
|
| 45 | +import com.oracle.graal.python.builtins.PythonBuiltins.PythonBuiltinProvider; |
42 | 46 | import com.oracle.graal.python.builtins.modules.ArrayModuleBuiltins;
|
43 | 47 | import com.oracle.graal.python.builtins.modules.AstModuleBuiltins;
|
44 | 48 | import com.oracle.graal.python.builtins.modules.AtexitModuleBuiltins;
|
@@ -185,86 +189,95 @@ public final class Python3Core implements PythonCore {
|
185 | 189 | "_sre",
|
186 | 190 | };
|
187 | 191 |
|
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 | + } |
268 | 281 |
|
269 | 282 | // not using EnumMap, HashMap, etc. to allow this to fold away during partial evaluation
|
270 | 283 | @CompilationFinal(dimensions = 1) private final PythonBuiltinClass[] builtinTypes = new PythonBuiltinClass[PythonBuiltinClassType.VALUES.length];
|
|
0 commit comments