Skip to content

Commit 9855dfc

Browse files
committed
Load system env on startup.
1 parent b49187e commit 9855dfc

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,14 @@ public void postInitialize() {
368368
if (!getLanguage().isNativeBuildTime()) {
369369
initialized = false;
370370
loadFile(__BUILTINS_PATCHES__, PythonCore.getCoreHomeOrFail());
371+
372+
PythonModule os = lookupBuiltinModule("posix");
373+
// reuse existing dict
374+
Object environAttr = os.getAttribute("environ");
375+
if (environAttr instanceof PDict) {
376+
((PDict) environAttr).setDictStorage(createEnvironDict().getDictStorage());
377+
}
378+
371379
initialized = true;
372380
}
373381
}
@@ -757,6 +765,16 @@ private void findKnownExceptionTypes() {
757765
}
758766
}
759767

768+
@TruffleBoundary
769+
public PDict createEnvironDict() {
770+
Map<String, String> getenv = System.getenv();
771+
PDict environ = factory.createDict();
772+
for (Entry<String, String> entry : getenv.entrySet()) {
773+
environ.setItem(factory.createBytes(entry.getKey().getBytes()), factory.createBytes(entry.getValue().getBytes()));
774+
}
775+
return environ;
776+
}
777+
760778
public PythonObjectFactory factory() {
761779
return factory;
762780
}

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

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,6 @@
5656
import java.util.Collection;
5757
import java.util.HashSet;
5858
import java.util.List;
59-
import java.util.Map;
60-
import java.util.Map.Entry;
6159
import java.util.Random;
6260
import java.util.Set;
6361
import java.util.concurrent.TimeUnit;
@@ -70,7 +68,6 @@
7068
import com.oracle.graal.python.builtins.objects.PNone;
7169
import com.oracle.graal.python.builtins.objects.bytes.PByteArray;
7270
import com.oracle.graal.python.builtins.objects.bytes.PBytes;
73-
import com.oracle.graal.python.builtins.objects.dict.PDict;
7471
import com.oracle.graal.python.builtins.objects.floats.PFloat;
7572
import com.oracle.graal.python.builtins.objects.function.PKeyword;
7673
import com.oracle.graal.python.builtins.objects.ints.PInt;
@@ -251,12 +248,11 @@ public void initialize(PythonCore core) {
251248
super.initialize(core);
252249
builtinConstants.put("_have_functions", core.factory().createList());
253250

254-
Map<String, String> getenv = System.getenv();
255-
PDict environ = core.factory().createDict();
256-
for (Entry<String, String> entry : getenv.entrySet()) {
257-
environ.setItem(core.factory().createBytes(entry.getKey().getBytes()), core.factory().createBytes(entry.getValue().getBytes()));
251+
if (!core.getLanguage().isNativeBuildTime()) {
252+
builtinConstants.put("environ", core.createEnvironDict());
253+
} else {
254+
builtinConstants.put("environ", core.factory().createDict());
258255
}
259-
builtinConstants.put("environ", environ);
260256
}
261257

262258
@Builtin(name = "getcwd", fixedNumOfArguments = 0)

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PythonCore.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
import com.oracle.graal.python.PythonLanguage;
3232
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
33+
import com.oracle.graal.python.builtins.objects.dict.PDict;
3334
import com.oracle.graal.python.builtins.objects.exception.PBaseException;
3435
import com.oracle.graal.python.builtins.objects.module.PythonModule;
3536
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
@@ -115,6 +116,8 @@ public interface PythonCore {
115116

116117
public void setCurrentException(PException e);
117118

119+
public PDict createEnvironDict();
120+
118121
public PythonObjectFactory factory();
119122

120123
void setSingletonContext(PythonContext context);

0 commit comments

Comments
 (0)