|
49 | 49 | import com.oracle.graal.python.builtins.PythonBuiltins;
|
50 | 50 | import com.oracle.graal.python.builtins.objects.dict.PDict;
|
51 | 51 | import com.oracle.graal.python.builtins.objects.ints.PInt;
|
| 52 | +import com.oracle.graal.python.builtins.objects.module.PythonModule; |
| 53 | +import com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNode; |
52 | 54 | import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
|
53 | 55 | import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
|
54 | 56 | import com.oracle.graal.python.runtime.PythonCore;
|
55 | 57 | import com.oracle.graal.python.runtime.PythonOptions;
|
| 58 | +import com.oracle.truffle.api.dsl.Cached; |
56 | 59 | import com.oracle.truffle.api.dsl.GenerateNodeFactory;
|
57 | 60 | import com.oracle.truffle.api.dsl.NodeFactory;
|
58 | 61 | import com.oracle.truffle.api.dsl.Specialization;
|
| 62 | +import com.oracle.truffle.api.object.HiddenKey; |
59 | 63 |
|
60 | 64 | /**
|
61 | 65 | * this builtin module is used to fill in truffle land config options into the sysconfig python
|
62 | 66 | * module
|
63 | 67 | */
|
64 | 68 | @CoreFunctions(defineModule = "_sysconfig")
|
65 | 69 | public class SysConfigModuleBuiltins extends PythonBuiltins {
|
66 |
| - private static final EconomicMap<String, Object> STATIC_CONFIG_OPTIONS = EconomicMap.create(); |
| 70 | + private static final HiddenKey CONFIG_OPTIONS = new HiddenKey("__data__"); |
67 | 71 |
|
68 | 72 | @Override
|
69 | 73 | public void initialize(PythonCore core) {
|
70 |
| - STATIC_CONFIG_OPTIONS.put("WITH_THREAD", PInt.intValue(core.getLanguage().getEngineOption(PythonOptions.WithThread))); |
71 | 74 | super.initialize(core);
|
| 75 | + EconomicMap<String, Object> configOptions = EconomicMap.create(); |
| 76 | + configOptions.put("WITH_THREAD", PInt.intValue(core.getLanguage().getEngineOption(PythonOptions.WithThread))); |
| 77 | + core.lookupBuiltinModule("_sysconfig").setAttribute(CONFIG_OPTIONS, configOptions); |
72 | 78 | }
|
73 | 79 |
|
74 | 80 | @Override
|
75 | 81 | protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {
|
76 | 82 | return SysConfigModuleBuiltinsFactory.getFactories();
|
77 | 83 | }
|
78 | 84 |
|
79 |
| - @Builtin(name = "get_config_vars", takesVarArgs = true) |
| 85 | + @Builtin(name = "get_config_vars", minNumOfPositionalArgs = 1, takesVarArgs = true, declaresExplicitSelf = true) |
80 | 86 | @GenerateNodeFactory
|
81 | 87 | abstract static class GetConfigVarsNode extends PythonBuiltinNode {
|
82 | 88 | @Specialization
|
83 |
| - PDict select(@SuppressWarnings("unused") Object[] arguments) { |
84 |
| - return factory().createDict(STATIC_CONFIG_OPTIONS); |
| 89 | + @SuppressWarnings("unchecked") |
| 90 | + PDict select(PythonModule self, |
| 91 | + @SuppressWarnings("unused") Object[] arguments, |
| 92 | + @Cached("create()") ReadAttributeFromObjectNode readNode) { |
| 93 | + EconomicMap<String, Object> configOptions = (EconomicMap<String, Object>) readNode.execute(self, CONFIG_OPTIONS); |
| 94 | + return factory().createDict(configOptions); |
85 | 95 | }
|
86 | 96 | }
|
87 | 97 | }
|
0 commit comments