Skip to content

Commit 8652fcd

Browse files
committed
[GR-38731] Always add built-in _bz2 module.
PullRequest: graalpython/2275
2 parents b3b25fc + ae5676a commit 8652fcd

File tree

5 files changed

+37
-15
lines changed

5 files changed

+37
-15
lines changed

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -712,7 +712,7 @@ private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed)
712712
builtins.add(new LsprofModuleBuiltins());
713713
builtins.add(LsprofModuleBuiltins.newProfilerBuiltins());
714714
}
715-
if (nativeAccessAllowed) {
715+
if (nativeAccessAllowed || ImageInfo.inImageBuildtimeCode()) {
716716
builtins.add(new BZ2CompressorBuiltins());
717717
builtins.add(new BZ2DecompressorBuiltins());
718718
builtins.add(new BZ2ModuleBuiltins());
@@ -911,6 +911,20 @@ public final void postInitialize() {
911911
}
912912
}
913913

914+
/*
915+
* Special case for _bz2: If native access is not allowed, we cannot use the built-in
916+
* implementation that would call libbz2 via NFI. Therefore, we remove it from the
917+
* built-in modules map (and also from sys.modules if already loaded). This will cause a
918+
* fallback to another _bz2 implementation (e.g. LLVM or maybe some Java lib). This
919+
* needs to be done here and cannot be done in 'initializeBuiltins' because then we
920+
* would never include the intrinsified _bz2 module in the native image since native
921+
* access is never allowed during native image build time.
922+
*/
923+
if (ImageInfo.inImageCode() && !getContext().isNativeAccessAllowed()) {
924+
builtinModules.remove(BuiltinNames.BZ2);
925+
sysModules.delItem(BuiltinNames.BZ2);
926+
}
927+
914928
globalScopeObject = PythonMapScope.createTopScope(getContext());
915929
getContext().getSharedFinalizer().registerAsyncAction();
916930
initialized = true;

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/bz2/BZ2ModuleBuiltins.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2018, 2022, 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
@@ -48,14 +48,15 @@
4848
import com.oracle.graal.python.builtins.Builtin;
4949
import com.oracle.graal.python.builtins.CoreFunctions;
5050
import com.oracle.graal.python.builtins.PythonBuiltins;
51+
import com.oracle.graal.python.nodes.BuiltinNames;
5152
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
5253
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
5354
import com.oracle.graal.python.builtins.Python3Core;
5455
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
5556
import com.oracle.truffle.api.dsl.NodeFactory;
5657
import com.oracle.truffle.api.dsl.Specialization;
5758

58-
@CoreFunctions(defineModule = "_bz2")
59+
@CoreFunctions(defineModule = BuiltinNames.BZ2)
5960
public class BZ2ModuleBuiltins extends PythonBuiltins {
6061
@Override
6162
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CPyObjectArrayWrapper.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,14 +192,14 @@ void toNative(
192192
}
193193

194194
public void free(PythonNativeWrapperLibrary lib, ReleaseNativeWrapperNode releaseNativeWrapperNode) {
195-
if (!PythonContext.get(lib).isNativeAccessAllowed()) {
196-
CompilerDirectives.transferToInterpreterAndInvalidate();
197-
throw new RuntimeException(ErrorMessages.NATIVE_ACCESS_NOT_ALLOWED);
198-
}
199195
for (int i = 0; i < wrappers.length; i++) {
200196
releaseNativeWrapperNode.execute(wrappers[i]);
201197
}
202198
if (lib.isNative(this)) {
199+
if (!PythonContext.get(lib).isNativeAccessAllowed()) {
200+
CompilerDirectives.transferToInterpreterAndInvalidate();
201+
throw new RuntimeException(ErrorMessages.NATIVE_ACCESS_NOT_ALLOWED);
202+
}
203203
freeBoundary((long) lib.getNativePointer(this));
204204
}
205205
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/dict/PDict.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2021, Oracle and/or its affiliates.
2+
* Copyright (c) 2017, 2022, Oracle and/or its affiliates.
33
* Copyright (c) 2013, Regents of the University of California
44
*
55
* All rights reserved.
@@ -93,6 +93,10 @@ public void setItem(Object key, Object value) {
9393
storage = HashingStorageLibrary.getUncached().setItem(storage, key, value);
9494
}
9595

96+
public void delItem(Object key) {
97+
storage = HashingStorageLibrary.getUncached().delItem(storage, key);
98+
}
99+
96100
public static HashingStorage createNewStorage(boolean isStringKey, int expectedSize) {
97101
HashingStorage newDictStorage;
98102
if (expectedSize == 0) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/BuiltinNames.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public abstract class BuiltinNames {
7979
public static final String EXIT = "exit";
8080
public static final String MODULES = "modules";
8181

82-
// builtin functions
82+
// built-in functions
8383
public static final String ABS = "abs";
8484
public static final String DICT = "dict";
8585
public static final String DEFAULTDICT = "defaultdict";
@@ -162,17 +162,11 @@ public abstract class BuiltinNames {
162162
public static final String HASH = "hash";
163163
public static final String MEMORYVIEW = "memoryview";
164164
public static final String SET = "set";
165-
public static final String BUILTINS = "builtins";
166-
public static final String __GRAALPYTHON__ = "__graalpython__";
167-
public static final String _CODECS = "_codecs";
168-
public static final String _STRING = "_string";
169-
public static final String _CODECS_TRUFFLE = "_codecs_truffle";
170165
public static final String GETSET_DESCRIPTOR = "getset_descriptor";
171166
public static final String MEMBER_DESCRIPTOR = "member_descriptor";
172167
public static final String WRAPPER_DESCRIPTOR = "wrapper_descriptor";
173168
public static final String SIMPLE_QUEUE = "SimpleQueue";
174169
public static final String EMPTY = "Empty";
175-
public static final String CONTEXTVARS = "_contextvars";
176170

177171
public static final String DICT_KEYITERATOR = "dict_keyiterator";
178172
public static final String DICT_VALUEITERATOR = "dict_valueiterator";
@@ -183,4 +177,13 @@ public abstract class BuiltinNames {
183177
public static final String DICT_KEYS = "dict_keys";
184178
public static final String DICT_ITEMS = "dict_items";
185179
public static final String DICT_VALUES = "dict_values";
180+
181+
// built-in modules
182+
public static final String BUILTINS = "builtins";
183+
public static final String __GRAALPYTHON__ = "__graalpython__";
184+
public static final String _CODECS = "_codecs";
185+
public static final String _CODECS_TRUFFLE = "_codecs_truffle";
186+
public static final String _STRING = "_string";
187+
public static final String CONTEXTVARS = "_contextvars";
188+
public static final String BZ2 = "_bz2";
186189
}

0 commit comments

Comments
 (0)