|
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