41
41
package com .oracle .graal .python .builtins .modules ;
42
42
43
43
import static com .oracle .graal .python .builtins .PythonBuiltinClassType .TypeError ;
44
- import static com .oracle .graal .python .builtins .modules .ImpModuleBuiltins .FrozenStatus .FROZEN_BAD_NAME ;
45
44
import static com .oracle .graal .python .builtins .modules .ImpModuleBuiltins .FrozenStatus .FROZEN_DISABLED ;
46
45
import static com .oracle .graal .python .builtins .modules .ImpModuleBuiltins .FrozenStatus .FROZEN_EXCLUDED ;
47
46
import static com .oracle .graal .python .builtins .modules .ImpModuleBuiltins .FrozenStatus .FROZEN_INVALID ;
54
53
import java .util .List ;
55
54
import java .util .concurrent .locks .ReentrantLock ;
56
55
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 ;
62
56
import org .graalvm .nativeimage .ImageInfo ;
63
57
64
58
import com .oracle .graal .python .PythonLanguage ;
86
80
import com .oracle .graal .python .builtins .objects .cext .common .LoadCExtException .ImportException ;
87
81
import com .oracle .graal .python .builtins .objects .cext .hpy .HPyExternalFunctionNodes .HPyCheckFunctionResultNode ;
88
82
import com .oracle .graal .python .builtins .objects .cext .hpy .HPyExternalFunctionNodesFactory .HPyCheckHandleResultNodeGen ;
83
+ import com .oracle .graal .python .builtins .objects .code .CodeNodes ;
89
84
import com .oracle .graal .python .builtins .objects .code .PCode ;
90
85
import com .oracle .graal .python .builtins .objects .common .HashingStorageLibrary ;
86
+ import com .oracle .graal .python .builtins .objects .function .PArguments ;
91
87
import com .oracle .graal .python .builtins .objects .ints .IntBuiltins ;
92
88
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 ;
93
91
import com .oracle .graal .python .builtins .objects .module .PythonModule ;
94
92
import com .oracle .graal .python .builtins .objects .object .PythonObject ;
95
93
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 ;
98
94
import com .oracle .graal .python .lib .PyObjectLookupAttr ;
99
95
import com .oracle .graal .python .lib .PyObjectStrAsJavaStringNode ;
100
96
import com .oracle .graal .python .nodes .ErrorMessages ;
101
97
import com .oracle .graal .python .nodes .PRaiseNode ;
102
98
import com .oracle .graal .python .nodes .attributes .ReadAttributeFromDynamicObjectNode ;
103
99
import com .oracle .graal .python .nodes .attributes .SetAttributeNode ;
104
100
import com .oracle .graal .python .nodes .attributes .WriteAttributeToDynamicObjectNode ;
101
+ import com .oracle .graal .python .nodes .call .GenericInvokeNode ;
105
102
import com .oracle .graal .python .nodes .function .PythonBuiltinBaseNode ;
106
103
import com .oracle .graal .python .nodes .function .PythonBuiltinNode ;
107
104
import com .oracle .graal .python .nodes .function .builtins .PythonBinaryBuiltinNode ;
116
113
import com .oracle .graal .python .runtime .PythonOptions ;
117
114
import com .oracle .truffle .api .CompilerDirectives ;
118
115
import com .oracle .truffle .api .CompilerDirectives .TruffleBoundary ;
116
+ import com .oracle .truffle .api .RootCallTarget ;
119
117
import com .oracle .truffle .api .dsl .Cached ;
120
118
import com .oracle .truffle .api .dsl .Fallback ;
121
119
import com .oracle .truffle .api .dsl .GenerateNodeFactory ;
122
120
import com .oracle .truffle .api .dsl .NodeFactory ;
123
121
import com .oracle .truffle .api .dsl .Specialization ;
124
122
import com .oracle .truffle .api .frame .VirtualFrame ;
125
123
import com .oracle .truffle .api .library .CachedLibrary ;
124
+ import com .oracle .truffle .api .profiles .ConditionProfile ;
126
125
127
126
@ CoreFunctions (defineModule = "_imp" , isEager = true )
128
127
public class ImpModuleBuiltins extends PythonBuiltins {
@@ -470,7 +469,7 @@ boolean run(String name) {
470
469
if (!getContext ().getOption (PythonOptions .PythonPath ).isEmpty () && "site" .equals (name )) {
471
470
return false ;
472
471
} else {
473
- return findFrozen (name ).status == FROZEN_OKAY ;
472
+ return findFrozen (getContext (), name ).status == FROZEN_OKAY ;
474
473
}
475
474
}
476
475
}
@@ -489,9 +488,9 @@ protected ArgumentClinicProvider getArgumentClinic() {
489
488
}
490
489
491
490
@ Specialization
492
- static boolean run (String name ,
491
+ boolean run (String name ,
493
492
@ Cached PRaiseNode raiseNode ) {
494
- FrozenResult result = findFrozen (name );
493
+ FrozenResult result = findFrozen (getContext (), name );
495
494
if (result .status != FROZEN_EXCLUDED ) {
496
495
raiseFrozenError (result .status , name , raiseNode );
497
496
}
@@ -530,7 +529,7 @@ Object run(VirtualFrame frame, String name, Object dataObj,
530
529
raiseFrozenError (FROZEN_INVALID , name , raiseNode );
531
530
}
532
531
} else {
533
- FrozenResult result = findFrozen (name );
532
+ FrozenResult result = findFrozen (getContext (), name );
534
533
FrozenStatus status = result .status ;
535
534
info = result .info ;
536
535
raiseFrozenError (status , name , raiseNode );
@@ -579,7 +578,7 @@ protected ArgumentClinicProvider getArgumentClinic() {
579
578
Object run (VirtualFrame frame , String name , boolean withData ,
580
579
@ Cached MemoryViewNode memoryViewNode ,
581
580
@ Cached PRaiseNode raiseNode ) {
582
- FrozenResult result = findFrozen (name );
581
+ FrozenResult result = findFrozen (getContext (), name );
583
582
FrozenStatus status = result .status ;
584
583
FrozenInfo info = result .info ;
585
584
@@ -643,7 +642,7 @@ public static PythonModule importFrozenModuleObject(Python3Core core, String nam
643
642
*/
644
643
@ TruffleBoundary
645
644
public static PythonModule importFrozenModuleObject (Python3Core core , String name , boolean doRaise , PythonModule globals ) {
646
- FrozenResult result = findFrozen (name );
645
+ FrozenResult result = findFrozen (core . getContext (), name );
647
646
FrozenStatus status = result .status ;
648
647
FrozenInfo info = result .info ;
649
648
@@ -680,10 +679,13 @@ public static PythonModule importFrozenModuleObject(Python3Core core, String nam
680
679
681
680
/*
682
681
* 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
684
683
* PyImport_ImportFrozenModuleObject, which we don't expose as C API and handle differently_
685
684
*/
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
+ }
687
689
PythonFrozenModule module = FrozenModules .lookup (name );
688
690
689
691
if (module == null ) {
0 commit comments