Skip to content

Commit c17d029

Browse files
committed
[GR-34916] Intrinsify python_cext - PyErr_XXX.
PullRequest: graalpython/2117
2 parents 4b55a5c + 4401ad3 commit c17d029

File tree

12 files changed

+811
-352
lines changed

12 files changed

+811
-352
lines changed

graalpython/com.oracle.graal.python.test/src/tests/cpyext/test_err.py

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved.
1+
# Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved.
22
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
33
#
44
# The Universal Permissive License (UPL), Version 1.0
@@ -46,6 +46,16 @@
4646
def _reference_setstring(args):
4747
raise args[0](args[1])
4848

49+
def _new_ex_result_check(x, y):
50+
name = y[0]
51+
base = y[1]
52+
return name in str(x) and issubclass(x, base)
53+
54+
def _new_ex_with_doc_result_check(x, y):
55+
name = y[0]
56+
doc = y[1]
57+
base = y[2]
58+
return name in str(x) and issubclass(x, base) and x.__doc__ == doc
4959

5060
def _reference_setnone(args):
5161
raise args[0]()
@@ -154,7 +164,29 @@ def compile_module(self, name):
154164
resultval="NULL",
155165
cmpfunc=unhandled_error_compare
156166
)
157-
167+
168+
test_PyErr_NewException = CPyExtFunction(
169+
lambda args: args,
170+
lambda: (
171+
("main.TestException", TypeError, {}),
172+
),
173+
resultspec="O",
174+
argspec='sOO',
175+
arguments=["char* name", "PyObject* base", "PyObject* dict"],
176+
cmpfunc=_new_ex_result_check
177+
)
178+
179+
test_PyErr_NewExceptionWithDoc = CPyExtFunction(
180+
lambda args: args,
181+
lambda: (
182+
("main.TestException", "new exception doc", TypeError, {}),
183+
),
184+
resultspec="O",
185+
argspec='ssOO',
186+
arguments=["char* name", "char* doc", "PyObject* base", "PyObject* dict"],
187+
cmpfunc=_new_ex_with_doc_result_check
188+
)
189+
158190
test_PyErr_SetObject = CPyExtFunctionVoid(
159191
_reference_setstring,
160192
lambda: (

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

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -3,50 +3,3 @@
33
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.testChainingDescriptors
44
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.testExceptionCleanupNames
55
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.testExceptionCleanupState
6-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.testInfiniteRecursion
7-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.testInvalidAttrs
8-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.testInvalidTraceback
9-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.testKeywordArgs
10-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.testNoneClearsTracebackAttr
11-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.testRaising
12-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.testSettingException
13-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.testSyntaxErrorMessage
14-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.testSyntaxErrorMissingParens
15-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.testWithTraceback
16-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_3114
17-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_MemoryError
18-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_WindowsError
19-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_badisinstance
20-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_errno_ENOTDIR
21-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_exception_target_in_nested_scope
22-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_exception_with_doc
23-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_generator_close_cleanup_exc_state
24-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_generator_del_cleanup_exc_state
25-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_generator_doesnt_retain_old_exc
26-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_generator_doesnt_retain_old_exc2
27-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_generator_finalizing_and_exc_info
28-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_generator_leaking
29-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_generator_leaking2
30-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_generator_leaking3
31-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_generator_leaking4
32-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_generator_next_cleanup_exc_state
33-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_generator_send_cleanup_exc_state
34-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_generator_throw_cleanup_exc_state
35-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_memory_error_cleanup
36-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_memory_error_in_PyErr_PrintEx
37-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_raise_in_generator
38-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_recursion_error_cleanup
39-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_recursion_normalizing_exception
40-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_recursion_normalizing_infinite_exception
41-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_recursion_normalizing_with_no_memory
42-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_str
43-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_unhandled
44-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_unicode_change_attributes
45-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_unicode_errors_no_object
46-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_unraisable
47-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_windows_message
48-
*graalpython.lib-python.3.test.test_exceptions.ExceptionTests.test_yield_in_nested_try_excepts
49-
*graalpython.lib-python.3.test.test_exceptions.ImportErrorTests.test_attributes
50-
*graalpython.lib-python.3.test.test_exceptions.ImportErrorTests.test_copy_pickle
51-
*graalpython.lib-python.3.test.test_exceptions.ImportErrorTests.test_non_str_argument
52-
*graalpython.lib-python.3.test.test_exceptions.ImportErrorTests.test_reset_attributes

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@
121121
import com.oracle.graal.python.builtins.modules.cext.PythonCextImportBuiltins;
122122
import com.oracle.graal.python.builtins.modules.cext.PythonCextMemoryViewBuiltins;
123123
import com.oracle.graal.python.builtins.modules.cext.PythonCextAbstractBuiltins;
124+
import com.oracle.graal.python.builtins.modules.cext.PythonCextErrBuiltins;
124125
import com.oracle.graal.python.builtins.modules.cext.PythonCextIterBuiltins;
125126
import com.oracle.graal.python.builtins.modules.cext.PythonCextModuleBuiltins;
126127
import com.oracle.graal.python.builtins.modules.cext.PythonCextNamespaceBuiltins;
@@ -131,6 +132,7 @@
131132
import com.oracle.graal.python.builtins.modules.cext.PythonCextSliceBuiltins;
132133
import com.oracle.graal.python.builtins.modules.cext.PythonCextSysBuiltins;
133134
import com.oracle.graal.python.builtins.modules.cext.PythonCextTupleBuiltins;
135+
import com.oracle.graal.python.builtins.modules.cext.PythonCextWarnBuiltins;
134136
import com.oracle.graal.python.builtins.modules.csv.CSVDialectBuiltins;
135137
import com.oracle.graal.python.builtins.modules.csv.CSVModuleBuiltins;
136138
import com.oracle.graal.python.builtins.modules.csv.CSVReaderBuiltins;
@@ -491,6 +493,7 @@ private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed)
491493
new PythonCextCodeBuiltins(),
492494
new PythonCextComplexBuiltins(),
493495
new PythonCextDictBuiltins(),
496+
new PythonCextErrBuiltins(),
494497
new PythonCextFileBuiltins(),
495498
new PythonCextFloatBuiltins(),
496499
new PythonCextImportBuiltins(),
@@ -507,6 +510,7 @@ private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed)
507510
new PythonCextSysBuiltins(),
508511
new PythonCextTupleBuiltins(),
509512
new PythonCextUnicodeBuiltins(),
513+
new PythonCextWarnBuiltins(),
510514
new WeakRefModuleBuiltins(),
511515
new ReferenceTypeBuiltins(),
512516
new WarningsModuleBuiltins(),

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, 2021, Oracle and/or its affiliates.
2+
* Copyright (c) 2018, 2022, Oracle and/or its affiliates.
33
* Copyright (c) 2014, Regents of the University of California
44
*
55
* All rights reserved.
@@ -1800,7 +1800,7 @@ String getStrError(int code,
18001800
@Builtin(name = "_exit", minNumOfPositionalArgs = 1)
18011801
@GenerateNodeFactory
18021802
@TypeSystemReference(PythonArithmeticTypes.class)
1803-
public abstract static class ExitNode extends PythonBuiltinNode {
1803+
public abstract static class ExitNode extends PythonUnaryBuiltinNode {
18041804
@TruffleBoundary
18051805
@Specialization
18061806
Object exit(int status) {

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@
121121
import com.oracle.graal.python.builtins.PythonBuiltins;
122122
import com.oracle.graal.python.builtins.PythonOS;
123123
import com.oracle.graal.python.builtins.modules.SysModuleBuiltinsClinicProviders.GetFrameNodeClinicProviderGen;
124+
import com.oracle.graal.python.builtins.modules.SysModuleBuiltinsFactory.ExcInfoNodeFactory;
124125
import com.oracle.graal.python.builtins.modules.io.BufferedReaderBuiltins;
125126
import com.oracle.graal.python.builtins.modules.io.BufferedWriterBuiltins;
126127
import com.oracle.graal.python.builtins.modules.io.FileIOBuiltins;
@@ -647,10 +648,22 @@ public PDict getModules() {
647648
return (PDict) getBuiltinConstants().get(MODULES);
648649
}
649650

651+
@TruffleBoundary
652+
public Object getStdErr() {
653+
return getBuiltinConstants().get(STDERR);
654+
}
655+
656+
@TruffleBoundary
657+
public Object getStdOut() {
658+
return getBuiltinConstants().get(STDOUT);
659+
}
660+
650661
@Builtin(name = "exc_info", needsFrame = true)
651662
@GenerateNodeFactory
652663
public abstract static class ExcInfoNode extends PythonBuiltinNode {
653664

665+
public abstract PTuple execute(VirtualFrame frame);
666+
654667
public static Object fast(VirtualFrame frame, GetClassNode getClassNode, GetCaughtExceptionNode getCaughtExceptionNode, PythonObjectFactory factory) {
655668
final PException currentException = getCaughtExceptionNode.execute(frame);
656669
if (currentException == null) {
@@ -660,7 +673,7 @@ public static Object fast(VirtualFrame frame, GetClassNode getClassNode, GetCaug
660673
}
661674

662675
@Specialization
663-
public Object run(VirtualFrame frame,
676+
public PTuple run(VirtualFrame frame,
664677
@Cached GetClassNode getClassNode,
665678
@Cached GetCaughtExceptionNode getCaughtExceptionNode,
666679
@Cached GetTracebackNode getTracebackNode) {
@@ -679,6 +692,10 @@ public Object run(VirtualFrame frame,
679692
}
680693
}
681694

695+
public static ExcInfoNode create() {
696+
return ExcInfoNodeFactory.create(null);
697+
}
698+
682699
}
683700

684701
// ATTENTION: this is intentionally a PythonBuiltinNode and not PythonUnaryBuiltinNode,

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2020, 2022, 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
@@ -52,6 +52,7 @@
5252
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
5353
import com.oracle.graal.python.builtins.PythonBuiltins;
5454
import com.oracle.graal.python.builtins.modules.WarningsModuleBuiltinsClinicProviders.WarnBuiltinNodeClinicProviderGen;
55+
import com.oracle.graal.python.builtins.modules.WarningsModuleBuiltinsFactory.WarnBuiltinNodeFactory;
5556
import com.oracle.graal.python.builtins.objects.PNone;
5657
import com.oracle.graal.python.builtins.objects.code.PCode;
5758
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
@@ -953,19 +954,26 @@ public Assumption needNotPassExceptionAssumption() {
953954
@ArgumentClinic(name = "stacklevel", conversion = ClinicConversion.Int, defaultValue = "1")
954955
@ArgumentClinic(name = "source", defaultValue = "PNone.NONE")
955956
@GenerateNodeFactory
956-
abstract static class WarnBuiltinNode extends PythonClinicBuiltinNode {
957+
public abstract static class WarnBuiltinNode extends PythonClinicBuiltinNode {
957958
@Override
958959
protected ArgumentClinicProvider getArgumentClinic() {
959960
return WarnBuiltinNodeClinicProviderGen.INSTANCE;
960961
}
961962

963+
public abstract Object execute(VirtualFrame frame, PythonModule mod, Object message, Object category, int stacklevel, Object source);
964+
962965
@Specialization
963966
Object doWarn(VirtualFrame frame, PythonModule mod, Object message, Object category, int stacklevel, Object source,
964967
@Cached WarningsModuleNode moduleFunctionsNode) {
965968
// warnings_warn_impl
966969
moduleFunctionsNode.doWarn(frame, mod, message, moduleFunctionsNode.getCategory(frame, message, category), stacklevel, source);
967970
return PNone.NONE;
968971
}
972+
973+
public static WarnBuiltinNode create() {
974+
return WarnBuiltinNodeFactory.create(null);
975+
}
976+
969977
}
970978

971979
@ReportPolymorphism

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextAbstractBuiltins.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
import com.oracle.graal.python.builtins.modules.BuiltinFunctions.NextNode;
7474
import com.oracle.graal.python.builtins.modules.BuiltinFunctions.OctNode;
7575
import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.NativeBuiltin;
76-
import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.PyErrRestoreNode;
76+
import com.oracle.graal.python.builtins.modules.cext.PythonCextErrBuiltins.PyErrRestoreNode;
7777
import com.oracle.graal.python.builtins.objects.PNone;
7878
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.AddRefCntNode;
7979
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.AsPythonObjectNode;

0 commit comments

Comments
 (0)