Skip to content

Commit 1347710

Browse files
committed
intrinsified python_cext.Py_ErrorHandlerm/Py_NotImplemented/Py_True/Py_False/Py_Ellipsis/PyModule_SetDocString
1 parent 9262aa4 commit 1347710

File tree

2 files changed

+90
-31
lines changed

2 files changed

+90
-31
lines changed

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

Lines changed: 90 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
import com.oracle.graal.python.builtins.CoreFunctions;
7878
import com.oracle.graal.python.builtins.Python3Core;
7979
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
80+
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.NotImplementedError;
8081
import com.oracle.graal.python.builtins.PythonBuiltins;
8182
import com.oracle.graal.python.builtins.modules.PythonCextBuiltinsFactory.CreateFunctionNodeGen;
8283
import com.oracle.graal.python.builtins.objects.PNone;
@@ -183,6 +184,7 @@
183184
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.GetItemScalarNode;
184185
import com.oracle.graal.python.builtins.objects.dict.DictBuiltins;
185186
import com.oracle.graal.python.builtins.objects.dict.PDict;
187+
import com.oracle.graal.python.builtins.objects.ellipsis.PEllipsis;
186188
import com.oracle.graal.python.builtins.objects.exception.PBaseException;
187189
import com.oracle.graal.python.builtins.objects.frame.PFrame;
188190
import com.oracle.graal.python.builtins.objects.frame.PFrame.Reference;
@@ -268,6 +270,7 @@
268270
import com.oracle.graal.python.nodes.function.builtins.PythonQuaternaryBuiltinNode;
269271
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
270272
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
273+
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryClinicBuiltinNode;
271274
import com.oracle.graal.python.nodes.function.builtins.PythonVarargsBuiltinNode;
272275
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
273276
import com.oracle.graal.python.nodes.object.GetClassNode;
@@ -342,6 +345,8 @@ public class PythonCextBuiltins extends PythonBuiltins {
342345
private static final String ERROR_HANDLER = "error_handler";
343346
public static final String NATIVE_NULL = "native_null";
344347

348+
private PythonObject errorHandler;
349+
345350
@Override
346351
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {
347352
return PythonCextBuiltinsFactory.getFactories();
@@ -353,7 +358,8 @@ public void initialize(Python3Core core) {
353358
PythonClass errorHandlerClass = core.factory().createPythonClassAndFixupSlots(core.getLanguage(), PythonBuiltinClassType.PythonClass,
354359
"CErrorHandler", new PythonAbstractClass[]{core.lookupType(PythonBuiltinClassType.PythonObject)});
355360
builtinConstants.put("CErrorHandler", errorHandlerClass);
356-
builtinConstants.put(ERROR_HANDLER, core.factory().createPythonObject(errorHandlerClass));
361+
errorHandler = core.factory().createPythonObject(errorHandlerClass);
362+
builtinConstants.put(ERROR_HANDLER, errorHandler);
357363
builtinConstants.put(NATIVE_NULL, new PythonNativeNull());
358364
builtinConstants.put("PyEval_SaveThread", new PyEvalSaveThread());
359365
builtinConstants.put("PyEval_RestoreThread", new PyEvalRestoreThread());
@@ -418,6 +424,89 @@ Object run(VirtualFrame frame, Object o) {
418424
}
419425
}
420426

427+
@Builtin(name = "Py_ErrorHandler", minNumOfPositionalArgs = 1, declaresExplicitSelf = true)
428+
@GenerateNodeFactory
429+
public abstract static class PyErrorHandlerNode extends PythonUnaryBuiltinNode {
430+
@Specialization
431+
Object run(PythonModule cextPython) {
432+
return ((PythonCextBuiltins) cextPython.getBuiltins()).errorHandler;
433+
}
434+
}
435+
436+
@Builtin(name = "Py_NotImplemented")
437+
@GenerateNodeFactory
438+
public abstract static class PyNotImplementedNode extends PythonBuiltinNode {
439+
@Specialization
440+
Object run() {
441+
return NotImplementedError;
442+
}
443+
}
444+
445+
@Builtin(name = "Py_True")
446+
@GenerateNodeFactory
447+
public abstract static class PyTrueNode extends PythonBuiltinNode {
448+
@Specialization
449+
Object run() {
450+
return true;
451+
}
452+
}
453+
454+
@Builtin(name = "Py_False")
455+
@GenerateNodeFactory
456+
public abstract static class PyFalseNode extends PythonBuiltinNode {
457+
@Specialization
458+
Object run() {
459+
return false;
460+
}
461+
}
462+
463+
@Builtin(name = "Py_Ellipsis")
464+
@GenerateNodeFactory
465+
public abstract static class PyEllipsisNode extends PythonBuiltinNode {
466+
@Specialization
467+
Object run() {
468+
return PEllipsis.INSTANCE;
469+
}
470+
}
471+
472+
@Builtin(name = "PyModule_SetDocString", minNumOfPositionalArgs = 2)
473+
@GenerateNodeFactory
474+
public abstract static class SetDocStringNode extends PythonBinaryBuiltinNode {
475+
@Specialization
476+
Object run(VirtualFrame frame, PythonModule module, Object doc,
477+
@Cached ObjectBuiltins.SetattrNode setattrNode) {
478+
setattrNode.execute(frame, module, __DOC__, doc);
479+
return PNone.NONE;
480+
}
481+
}
482+
483+
@Builtin(name = "PyModule_NewObject", minNumOfPositionalArgs = 1, parameterNames = {"name"})
484+
@ArgumentClinic(name = "name", conversion = ClinicConversion.String)
485+
@GenerateNodeFactory
486+
public abstract static class PyModuleNewObjectNode extends PythonUnaryClinicBuiltinNode {
487+
488+
@Override
489+
protected ArgumentClinicProvider getArgumentClinic() {
490+
return PythonCextBuiltinsClinicProviders.PyModuleNewObjectNodeClinicProviderGen.INSTANCE;
491+
}
492+
493+
@Specialization
494+
Object run(String name) {
495+
return newModule(name, getCore(), factory());
496+
}
497+
}
498+
499+
private static PythonModule newModule(String name, Python3Core core, PythonObjectFactory factory) {
500+
PythonModule sysModule = core.lookupBuiltinModule("sys");
501+
PDict sysModules = (PDict) sysModule.getAttribute("modules");
502+
PythonModule newModule = (PythonModule) sysModules.getItem(name);
503+
if (newModule == null) {
504+
newModule = factory.createPythonModule(name);
505+
sysModules.setItem(name, newModule);
506+
}
507+
return newModule;
508+
}
509+
421510
/**
422511
* This is used in the ExternalFunctionNode below, so all arguments passed from Python code into
423512
* a C function are automatically unwrapped if they are wrapped. This function is also called

graalpython/lib-graalpython/python_cext.py

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -52,30 +52,8 @@ def decorator(fun):
5252
return make_may_raise_wrapper(fun, error_result)
5353
return decorator
5454

55-
56-
def Py_ErrorHandler():
57-
return to_sulong(error_handler)
58-
59-
60-
def Py_NotImplemented():
61-
return NotImplemented
62-
63-
64-
def Py_True():
65-
return True
66-
67-
68-
def Py_False():
69-
return False
70-
71-
72-
def Py_Ellipsis():
73-
return ...
74-
75-
7655
moduletype = type(sys)
7756

78-
7957
def _PyModule_CreateInitialized_PyModule_New(name):
8058
# see CPython's Objects/moduleobject.c - _PyModule_CreateInitialized for
8159
# comparison how they handle _Py_PackageContext
@@ -93,14 +71,6 @@ def _PyModule_CreateInitialized_PyModule_New(name):
9371
new_module.__package__ = name.rpartition('.')[0]
9472
return new_module
9573

96-
97-
def PyModule_SetDocString(module, string):
98-
module.__doc__ = string
99-
100-
101-
def PyModule_NewObject(name):
102-
return moduletype(name)
103-
10474
##################### ABSTRACT
10575

10676
@may_raise(-1)

0 commit comments

Comments
 (0)