Skip to content

Commit 7f8cf1f

Browse files
committed
Allow disabling frozen modules
1 parent 98a6ed7 commit 7f8cf1f

File tree

2 files changed

+21
-16
lines changed

2 files changed

+21
-16
lines changed

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

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
package com.oracle.graal.python.builtins.modules;
4242

4343
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.TypeError;
44-
import static com.oracle.graal.python.builtins.modules.ImpModuleBuiltins.FrozenStatus.FROZEN_BAD_NAME;
4544
import static com.oracle.graal.python.builtins.modules.ImpModuleBuiltins.FrozenStatus.FROZEN_DISABLED;
4645
import static com.oracle.graal.python.builtins.modules.ImpModuleBuiltins.FrozenStatus.FROZEN_EXCLUDED;
4746
import static com.oracle.graal.python.builtins.modules.ImpModuleBuiltins.FrozenStatus.FROZEN_INVALID;
@@ -54,11 +53,6 @@
5453
import java.util.List;
5554
import java.util.concurrent.locks.ReentrantLock;
5655

57-
import com.oracle.graal.python.builtins.objects.code.CodeNodes;
58-
import com.oracle.graal.python.builtins.objects.function.PArguments;
59-
import com.oracle.graal.python.nodes.call.GenericInvokeNode;
60-
import com.oracle.truffle.api.RootCallTarget;
61-
import com.oracle.truffle.api.profiles.ConditionProfile;
6256
import org.graalvm.nativeimage.ImageInfo;
6357

6458
import com.oracle.graal.python.PythonLanguage;
@@ -86,22 +80,25 @@
8680
import com.oracle.graal.python.builtins.objects.cext.common.LoadCExtException.ImportException;
8781
import com.oracle.graal.python.builtins.objects.cext.hpy.HPyExternalFunctionNodes.HPyCheckFunctionResultNode;
8882
import com.oracle.graal.python.builtins.objects.cext.hpy.HPyExternalFunctionNodesFactory.HPyCheckHandleResultNodeGen;
83+
import com.oracle.graal.python.builtins.objects.code.CodeNodes;
8984
import com.oracle.graal.python.builtins.objects.code.PCode;
9085
import com.oracle.graal.python.builtins.objects.common.HashingStorageLibrary;
86+
import com.oracle.graal.python.builtins.objects.function.PArguments;
9187
import com.oracle.graal.python.builtins.objects.ints.IntBuiltins;
9288
import com.oracle.graal.python.builtins.objects.memoryview.PMemoryView;
89+
import com.oracle.graal.python.builtins.objects.module.FrozenModules;
90+
import com.oracle.graal.python.builtins.objects.module.PythonFrozenModule;
9391
import com.oracle.graal.python.builtins.objects.module.PythonModule;
9492
import com.oracle.graal.python.builtins.objects.object.PythonObject;
9593
import com.oracle.graal.python.builtins.objects.str.PString;
96-
import com.oracle.graal.python.builtins.objects.module.PythonFrozenModule;
97-
import com.oracle.graal.python.builtins.objects.module.FrozenModules;
9894
import com.oracle.graal.python.lib.PyObjectLookupAttr;
9995
import com.oracle.graal.python.lib.PyObjectStrAsJavaStringNode;
10096
import com.oracle.graal.python.nodes.ErrorMessages;
10197
import com.oracle.graal.python.nodes.PRaiseNode;
10298
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromDynamicObjectNode;
10399
import com.oracle.graal.python.nodes.attributes.SetAttributeNode;
104100
import com.oracle.graal.python.nodes.attributes.WriteAttributeToDynamicObjectNode;
101+
import com.oracle.graal.python.nodes.call.GenericInvokeNode;
105102
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
106103
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
107104
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
@@ -116,13 +113,15 @@
116113
import com.oracle.graal.python.runtime.PythonOptions;
117114
import com.oracle.truffle.api.CompilerDirectives;
118115
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
116+
import com.oracle.truffle.api.RootCallTarget;
119117
import com.oracle.truffle.api.dsl.Cached;
120118
import com.oracle.truffle.api.dsl.Fallback;
121119
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
122120
import com.oracle.truffle.api.dsl.NodeFactory;
123121
import com.oracle.truffle.api.dsl.Specialization;
124122
import com.oracle.truffle.api.frame.VirtualFrame;
125123
import com.oracle.truffle.api.library.CachedLibrary;
124+
import com.oracle.truffle.api.profiles.ConditionProfile;
126125

