Skip to content

Commit 4bca05e

Browse files
committed
[GR-29646] Fix #190: Isolate STATIC_CONFIG_OPTIONS
PullRequest: graalpython/1639
2 parents 0b217ac + 60dc066 commit 4bca05e

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/SysConfigModuleBuiltins.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,39 +49,49 @@
4949
import com.oracle.graal.python.builtins.PythonBuiltins;
5050
import com.oracle.graal.python.builtins.objects.dict.PDict;
5151
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;
5254
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
5355
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
5456
import com.oracle.graal.python.runtime.PythonCore;
5557
import com.oracle.graal.python.runtime.PythonOptions;
58+
import com.oracle.truffle.api.dsl.Cached;
5659
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
5760
import com.oracle.truffle.api.dsl.NodeFactory;
5861
import com.oracle.truffle.api.dsl.Specialization;
62+
import com.oracle.truffle.api.object.HiddenKey;
5963

6064
/**
6165
* this builtin module is used to fill in truffle land config options into the sysconfig python
6266
* module
6367
*/
6468
@CoreFunctions(defineModule = "_sysconfig")
6569
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__");
6771

6872
@Override
6973
public void initialize(PythonCore core) {
70-
STATIC_CONFIG_OPTIONS.put("WITH_THREAD", PInt.intValue(core.getLanguage().getEngineOption(PythonOptions.WithThread)));
7174
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);
7278
}
7379

7480
@Override
7581
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {
7682
return SysConfigModuleBuiltinsFactory.getFactories();
7783
}
7884

79-
@Builtin(name = "get_config_vars", takesVarArgs = true)
85+
@Builtin(name = "get_config_vars", minNumOfPositionalArgs = 1, takesVarArgs = true, declaresExplicitSelf = true)
8086
@GenerateNodeFactory
8187
abstract static class GetConfigVarsNode extends PythonBuiltinNode {
8288
@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);
8595
}
8696
}
8797
}

0 commit comments

Comments
 (0)