Skip to content

Commit a3dc1b0

Browse files
committed
Fix reliance on previous buggy import star behavior in hpy
1 parent e1eb9b9 commit a3dc1b0

File tree

1 file changed

+28
-4
lines changed

1 file changed

+28
-4
lines changed

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

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -40,7 +40,11 @@
4040
*/
4141
package com.oracle.graal.python.builtins.modules;
4242

43+
import static com.oracle.graal.python.nodes.SpecialAttributeNames.T___ALL__;
44+
import static com.oracle.graal.python.util.PythonUtils.tsLiteral;
45+
4346
import java.io.IOException;
47+
import java.util.ArrayList;
4448
import java.util.List;
4549

4650
import com.oracle.graal.python.PythonLanguage;
@@ -57,6 +61,7 @@
5761
import com.oracle.graal.python.builtins.objects.cext.common.LoadCExtException.ImportException;
5862
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContext;
5963
import com.oracle.graal.python.builtins.objects.cext.hpy.HPyMode;
64+
import com.oracle.graal.python.builtins.objects.module.PythonModule;
6065
import com.oracle.graal.python.lib.PyObjectGetItem;
6166
import com.oracle.graal.python.nodes.ErrorMessages;
6267
import com.oracle.graal.python.nodes.PConstructAndRaiseNode;
@@ -73,7 +78,6 @@
7378
import com.oracle.graal.python.runtime.IndirectCallData;
7479
import com.oracle.graal.python.runtime.PythonContext;
7580
import com.oracle.graal.python.runtime.exception.PException;
76-
import com.oracle.graal.python.util.PythonUtils;
7781
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
7882
import com.oracle.truffle.api.dsl.Bind;
7983
import com.oracle.truffle.api.dsl.Cached;
@@ -88,7 +92,21 @@
8892
@GenerateNodeFactory
8993
public final class GraalHPyUniversalModuleBuiltins extends PythonBuiltins {
9094

91-
public static final String J_HPY_UNIVERSAL = "_hpy_universal";
95+
static final String J_HPY_UNIVERSAL = "_hpy_universal";
96+
private static final TruffleString T_HPY_UNIVERSAL = tsLiteral(J_HPY_UNIVERSAL);
97+
private static final TruffleString T_HPY = tsLiteral("HPY");
98+
99+
private static final TruffleString[] ALL_ARRAY;
100+
101+
static {
102+
List<TruffleString> allList = new ArrayList<>();
103+
for (HPyMode mode : HPyMode.values()) {
104+
allList.add(tsLiteral(mode.name()));
105+
}
106+
allList.add(tsLiteral("load"));
107+
allList.add(tsLiteral("_load_bootstrap"));
108+
ALL_ARRAY = allList.toArray(new TruffleString[0]);
109+
}
92110

93111
@Override
94112
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {
@@ -103,6 +121,12 @@ public void initialize(Python3Core core) {
103121
super.initialize(core);
104122
}
105123

124+
@Override
125+
public void postInitialize(Python3Core core) {
126+
PythonModule module = core.lookupBuiltinModule(T_HPY_UNIVERSAL);
127+
module.setAttribute(T___ALL__, core.factory().createTuple(ALL_ARRAY));
128+
}
129+
106130
@Builtin(name = "load", parameterNames = {"name", "path", "spec", "debug", "mode"}, minNumOfPositionalArgs = 3)
107131
@GenerateNodeFactory
108132
@ArgumentClinic(name = "name", conversion = ClinicConversion.TString)
@@ -205,7 +229,7 @@ static Object doGeneric(VirtualFrame frame, TruffleString name, TruffleString ex
205229
private static HPyMode getHPyModeFromEnviron(TruffleString moduleName, Object env) throws CannotCastException {
206230
Object result;
207231
try {
208-
result = PyObjectGetItem.executeUncached(env, PythonUtils.tsLiteral("HPY"));
232+
result = PyObjectGetItem.executeUncached(env, T_HPY);
209233
} catch (PException e) {
210234
e.expect(null, PythonBuiltinClassType.KeyError, IsBuiltinObjectProfile.getUncached());
211235
// this is not an error; it just means that the key was not present in 'env'

0 commit comments

Comments
 (0)