127126
@CoreFunctions(defineModule = "_imp", isEager = true)
128127
public class ImpModuleBuiltins extends PythonBuiltins {
@@ -470,7 +469,7 @@ boolean run(String name) {
470469
if (!getContext().getOption(PythonOptions.PythonPath).isEmpty() && "site".equals(name)) {
471470
return false;
472471
} else {
473-
return findFrozen(name).status == FROZEN_OKAY;
472+
return findFrozen(getContext(), name).status == FROZEN_OKAY;
474473
}
475474
}
476475
}
@@ -489,9 +488,9 @@ protected ArgumentClinicProvider getArgumentClinic() {
489488
}
490489

491490
@Specialization
492-
static boolean run(String name,
491+
boolean run(String name,
493492
@Cached PRaiseNode raiseNode) {
494-
FrozenResult result = findFrozen(name);
493+
FrozenResult result = findFrozen(getContext(), name);
495494
if (result.status != FROZEN_EXCLUDED) {
496495
raiseFrozenError(result.status, name, raiseNode);
497496
}
@@ -530,7 +529,7 @@ Object run(VirtualFrame frame, String name, Object dataObj,
530529
raiseFrozenError(FROZEN_INVALID, name, raiseNode);
531530
}
532531
} else {
533-
FrozenResult result = findFrozen(name);
532+
FrozenResult result = findFrozen(getContext(), name);
534533
FrozenStatus status = result.status;
535534
info = result.info;
536535
raiseFrozenError(status, name, raiseNode);
@@ -579,7 +578,7 @@ protected ArgumentClinicProvider getArgumentClinic() {
579578
Object run(VirtualFrame frame, String name, boolean withData,
580579
@Cached MemoryViewNode memoryViewNode,
581580
@Cached PRaiseNode raiseNode) {
582-
FrozenResult result = findFrozen(name);
581+
FrozenResult result = findFrozen(getContext(), name);
583582
FrozenStatus status = result.status;
584583
FrozenInfo info = result.info;
585584

@@ -643,7 +642,7 @@ public static PythonModule importFrozenModuleObject(Python3Core core, String nam
643642
*/
644643
@TruffleBoundary
645644
public static PythonModule importFrozenModuleObject(Python3Core core, String name, boolean doRaise, PythonModule globals) {
646-
FrozenResult result = findFrozen(name);
645+
FrozenResult result = findFrozen(core.getContext(), name);
647646
FrozenStatus status = result.status;
648647
FrozenInfo info = result.info;
649648

@@ -680,10 +679,13 @@ public static PythonModule importFrozenModuleObject(Python3Core core, String nam
680679

681680
/*
682681
* CPython's version of this accepts any object and casts, but all Python-level callers use
683-
* argument clinic to convert the name first. The only exeption is
682+
* argument clinic to convert the name first. The only exception is
684683
* PyImport_ImportFrozenModuleObject, which we don't expose as C API and handle differently_
685684
*/
686-
private static FrozenResult findFrozen(String name) {
685+
private static FrozenResult findFrozen(PythonContext context, String name) {
686+
if (context.getOption(PythonOptions.DisableFrozenModules)) {
687+
return new FrozenResult(FROZEN_DISABLED);
688+
}
687689
PythonFrozenModule module = FrozenModules.lookup(name);
688690

689691
if (module == null) {

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,9 @@ private PythonOptions() {
291291
@Option(category = OptionCategory.EXPERT, usageSyntax = "true|false", help = "Enable built-in functions on the __graalpython__ module that are useful for debugging.") //
292292
public static final OptionKey<Boolean> EnableDebuggingBuiltins = new OptionKey<>(false);
293293

294+
@Option(category = OptionCategory.EXPERT, help = "Disables using frozen modules.") //
295+
public static final OptionKey<Boolean> DisableFrozenModules = new OptionKey<>(false);
296+
294297
public static final OptionDescriptors DESCRIPTORS = new PythonOptionsOptionDescriptors();
295298

296299
@CompilationFinal(dimensions = 1) private static final OptionKey<?>[] ENGINE_OPTION_KEYS;

0 commit comments

Comments
 (0)