Skip to content

Commit 8c5494a

Browse files
committed
move context-specific flag settings based on options into the context initialization paths
1 parent e235886 commit 8c5494a

File tree

9 files changed

+59
-54
lines changed

9 files changed

+59
-54
lines changed

graalpython/com.oracle.graal.python.shell/src/com/oracle/graal/python/shell/GraalPythonMain.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@ protected void launch(Builder contextBuilder) {
346346
contextBuilder.option("python.QuietFlag", Boolean.toString(quietFlag));
347347
contextBuilder.option("python.NoUserSiteFlag", Boolean.toString(noUserSite));
348348
contextBuilder.option("python.NoSiteFlag", Boolean.toString(noSite));
349+
contextBuilder.option("python.IgnoreEnvironmentFlag", Boolean.toString(ignoreEnv));
349350

350351
sulongLibraryPath = System.getenv("SULONG_LIBRARY_PATH");
351352
if (sulongLibraryPath != null) {

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

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -437,13 +437,37 @@ public void postInitialize() {
437437

438438
public PythonModule initializeSysModule() {
439439
PythonModule sys = builtinModules.get("sys");
440-
String[] args = getContext().getEnv().getApplicationArguments();
440+
PythonContext context = getContext();
441+
String[] args = context.getEnv().getApplicationArguments();
441442
sys.setAttribute("argv", factory().createList(Arrays.copyOf(args, args.length, Object[].class)));
442-
String prefix = PythonCore.getSysPrefix(getContext().getEnv());
443+
String prefix = PythonCore.getSysPrefix(context.getEnv());
443444
for (String name : SysModuleBuiltins.SYS_PREFIX_ATTRIBUTES) {
444445
sys.setAttribute(name, prefix);
445446
}
447+
448+
sys.setAttribute("executable", PythonOptions.getOption(context, PythonOptions.Executable));
449+
sys.setAttribute("graal_python_home", context.getLanguage().getHome());
450+
sys.setAttribute("graal_python_core_home", PythonOptions.getOption(context, PythonOptions.CoreHome));
451+
sys.setAttribute("graal_python_stdlib_home", PythonOptions.getOption(context, PythonOptions.StdLibHome));
452+
sys.setAttribute("graal_python_opaque_filesystem", PythonOptions.getOption(context, PythonOptions.OpaqueFilesystem));
453+
sys.setAttribute("__flags__", factory().createTuple(new Object[]{
454+
false, // bytes_warning
455+
!PythonOptions.getFlag(context, PythonOptions.PythonOptimizeFlag), // debug
456+
true, // dont_write_bytecode
457+
false, // hash_randomization
458+
PythonOptions.getFlag(context, PythonOptions.IgnoreEnvironmentFlag), // ignore_environment
459+
PythonOptions.getFlag(context, PythonOptions.InspectFlag), // inspect
460+
PythonOptions.getFlag(context, PythonOptions.InspectFlag), // interactive
461+
!context.isExecutableAccessAllowed(), // isolated
462+
PythonOptions.getFlag(context, PythonOptions.NoSiteFlag), // no_site
463+
PythonOptions.getFlag(context, PythonOptions.NoUserSiteFlag), // no_user_site
464+
PythonOptions.getFlag(context, PythonOptions.PythonOptimizeFlag), // optimize
465+
PythonOptions.getFlag(context, PythonOptions.QuietFlag), // quiet
466+
PythonOptions.getFlag(context, PythonOptions.VerboseFlag), // verbose
467+
}));
468+
446469
initializeSysPath(sys, args);
470+
447471
return sys;
448472
}
449473

@@ -465,7 +489,6 @@ private void initializeSysPath(PythonModule sys, String[] args) {
465489
path[pathIdx + 2] = PythonCore.getCoreHome(env) + PythonCore.FILE_SEPARATOR + "modules";
466490
PList sysPaths = factory().createList(path);
467491
sys.setAttribute("path", sysPaths);
468-
// sysPaths.append(getPythonLibraryExtrasPath());
469492
}
470493

471494
private static String getScriptPath(Env env, String[] args) {

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

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,6 @@
158158
import com.oracle.graal.python.nodes.util.CastToIntegerFromIndexNode;
159159
import com.oracle.graal.python.nodes.util.CastToStringNode;
160160
import com.oracle.graal.python.runtime.PythonContext;
161-
import com.oracle.graal.python.runtime.PythonCore;
162-
import com.oracle.graal.python.runtime.PythonOptions;
163161
import com.oracle.graal.python.runtime.PythonParser.ParserMode;
164162
import com.oracle.graal.python.runtime.exception.PException;
165163
import com.oracle.graal.python.runtime.exception.PythonErrorType;
@@ -198,13 +196,6 @@ protected List<com.oracle.truffle.api.dsl.NodeFactory<? extends PythonBuiltinBas
198196
return BuiltinFunctionsFactory.getFactories();
199197
}
200198

201-
@Override
202-
public void initialize(PythonCore core) {
203-
super.initialize(core);
204-
boolean optimazeFlag = PythonOptions.getOption(PythonLanguage.getContextRef().get(), PythonOptions.PythonOptimizeFlag);
205-
builtinConstants.put(BuiltinNames.__DEBUG__, !optimazeFlag);
206-
}
207-
208199
// abs(x)
209200
@Builtin(name = ABS, fixedNumOfPositionalArgs = 1)
210201
@GenerateNodeFactory

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@
9090

9191
@CoreFunctions(defineModule = "polyglot")
9292
public final class InteropModuleBuiltins extends PythonBuiltins {
93-
9493
@Override
9594
protected List<com.oracle.truffle.api.dsl.NodeFactory<? extends PythonBuiltinNode>> getNodeFactories() {
9695
return InteropModuleBuiltinsFactory.getFactories();

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

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
import com.oracle.graal.python.nodes.util.CastToIntegerFromIntNode;
6868
import com.oracle.graal.python.runtime.PythonContext;
6969
import com.oracle.graal.python.runtime.PythonCore;
70-
import com.oracle.graal.python.runtime.PythonOptions;
7170
import com.oracle.graal.python.runtime.exception.PException;
7271
import com.oracle.graal.python.runtime.exception.PythonErrorType;
7372
import com.oracle.truffle.api.CompilerDirectives;
@@ -118,25 +117,6 @@ public void initialize(PythonCore core) {
118117
builtinConstants.put("version", PythonLanguage.VERSION +
119118
" (" + COMPILE_TIME + ")" +
120119
"\n[" + Truffle.getRuntime().getName() + ", Java " + System.getProperty("java.version") + "]");
121-
builtinConstants.put("flags", core.factory().createTuple(new Object[]{
122-
false, // bytes_warning
123-
false, // debug
124-
true, // dont_write_bytecode
125-
false, // hash_randomization
126-
false, // ignore_environment
127-
PythonOptions.getFlag(core.getContext(), PythonOptions.InspectFlag), // inspect
128-
PythonOptions.getFlag(core.getContext(), PythonOptions.InspectFlag), // interactive
129-
false, // isolated
130-
PythonOptions.getFlag(core.getContext(), PythonOptions.NoSiteFlag), // no_site
131-
PythonOptions.getFlag(core.getContext(), PythonOptions.NoUserSiteFlag), // no_user_site
132-
false, // optimize
133-
PythonOptions.getFlag(core.getContext(), PythonOptions.QuietFlag), // quiet
134-
PythonOptions.getFlag(core.getContext(), PythonOptions.VerboseFlag), // verbose
135-
}));
136-
builtinConstants.put("graal_python_home", core.getContext().getLanguage().getHome());
137-
builtinConstants.put("graal_python_core_home", PythonOptions.getOption(core.getContext(), PythonOptions.CoreHome));
138-
builtinConstants.put("graal_python_stdlib_home", PythonOptions.getOption(core.getContext(), PythonOptions.StdLibHome));
139-
builtinConstants.put("graal_python_opaque_filesystem", PythonOptions.getOption(core.getContext(), PythonOptions.OpaqueFilesystem));
140120
builtinConstants.put("graal_python_is_native", TruffleOptions.AOT);
141121
// the default values taken from JPython
142122
builtinConstants.put("float_info", core.factory().createTuple(new Object[]{

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
import static com.oracle.graal.python.builtins.objects.thread.PThread.GRAALPYTHON_THREADS;
2929
import static com.oracle.graal.python.nodes.BuiltinNames.__BUILTINS__;
30+
import static com.oracle.graal.python.nodes.BuiltinNames.__DEBUG__;
3031
import static com.oracle.graal.python.nodes.BuiltinNames.__MAIN__;
3132
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__FILE__;
3233

@@ -234,9 +235,11 @@ public void patch(Env newEnv) {
234235

235236
private void setupRuntimeInformation() {
236237
PythonModule sysModule = core.initializeSysModule();
237-
sysModule.setAttribute("executable", PythonOptions.getOption(core.getContext(), PythonOptions.Executable));
238238
sysModules = (PDict) sysModule.getAttribute("modules");
239+
239240
builtinsModule = (PythonModule) sysModules.getItem("builtins");
241+
builtinsModule.setAttribute(__DEBUG__, !PythonOptions.getOption(PythonLanguage.getContextRef().get(), PythonOptions.PythonOptimizeFlag));
242+
240243
mainModule = core.factory().createPythonModule(__MAIN__);
241244
mainModule.setAttribute(__BUILTINS__, builtinsModule);
242245
mainModule.setDict(core.factory().createDictFixedStorage(mainModule));

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
@@ -66,6 +66,9 @@ private PythonOptions() {
6666
@Option(category = OptionCategory.USER, help = "Equivalent to the Python -s flag. Don't add user site directory to sys.path.") //
6767
public static final OptionKey<Boolean> NoUserSiteFlag = new OptionKey<>(false);
6868

69+
@Option(category = OptionCategory.USER, help = "Equivalent to the Python -E flag. Ignore PYTHON* environment variables.") //
70+
public static final OptionKey<Boolean> IgnoreEnvironmentFlag = new OptionKey<>(false);
71+
6972
@Option(category = OptionCategory.USER, help = "Equivalent to setting the PYTHONPATH environment variable for the standard launcher. ':'-separated list of directories prefixed to the default module search path.") //
7073
public static final OptionKey<String> PythonPath = new OptionKey<>("");
7174

graalpython/lib-graalpython/posix.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939

4040
from _descriptor import make_named_tuple_class
4141
from sys import graal_python_is_native
42-
from sys import executable as graal_python_executable
4342

4443
stat_result = make_named_tuple_class("stat_result", [
4544
"st_mode", "st_ino", "st_dev", "st_nlink",
@@ -59,8 +58,10 @@ def stat(filename, follow_symlinks=True):
5958

6059
@__builtin__
6160
def lstat(filename):
62-
if not graal_python_is_native and filename == graal_python_executable:
63-
return stat_result((0,0,0,0,0,0,0,0,0,0))
61+
if not graal_python_is_native:
62+
from sys import executable as graal_python_executable
63+
if filename == graal_python_executable:
64+
return stat_result((0,0,0,0,0,0,0,0,0,0))
6465
return stat_result(old_stat(filename, False))
6566

6667

graalpython/lib-graalpython/sys.py

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -56,23 +56,27 @@ def make_implementation_info():
5656

5757
def make_flags_class():
5858
from _descriptor import make_named_tuple_class
59-
return make_named_tuple_class(
60-
"flags",
61-
["bytes_warning",
62-
"debug",
63-
"dont_write_bytecode",
64-
"hash_randomization",
65-
"ignore_environment",
66-
"inspect",
67-
"interactive",
68-
"isolated",
69-
"no_site",
70-
"no_user_site",
71-
"optimize",
72-
"quiet",
73-
"verbose"]
74-
)
75-
flags = make_flags_class()(flags)
59+
get_set_descriptor = type(type(make_flags_class).__code__)
60+
61+
names = ["bytes_warning", "debug", "dont_write_bytecode",
62+
"hash_randomization", "ignore_environment", "inspect",
63+
"interactive", "isolated", "no_site", "no_user_site", "optimize",
64+
"quiet", "verbose"]
65+
66+
flags_class = make_named_tuple_class("sys.flags", names)
67+
68+
def make_func(i):
69+
def func(self):
70+
return __flags__[i]
71+
return func
72+
73+
for i, f in enumerate(names):
74+
setattr(flags_class, f, get_set_descriptor(fget=make_func(i), name=f, owner=flags_class))
75+
76+
return flags_class
77+
78+
79+
flags = make_flags_class()()
7680
del make_flags_class
7781

7882

0 commit comments

Comments
 (0)