|
76 | 76 | import com.oracle.graal.python.builtins.modules.SignalModuleBuiltins;
|
77 | 77 | import com.oracle.graal.python.builtins.modules.SocketModuleBuiltins;
|
78 | 78 | import com.oracle.graal.python.builtins.modules.StringModuleBuiltins;
|
| 79 | +import com.oracle.graal.python.builtins.modules.SysConfigModuleBuiltins; |
79 | 80 | import com.oracle.graal.python.builtins.modules.SysModuleBuiltins;
|
| 81 | +import com.oracle.graal.python.builtins.modules.ThreadModuleBuiltins; |
80 | 82 | import com.oracle.graal.python.builtins.modules.TimeModuleBuiltins;
|
81 | 83 | import com.oracle.graal.python.builtins.modules.TruffleCextBuiltins;
|
82 | 84 | import com.oracle.graal.python.builtins.modules.UnicodeDataModuleBuiltins;
|
|
135 | 137 | import com.oracle.graal.python.builtins.objects.slice.SliceBuiltins;
|
136 | 138 | import com.oracle.graal.python.builtins.objects.str.StringBuiltins;
|
137 | 139 | import com.oracle.graal.python.builtins.objects.superobject.SuperBuiltins;
|
| 140 | +import com.oracle.graal.python.builtins.objects.thread.LockBuiltins; |
| 141 | +import com.oracle.graal.python.builtins.objects.thread.RLockBuiltins; |
| 142 | +import com.oracle.graal.python.builtins.objects.thread.ThreadBuiltins; |
138 | 143 | import com.oracle.graal.python.builtins.objects.traceback.TracebackBuiltins;
|
139 | 144 | import com.oracle.graal.python.builtins.objects.tuple.TupleBuiltins;
|
140 | 145 | import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
|
|
151 | 156 | import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
|
152 | 157 | import com.oracle.truffle.api.RootCallTarget;
|
153 | 158 | import com.oracle.truffle.api.TruffleFile;
|
154 |
| -import com.oracle.truffle.api.TruffleOptions; |
155 | 159 | import com.oracle.truffle.api.TruffleLanguage.Env;
|
| 160 | +import com.oracle.truffle.api.TruffleOptions; |
156 | 161 | import com.oracle.truffle.api.nodes.Node;
|
157 | 162 | import com.oracle.truffle.api.nodes.RootNode;
|
158 | 163 | import com.oracle.truffle.api.source.Source;
|
|
163 | 168 | * types.
|
164 | 169 | */
|
165 | 170 | public final class Python3Core implements PythonCore {
|
166 |
| - // Order matters! |
167 |
| - private static final String[] CORE_FILES = new String[]{ |
168 |
| - "_descriptor", |
169 |
| - "object", |
170 |
| - "sys", |
171 |
| - "dict", |
172 |
| - "_mappingproxy", |
173 |
| - "str", |
174 |
| - "type", |
175 |
| - "_imp", |
176 |
| - "function", |
177 |
| - "_functools", |
178 |
| - "method", |
179 |
| - "code", |
180 |
| - "_warnings", |
181 |
| - "posix", |
182 |
| - "_io", |
183 |
| - "_frozen_importlib", |
184 |
| - "classes", |
185 |
| - "_weakref", |
186 |
| - "set", |
187 |
| - "itertools", |
188 |
| - "base_exception", |
189 |
| - "python_cext", |
190 |
| - "_collections", |
191 |
| - "memoryview", |
192 |
| - "list", |
193 |
| - "_codecs", |
194 |
| - "bytes", |
195 |
| - "bytearray", |
196 |
| - "float", |
197 |
| - "time", |
198 |
| - "unicodedata", |
199 |
| - "_locale", |
200 |
| - "_sre", |
201 |
| - "function", |
202 |
| - "_socket", |
203 |
| - }; |
| 171 | + private final String[] coreFiles; |
| 172 | + |
| 173 | + private static final String[] initializeCoreFiles() { |
| 174 | + // Order matters! |
| 175 | + List<String> coreFiles = new ArrayList<>(Arrays.asList( |
| 176 | + "_descriptor", |
| 177 | + "object", |
| 178 | + "sys", |
| 179 | + "dict", |
| 180 | + "_mappingproxy", |
| 181 | + "str", |
| 182 | + "type", |
| 183 | + "_imp", |
| 184 | + "function", |
| 185 | + "_functools", |
| 186 | + "method", |
| 187 | + "code", |
| 188 | + "_warnings", |
| 189 | + "posix", |
| 190 | + "_io", |
| 191 | + "_frozen_importlib", |
| 192 | + "classes", |
| 193 | + "_weakref", |
| 194 | + "set", |
| 195 | + "itertools", |
| 196 | + "base_exception", |
| 197 | + "python_cext", |
| 198 | + "_collections", |
| 199 | + "memoryview", |
| 200 | + "list", |
| 201 | + "_codecs", |
| 202 | + "bytes", |
| 203 | + "bytearray", |
| 204 | + "float", |
| 205 | + "time", |
| 206 | + "unicodedata", |
| 207 | + "_locale", |
| 208 | + "_sre", |
| 209 | + "function", |
| 210 | + "_sysconfig", |
| 211 | + "_socket", |
| 212 | + "_thread")); |
| 213 | + |
| 214 | + return coreFiles.toArray(new String[coreFiles.size()]); |
| 215 | + } |
204 | 216 |
|
205 | 217 | private final PythonBuiltins[] builtins;
|
206 | 218 |
|
@@ -289,13 +301,22 @@ private static final PythonBuiltins[] initializeBuiltins() {
|
289 | 301 | new PosixSubprocessModuleBuiltins(),
|
290 | 302 | new CtypesModuleBuiltins(),
|
291 | 303 | new ReadlineModuleBuiltins(),
|
292 |
| - new PyExpatModuleBuiltins())); |
| 304 | + new PyExpatModuleBuiltins(), |
| 305 | + new SysConfigModuleBuiltins())); |
293 | 306 | if (!TruffleOptions.AOT) {
|
294 | 307 | ServiceLoader<PythonBuiltins> providers = ServiceLoader.load(PythonBuiltins.class);
|
295 | 308 | for (PythonBuiltins builtin : providers) {
|
296 | 309 | builtins.add(builtin);
|
297 | 310 | }
|
298 | 311 | }
|
| 312 | + // threads |
| 313 | + if (PythonLanguage.WITH_THREADS) { |
| 314 | + builtins.addAll(new ArrayList<>(Arrays.asList( |
| 315 | + new ThreadModuleBuiltins(), |
| 316 | + new ThreadBuiltins(), |
| 317 | + new LockBuiltins(), |
| 318 | + new RLockBuiltins()))); |
| 319 | + } |
299 | 320 | return builtins.toArray(new PythonBuiltins[builtins.size()]);
|
300 | 321 | }
|
301 | 322 |
|
@@ -323,6 +344,7 @@ private static final PythonBuiltins[] initializeBuiltins() {
|
323 | 344 | public Python3Core(PythonParser parser) {
|
324 | 345 | this.parser = parser;
|
325 | 346 | this.builtins = initializeBuiltins();
|
| 347 | + this.coreFiles = initializeCoreFiles(); |
326 | 348 | }
|
327 | 349 |
|
328 | 350 | @Override
|
@@ -363,7 +385,7 @@ private void initializeJavaCore() {
|
363 | 385 | private void initializePythonCore() {
|
364 | 386 | String coreHome = PythonCore.getCoreHomeOrFail();
|
365 | 387 | loadFile("builtins", coreHome);
|
366 |
| - for (String s : CORE_FILES) { |
| 388 | + for (String s : coreFiles) { |
367 | 389 | loadFile(s, coreHome);
|
368 | 390 | }
|
369 | 391 | exportCInterface(getContext());
|
@@ -526,7 +548,10 @@ private void initializeTypes() {
|
526 | 548 | for (PythonBuiltinClassType builtinClass : PythonBuiltinClassType.VALUES) {
|
527 | 549 | String module = builtinClass.getPublicInModule();
|
528 | 550 | if (module != null) {
|
529 |
| - lookupBuiltinModule(module).setAttribute(builtinClass.getName(), lookupType(builtinClass)); |
| 551 | + PythonModule pythonModule = lookupBuiltinModule(module); |
| 552 | + if (pythonModule != null) { |
| 553 | + pythonModule.setAttribute(builtinClass.getName(), lookupType(builtinClass)); |
| 554 | + } |
530 | 555 | }
|
531 | 556 | }
|
532 | 557 | // now initialize well-known objects
|
|
0 commit comments