Skip to content

Commit f10fb7e

Browse files
committed
SysModuleBuiltins add get/setcheckinterval builtins
1 parent deef5bc commit f10fb7e

File tree

3 files changed

+47
-16
lines changed

3 files changed

+47
-16
lines changed

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

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@
4141
package com.oracle.graal.python.builtins.modules;
4242

4343
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.AttributeError;
44+
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.DeprecationWarning;
4445
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.ImportError;
4546
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.RuntimeError;
4647
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.RuntimeWarning;
47-
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.SystemExit;
4848
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.TypeError;
4949
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.UnicodeEncodeError;
5050
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.ValueError;
@@ -69,7 +69,6 @@
6969
import static com.oracle.graal.python.nodes.BuiltinNames.BUILTINS;
7070
import static com.oracle.graal.python.nodes.BuiltinNames.DISPLAYHOOK;
7171
import static com.oracle.graal.python.nodes.BuiltinNames.EXCEPTHOOK;
72-
import static com.oracle.graal.python.nodes.BuiltinNames.EXIT;
7372
import static com.oracle.graal.python.nodes.BuiltinNames.PYTHONBREAKPOINT;
7473
import static com.oracle.graal.python.nodes.BuiltinNames.STDERR;
7574
import static com.oracle.graal.python.nodes.BuiltinNames.STDIN;
@@ -87,6 +86,7 @@
8786
import static com.oracle.graal.python.nodes.ErrorMessages.REC_LIMIT_GREATER_THAN_1;
8887
import static com.oracle.graal.python.nodes.ErrorMessages.S_EXPECTED_GOT_P;
8988
import static com.oracle.graal.python.nodes.ErrorMessages.WARN_CANNOT_RUN_PDB_YET;
89+
import static com.oracle.graal.python.nodes.ErrorMessages.WARN_DEPRECTATED_SYS_CHECKINTERVAL;
9090
import static com.oracle.graal.python.nodes.ErrorMessages.WARN_IGNORE_UNIMPORTABLE_BREAKPOINT_S;
9191
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__;
9292
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__MODULE__;
@@ -105,7 +105,6 @@
105105

106106
import com.oracle.graal.python.lib.PyFloatCheckExactNode;
107107
import com.oracle.graal.python.lib.PyLongAsIntNode;
108-
import com.oracle.graal.python.runtime.exception.PythonExitException;
109108
import org.graalvm.nativeimage.ImageInfo;
110109

111110
import com.oracle.graal.python.PythonLanguage;
@@ -164,7 +163,6 @@
164163
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
165164
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
166165
import com.oracle.graal.python.nodes.function.builtins.PythonClinicBuiltinNode;
167-
import com.oracle.graal.python.nodes.function.builtins.PythonVarargsBuiltinNode;
168166
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
169167
import com.oracle.graal.python.nodes.object.GetClassNode;
170168
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
@@ -1442,4 +1440,47 @@ Object setRecLim(VirtualFrame frame, @SuppressWarnings("unused") PythonModule sy
14421440
}
14431441
}
14441442

1443+
@Builtin(name = "getcheckinterval", minNumOfPositionalArgs = 1, declaresExplicitSelf = true, doc = "getcheckinterval($module, /)\n" +
1444+
"--\n" +
1445+
"\n" +
1446+
"Return the current check interval; see sys.setcheckinterval().")
1447+
@GenerateNodeFactory
1448+
abstract static class GetCheckIntervalNode extends PythonBuiltinNode {
1449+
@Specialization
1450+
Object getCheckInterval(VirtualFrame frame, @SuppressWarnings("unused") PythonModule sys,
1451+
@Cached WarningsModuleBuiltins.WarnNode warnNode) {
1452+
warnNode.warnFormat(frame, DeprecationWarning, WARN_DEPRECTATED_SYS_CHECKINTERVAL);
1453+
return getContext().getSysModuleState().getCheckInterval();
1454+
}
1455+
}
1456+
1457+
@Builtin(name = "setcheckinterval", minNumOfPositionalArgs = 2, declaresExplicitSelf = true, doc = "setcheckinterval($module, n, /)\n" +
1458+
"--\n" +
1459+
"\n" +
1460+
"Set the async event check interval to n instructions.\n" +
1461+
"\n" +
1462+
"This tells the Python interpreter to check for asynchronous events\n" +
1463+
"every n instructions.\n" +
1464+
"\n" +
1465+
"This also affects how often thread switches occur.")
1466+
@GenerateNodeFactory
1467+
abstract static class SetCheckIntervalNode extends PythonBuiltinNode {
1468+
@Specialization
1469+
Object setCheckInterval(VirtualFrame frame, @SuppressWarnings("unused") PythonModule sys, Object arg,
1470+
@Cached WarningsModuleBuiltins.WarnNode warnNode,
1471+
@Cached PyLongAsIntNode longAsIntNode,
1472+
@Cached PyFloatCheckExactNode floatCheckExactNode) {
1473+
if (floatCheckExactNode.execute(arg)) {
1474+
throw raise(TypeError, S_EXPECTED_GOT_P, "integer", arg);
1475+
}
1476+
1477+
try {
1478+
final int n = longAsIntNode.execute(frame, arg);
1479+
warnNode.warnFormat(frame, DeprecationWarning, WARN_DEPRECTATED_SYS_CHECKINTERVAL);
1480+
getContext().getSysModuleState().setCheckInterval(n);
1481+
} catch (PException ignore) {
1482+
}
1483+
return PNone.NONE;
1484+
}
1485+
}
14451486
}

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
@@ -998,4 +998,6 @@ public abstract class ErrorMessages {
998998
"and may be removed in a future version of Python.";
999999
public static final String WARN_CANNOT_RUN_PDB_YET = "Graal Python cannot run pdb, yet, consider using `--inspect` on the commandline";
10001000
public static final String WARN_IGNORE_UNIMPORTABLE_BREAKPOINT_S = "Ignoring unimportable $PYTHONBREAKPOINT: \"%s\"";
1001+
public static final String WARN_DEPRECTATED_SYS_CHECKINTERVAL = "sys.getcheckinterval() and sys.setcheckinterval() " +
1002+
"are deprecated. Use sys.getswitchinterval() instead.";
10011003
}

graalpython/lib-graalpython/sys.py

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,18 +58,6 @@ def exit(arg=None):
5858
code = arg[0]
5959
raise SystemExit(code)
6060

61-
@__graalpython__.builtin
62-
def getcheckinterval():
63-
return __graalpython__.sys_state.checkinterval
64-
65-
@__graalpython__.builtin
66-
def setcheckinterval(value):
67-
import warnings
68-
warnings.warn("sys.getcheckinterval() and sys.setcheckinterval() are deprecated. Use sys.setswitchinterval() instead.", DeprecationWarning)
69-
if not isinstance(value, int):
70-
raise TypeError("an integer is required")
71-
__graalpython__.sys_state.checkinterval = value
72-
7361
@__graalpython__.builtin
7462
def getswitchinterval():
7563
return __graalpython__.sys_state.switchinterval

0 commit comments

Comments
 (0)