Skip to content

Commit 29d4032

Browse files
committed
[GR-23342] Pass more test_sys tests.
PullRequest: graalpython/1279
2 parents d82d108 + 2842740 commit 29d4032

File tree

10 files changed

+193
-54
lines changed

10 files changed

+193
-54
lines changed

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_sys.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
*graalpython.lib-python.3.test.test_sys.DisplayHookTest.test_custom_displayhook
22
*graalpython.lib-python.3.test.test_sys.ExceptHookTest.test_excepthook
3+
*graalpython.lib-python.3.test.test_sys.DisplayHookTest.test_lost_displayhook
4+
*graalpython.lib-python.3.test.test_sys.DisplayHookTest.test_original_displayhook
35
*graalpython.lib-python.3.test.test_sys.ExceptHookTest.test_excepthook_bytes_filename
46
*graalpython.lib-python.3.test.test_sys.ExceptHookTest.test_original_excepthook
57
*graalpython.lib-python.3.test.test_sys.SizeofTest.test_asyncgen_hooks
@@ -16,6 +18,7 @@
1618
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_dlopenflags
1719
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_executable
1820
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_exit
21+
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_implementation
1922
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_getallocatedblocks
2023
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_getandroidapilevel
2124
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_getdefaultencoding
@@ -24,13 +27,23 @@
2427
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_getwindowsversion
2528
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_ioencoding_nonascii
2629
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_no_duplicates_in_meta_path
30+
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_recursionlimit
31+
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_recursionlimit_recovery
2732
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_refcount
33+
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_setcheckinterval
2834
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_setrecursionlimit_recursion_depth
35+
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_switchinterval
36+
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_sys_flags
37+
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_sys_flags_no_instantiation
2938
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_sys_getwindowsversion_no_instantiation
3039
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_c_locale_surrogateescape
3140
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_posix_locale_surrogateescape
41+
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_sys_tracebacklimit
42+
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_sys_version_info_no_instantiation
43+
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_thread_info
3244
*graalpython.lib-python.3.test.test_sys.UnraisableHookTest.test_custom_unraisablehook
3345
*graalpython.lib-python.3.test.test_sys.UnraisableHookTest.test_custom_unraisablehook_fail
3446
*graalpython.lib-python.3.test.test_sys.UnraisableHookTest.test_original_unraisablehook
3547
*graalpython.lib-python.3.test.test_sys.UnraisableHookTest.test_original_unraisablehook_err
3648
*graalpython.lib-python.3.test.test_sys.UnraisableHookTest.test_original_unraisablehook_wrong_type
49+
*graalpython.lib-python.3.test.test_sys.SysModuleTest.test_intern

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/PythonLanguage.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ public final class PythonLanguage extends TruffleLanguage<PythonContext> {
119119
public static final int MAJOR = 3;
120120
public static final int MINOR = 8;
121121
public static final int MICRO = 5;
122+
// Note: update hexversion in sys.py when updating release level
123+
public static final String RELEASE_LEVEL = "alpha";
122124
public static final String VERSION = MAJOR + "." + MINOR + "." + MICRO;
123125

124126
public static final String MIME_TYPE = "text/x-python";

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

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import com.oracle.graal.python.builtins.objects.function.PFunction;
6262
import com.oracle.graal.python.builtins.objects.function.Signature;
6363
import com.oracle.graal.python.builtins.objects.generator.PGenerator;
64+
import com.oracle.graal.python.builtins.objects.ints.PInt;
6465
import com.oracle.graal.python.builtins.objects.list.PList;
6566
import com.oracle.graal.python.builtins.objects.method.PMethod;
6667
import com.oracle.graal.python.builtins.objects.module.PythonModule;
@@ -172,19 +173,19 @@ public void postInitialize(PythonCore core) {
172173
mod.setAttribute("capi_home", capiHome);
173174
mod.setAttribute("platform_id", toolchain.getIdentifier());
174175
mod.setAttribute("flags", core.factory().createTuple(new Object[]{
175-
false, // bytes_warning
176-
!context.getOption(PythonOptions.PythonOptimizeFlag), // debug
177-
context.getOption(PythonOptions.DontWriteBytecodeFlag), // dont_write_bytecode
178-
false, // hash_randomization
179-
context.getOption(PythonOptions.IgnoreEnvironmentFlag), // ignore_environment
180-
context.getOption(PythonOptions.InspectFlag), // inspect
181-
context.getOption(PythonOptions.TerminalIsInteractive), // interactive
182-
context.getOption(PythonOptions.IsolateFlag), // isolated
183-
context.getOption(PythonOptions.NoSiteFlag), // no_site
184-
context.getOption(PythonOptions.NoUserSiteFlag), // no_user_site
185-
context.getOption(PythonOptions.PythonOptimizeFlag), // optimize
186-
context.getOption(PythonOptions.QuietFlag), // quiet
187-
context.getOption(PythonOptions.VerboseFlag), // verbose
176+
0, // bytes_warning
177+
PInt.intValue(!context.getOption(PythonOptions.PythonOptimizeFlag)), // debug
178+
PInt.intValue(context.getOption(PythonOptions.DontWriteBytecodeFlag)), // dont_write_bytecode
179+
0, // hash_randomization
180+
PInt.intValue(context.getOption(PythonOptions.IgnoreEnvironmentFlag)), // ignore_environment
181+
PInt.intValue(context.getOption(PythonOptions.InspectFlag)), // inspect
182+
PInt.intValue(context.getOption(PythonOptions.TerminalIsInteractive)), // interactive
183+
PInt.intValue(context.getOption(PythonOptions.IsolateFlag)), // isolated
184+
PInt.intValue(context.getOption(PythonOptions.NoSiteFlag)), // no_site
185+
PInt.intValue(context.getOption(PythonOptions.NoUserSiteFlag)), // no_user_site
186+
PInt.intValue(context.getOption(PythonOptions.PythonOptimizeFlag)), // optimize
187+
PInt.intValue(context.getOption(PythonOptions.QuietFlag)), // quiet
188+
PInt.intValue(context.getOption(PythonOptions.VerboseFlag)), // verbose
188189
false, // dev_mode
189190
0, // utf8_mode
190191
}));

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

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242

4343
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.TypeError;
4444
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.ValueError;
45+
import static com.oracle.graal.python.nodes.PGuards.cannotBeOverridden;
4546
import static com.oracle.graal.python.nodes.SpecialMethodNames.__SIZEOF__;
4647

4748
import java.io.IOException;
@@ -69,6 +70,7 @@
6970
import com.oracle.graal.python.builtins.objects.module.PythonModule;
7071
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
7172
import com.oracle.graal.python.builtins.objects.str.PString;
73+
import com.oracle.graal.python.builtins.objects.str.StringNodes.StringMaterializeNode;
7274
import com.oracle.graal.python.builtins.objects.traceback.GetTracebackNode;
7375
import com.oracle.graal.python.builtins.objects.traceback.LazyTraceback;
7476
import com.oracle.graal.python.builtins.objects.traceback.PTraceback;
@@ -97,6 +99,7 @@
9799
import com.oracle.truffle.api.TruffleLanguage.Env;
98100
import com.oracle.truffle.api.dsl.Cached;
99101
import com.oracle.truffle.api.dsl.Cached.Shared;
102+
import com.oracle.truffle.api.dsl.Fallback;
100103
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
101104
import com.oracle.truffle.api.dsl.NodeFactory;
102105
import com.oracle.truffle.api.dsl.Specialization;
@@ -146,7 +149,7 @@ public void initialize(PythonCore core) {
146149
builtinConstants.put("path", core.factory().createList());
147150
builtinConstants.put("builtin_module_names", core.factory().createTuple(core.builtinModuleNames()));
148151
builtinConstants.put("maxsize", MAXSIZE);
149-
builtinConstants.put("version_info", core.factory().createTuple(new Object[]{PythonLanguage.MAJOR, PythonLanguage.MINOR, PythonLanguage.MICRO, "dev", 0}));
152+
builtinConstants.put("version_info", core.factory().createTuple(new Object[]{PythonLanguage.MAJOR, PythonLanguage.MINOR, PythonLanguage.MICRO, PythonLanguage.RELEASE_LEVEL, 0}));
150153
builtinConstants.put("version", PythonLanguage.VERSION +
151154
" (" + COMPILE_TIME + ")" +
152155
"\n[Graal, " + Truffle.getRuntime().getName() + ", Java " + System.getProperty("java.version") + "]");
@@ -415,15 +418,24 @@ protected String getFileSystemEncoding() {
415418
abstract static class InternNode extends PythonBuiltinNode {
416419
@Specialization
417420
@TruffleBoundary
418-
String doBytes(String s) {
421+
String doString(String s) {
419422
return s.intern();
420423
}
421424

422-
@Specialization
423-
@TruffleBoundary
424-
PString doBytes(PString ps) {
425-
String s = ps.getValue();
426-
return factory().createString(s.intern());
425+
@Specialization(limit = "1")
426+
String doPString(PString ps,
427+
@CachedLibrary("ps") PythonObjectLibrary lib,
428+
@Cached StringMaterializeNode materializeNode) {
429+
if (cannotBeOverridden(lib.getLazyPythonClass(ps))) {
430+
return doString(materializeNode.execute(ps));
431+
} else {
432+
throw raise(TypeError, ErrorMessages.CANNOT_INTERN_P, ps);
433+
}
434+
}
435+
436+
@Fallback
437+
String doOthers(Object obj) {
438+
throw raise(TypeError, ErrorMessages.ARG_MUST_BE_S_NOT_P, "intern()", "str", obj);
427439
}
428440
}
429441

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,7 @@ public abstract class ErrorMessages {
335335
public static final String LOCAL_VAR_REFERENCED_BEFORE_ASSIGMENT = "local variable '%s' referenced before assignment";
336336
public static final String LOCALS_MUST_BE_MAPPING = "%s() locals must be a mapping or None, not %p";
337337
public static final String LOST_SYSBREAKPOINTHOOK = "lost sys.breakpointhook";
338+
public static final String LOST_SYSDISPLAYHOOK = "lost sys.displayhook";
338339
public static final String LENGTH_SHOULD_NOT_BE_NEG = "length should not be negative";
339340
public static final String MATH_DOMAIN_ERROR = "math domain error";
340341
public static final String MATH_RANGE_ERROR = "math range error";
@@ -575,4 +576,5 @@ public abstract class ErrorMessages {
575576
public static final String KEYS_IN_TRANSLATE_TABLE_MUST_BE_STRINGS_OR_INTEGERS = "keys in translate table must be strings or integers";
576577
public static final String EXPECTED_BYTES_P_FOUND = "expected bytes, %p found";
577578
public static final String EMBEDDED_NULL_BYTE = "embedded null byte";
579+
public static final String CANNOT_INTERN_P = "can't intern %p";
578580
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/statement/PrintExpressionNode.java

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2019, 2020, 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
@@ -43,19 +43,26 @@
4343
import static com.oracle.graal.python.nodes.BuiltinNames.DISPLAYHOOK;
4444

4545
import com.oracle.graal.python.PythonLanguage;
46+
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4647
import com.oracle.graal.python.builtins.objects.PNone;
4748
import com.oracle.graal.python.builtins.objects.module.PythonModule;
49+
import com.oracle.graal.python.nodes.ErrorMessages;
50+
import com.oracle.graal.python.nodes.PRaiseNode;
4851
import com.oracle.graal.python.nodes.attributes.GetAttributeNode;
4952
import com.oracle.graal.python.nodes.call.CallNode;
5053
import com.oracle.graal.python.nodes.expression.ExpressionNode;
54+
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
5155
import com.oracle.graal.python.runtime.PythonContext;
56+
import com.oracle.graal.python.runtime.exception.PException;
5257
import com.oracle.truffle.api.CompilerDirectives;
5358
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
5459
import com.oracle.truffle.api.TruffleLanguage.ContextReference;
5560
import com.oracle.truffle.api.frame.VirtualFrame;
5661

5762
public class PrintExpressionNode extends ExpressionNode {
5863
@CompilationFinal private ContextReference<PythonContext> contextRef;
64+
@Child IsBuiltinClassProfile exceptionTypeProfile;
65+
@Child PRaiseNode raiseNode;
5966
@Child GetAttributeNode getAttribute = GetAttributeNode.create(DISPLAYHOOK);
6067
@Child CallNode callNode = CallNode.create();
6168
@Child ExpressionNode valueNode;
@@ -72,12 +79,37 @@ public Object execute(VirtualFrame frame) {
7279
contextRef = lookupContextReference(PythonLanguage.class);
7380
}
7481
PythonModule sysModule = contextRef.get().getCore().lookupBuiltinModule("sys");
75-
Object displayhook = getAttribute.executeObject(frame, sysModule);
82+
Object displayhook;
83+
try {
84+
displayhook = getAttribute.executeObject(frame, sysModule);
85+
} catch (PException ex) {
86+
if (ensureExceptionTypeProfile().profileException(ex, PythonBuiltinClassType.AttributeError)) {
87+
throw ensureRaiseNode().raise(PythonBuiltinClassType.RuntimeError, ErrorMessages.LOST_SYSDISPLAYHOOK);
88+
} else {
89+
throw ex;
90+
}
91+
}
7692
callNode.execute(frame, displayhook, value);
7793
return PNone.NONE;
7894
}
7995

8096
public static PrintExpressionNode create(ExpressionNode valueNode) {
8197
return new PrintExpressionNode(valueNode);
8298
}
99+
100+
public IsBuiltinClassProfile ensureExceptionTypeProfile() {
101+
if (exceptionTypeProfile == null) {
102+
CompilerDirectives.transferToInterpreterAndInvalidate();
103+
exceptionTypeProfile = insert(IsBuiltinClassProfile.create());
104+
}
105+
return exceptionTypeProfile;
106+
}
107+
108+
public PRaiseNode ensureRaiseNode() {
109+
if (raiseNode == null) {
110+
CompilerDirectives.transferToInterpreterAndInvalidate();
111+
raiseNode = insert(PRaiseNode.create());
112+
}
113+
return raiseNode;
114+
}
83115
}

graalpython/lib-graalpython/__graalpython__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@
3939

4040
import sys
4141

42+
class SysState:
43+
def __init__(self):
44+
self.recursionlimit = 1000
45+
self.checkinterval = 100
46+
self.switchinterval = 0.005
47+
48+
sys_state = SysState()
49+
del SysState
4250

4351
@builtin
4452
def import_current_as_named_module(name, owner_globals=None):

graalpython/lib-graalpython/_descriptor.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,23 @@ def _f(): pass
4343

4444

4545
def make_named_tuple_class(name, fields):
46+
sealed = False
4647
class named_tuple(tuple):
4748
__name__ = name
49+
__qualname__ = name
4850
n_sequence_fields = len(fields)
4951
fields = fields
5052

53+
@classmethod
54+
def seal(cls):
55+
nonlocal sealed
56+
sealed = True
57+
58+
def __new__(cls, *args, **kwargs):
59+
if sealed:
60+
raise TypeError("cannot create '{}' instances".format(name))
61+
return super(named_tuple, cls).__new__(cls, *args, **kwargs)
62+
5163
def __str__(self):
5264
return self.__repr__()
5365

0 commit comments

Comments
 (0)