Skip to content

Commit a0935d9

Browse files
committed
added @CoreFunctions.extendsModule()
1 parent 7e1ae9b commit a0935d9

13 files changed

+29
-89
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
public @interface CoreFunctions {
3333
String defineModule() default "";
3434

35+
String extendsModule() default "";
36+
3537
/**
3638
* Most builtins are not OS specific. If specified, the builtin is included only if the os
3739
* matches

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -959,6 +959,9 @@ private void populateBuiltins() {
959959
if (annotation.defineModule().length() > 0) {
960960
addBuiltinsTo(builtinModules.get(annotation.defineModule()), builtin);
961961
}
962+
if (annotation.extendsModule().length() > 0) {
963+
addBuiltinsTo(builtinModules.get(annotation.extendsModule()), builtin);
964+
}
962965
for (PythonBuiltinClassType klass : annotation.extendClasses()) {
963966
addBuiltinsTo(lookupType(klass), builtin);
964967
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ public void initialize(Python3Core core) {
7575
CoreFunctions annotation = getClass().getAnnotation(CoreFunctions.class);
7676
final boolean declaresExplicitSelf;
7777
PythonBuiltinClassType constructsClass = builtin.constructsClass();
78-
if (annotation.defineModule().length() > 0 && constructsClass == PythonBuiltinClassType.nil) {
78+
if ((annotation.defineModule().length() > 0 || annotation.extendsModule().length() > 0) && constructsClass == PythonBuiltinClassType.nil) {
79+
assert annotation.defineModule().isEmpty() && !annotation.extendsModule().isEmpty() || !annotation.defineModule().isEmpty() && annotation.extendsModule().isEmpty();
7980
assert !builtin.isGetter();
8081
assert !builtin.isSetter();
8182
assert annotation.extendClasses().length == 0;

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

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,12 @@
103103
import com.oracle.truffle.api.dsl.Specialization;
104104
import com.oracle.truffle.api.dsl.TypeSystemReference;
105105
import com.oracle.truffle.api.frame.VirtualFrame;
106-
import com.oracle.truffle.api.nodes.Node.Child;
107106
import com.oracle.truffle.api.profiles.ConditionProfile;
108107

109-
@CoreFunctions(defineModule = PythonCextAbstractBuiltins.PYTHON_CEXT_ABSTRACT)
108+
@CoreFunctions(extendsModule = PythonCextBuiltins.PYTHON_CEXT)
110109
@GenerateNodeFactory
111110
public class PythonCextAbstractBuiltins extends PythonBuiltins {
112111

113-
public static final String PYTHON_CEXT_ABSTRACT = "python_cext_abstract";
114-
115112
@Override
116113
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {
117114
return PythonCextAbstractBuiltinsFactory.getFactories();
@@ -123,7 +120,7 @@ public void initialize(Python3Core core) {
123120
}
124121

125122
/////// PyNumber ///////
126-
123+
127124
@Builtin(name = "PyNumber_Check", minNumOfPositionalArgs = 1)
128125
@TypeSystemReference(PythonTypes.class)
129126
@GenerateNodeFactory
@@ -661,9 +658,9 @@ private LookupAndCallInplaceNode ensureCallNode() {
661658
return callNode;
662659
}
663660
}
664-
665-
/////// PySequence ///////
666-
661+
662+
/////// PySequence ///////
663+
667664
@Builtin(name = "PySequence_Tuple", minNumOfPositionalArgs = 1)
668665
@GenerateNodeFactory
669666
public abstract static class PySequenceTupleNode extends PythonUnaryBuiltinNode {
@@ -976,5 +973,5 @@ Object doManaged(VirtualFrame frame, Object listWrapper, Object position,
976973
}
977974
}
978975
}
979-
976+
980977
}

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

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,6 @@
4040
*/
4141
package com.oracle.graal.python.builtins.modules.cext;
4242

43-
import static com.oracle.graal.python.builtins.modules.cext.PythonCextAbstractBuiltins.PYTHON_CEXT_ABSTRACT;
44-
import static com.oracle.graal.python.builtins.modules.cext.PythonCextBytesBuiltins.PYTHON_CEXT_BYTES;
45-
import static com.oracle.graal.python.builtins.modules.cext.PythonCextComplexBuiltins.PYTHON_CEXT_COMPLEX;
46-
import static com.oracle.graal.python.builtins.modules.cext.PythonCextDictBuiltins.PYTHON_CEXT_DICT;
47-
import static com.oracle.graal.python.builtins.modules.cext.PythonCextFloatBuiltins.PYTHON_CEXT_FLOAT;
48-
import static com.oracle.graal.python.builtins.modules.cext.PythonCextListBuiltins.PYTHON_CEXT_LIST;
49-
import static com.oracle.graal.python.builtins.modules.cext.PythonCextLongBuiltins.PYTHON_CEXT_LONG;
50-
import static com.oracle.graal.python.builtins.modules.cext.PythonCextSetBuiltins.PYTHON_CEXT_SET;
51-
import static com.oracle.graal.python.builtins.modules.cext.PythonCextUnicodeBuiltins.PYTHON_CEXT_UNICODE;
5243
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.IndexError;
5344
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.SystemError;
5445
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.TypeError;
@@ -181,8 +172,6 @@
181172
import com.oracle.graal.python.builtins.objects.common.HashingCollectionNodes;
182173
import com.oracle.graal.python.builtins.objects.common.HashingStorage;
183174
import com.oracle.graal.python.builtins.objects.common.HashingStorageLibrary;
184-
import com.oracle.graal.python.builtins.objects.common.HashingStorageLibrary.HashingStorageIterable;
185-
import com.oracle.graal.python.builtins.objects.common.HashingStorageLibrary.HashingStorageIterator;
186175
import com.oracle.graal.python.builtins.objects.common.IndexNodes.NormalizeIndexNode;
187176
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
188177
import com.oracle.graal.python.builtins.objects.common.SequenceNodes;
@@ -214,7 +203,6 @@
214203
import com.oracle.graal.python.builtins.objects.method.PBuiltinMethod;
215204
import com.oracle.graal.python.builtins.objects.module.PythonModule;
216205
import com.oracle.graal.python.builtins.objects.object.ObjectBuiltins;
217-
import com.oracle.graal.python.builtins.objects.object.PythonBuiltinObject;
218206
import com.oracle.graal.python.builtins.objects.object.PythonObject;
219207
import com.oracle.graal.python.builtins.objects.str.PString;
220208
import com.oracle.graal.python.builtins.objects.traceback.GetTracebackNode;
@@ -276,7 +264,6 @@
276264
import com.oracle.graal.python.nodes.function.builtins.PythonVarargsBuiltinNode;
277265
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
278266
import com.oracle.graal.python.nodes.object.GetClassNode;
279-
import com.oracle.graal.python.nodes.object.GetDictIfExistsNodeGen;
280267
import com.oracle.graal.python.nodes.truffle.PythonTypes;
281268
import com.oracle.graal.python.nodes.util.CannotCastException;
282269
import com.oracle.graal.python.nodes.util.CastToJavaIntExactNode;
@@ -363,35 +350,6 @@ public void initialize(Python3Core core) {
363350
builtinConstants.put("PyGILState_Release", new PyGILStateRelease());
364351
}
365352

366-
@Override
367-
public void postInitialize(Python3Core core) {
368-
PythonModule cext = core.lookupBuiltinModule(PYTHON_CEXT);
369-
addModuleDict(cext, PYTHON_CEXT_ABSTRACT, core);
370-
addModuleDict(cext, PYTHON_CEXT_BYTES, core);
371-
addModuleDict(cext, PYTHON_CEXT_COMPLEX, core);
372-
addModuleDict(cext, PYTHON_CEXT_DICT, core);
373-
addModuleDict(cext, PYTHON_CEXT_FLOAT, core);
374-
addModuleDict(cext, PYTHON_CEXT_LONG, core);
375-
addModuleDict(cext, PYTHON_CEXT_LIST, core);
376-
addModuleDict(cext, PYTHON_CEXT_SET, core);
377-
addModuleDict(cext, PYTHON_CEXT_UNICODE, core);
378-
}
379-
380-
private void addModuleDict(PythonModule cext, String module, Python3Core core) {
381-
PythonModule cext_module = core.lookupBuiltinModule(module);
382-
PDict dict = GetDictIfExistsNodeGen.getUncached().execute(cext_module);
383-
HashingStorageIterable<Object> keys = dict.keys();
384-
HashingStorageIterator<Object> it = keys.iterator();
385-
while (it.hasNext()) {
386-
Object key = it.next();
387-
Object value = dict.getItem(key);
388-
if (value instanceof PythonBuiltinObject) {
389-
assert cext.getAttribute(key) == PNone.NO_VALUE || cext.getAttribute(key) == null : "python_cext dict already contains value " + cext.getAttribute(key) + " for key " + key;
390-
cext.setAttribute(key, value);
391-
}
392-
}
393-
}
394-
395353
@FunctionalInterface
396354
public interface TernaryFunction<T1, T2, T3, R> {
397355
R apply(T1 arg0, T2 arg1, T3 arg2);

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,10 @@
9696
import com.oracle.truffle.api.interop.InteropException;
9797
import java.util.Arrays;
9898

99-
@CoreFunctions(defineModule = PythonCextBytesBuiltins.PYTHON_CEXT_BYTES)
99+
@CoreFunctions(extendsModule = PythonCextBuiltins.PYTHON_CEXT)
100100
@GenerateNodeFactory
101101
public class PythonCextBytesBuiltins extends PythonBuiltins {
102102

103-
public static final String PYTHON_CEXT_BYTES = "python_cext_bytes";
104-
105103
@Override
106104
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {
107105
return PythonCextBytesBuiltinsFactory.getFactories();

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,10 @@
6767
import com.oracle.truffle.api.dsl.Specialization;
6868
import com.oracle.truffle.api.frame.VirtualFrame;
6969

70-
@CoreFunctions(defineModule = PythonCextComplexBuiltins.PYTHON_CEXT_COMPLEX)
70+
@CoreFunctions(extendsModule = PythonCextBuiltins.PYTHON_CEXT)
7171
@GenerateNodeFactory
7272
public class PythonCextComplexBuiltins extends PythonBuiltins {
7373

74-
public static final String PYTHON_CEXT_COMPLEX = "python_cext_complex";
75-
7674
@Override
7775
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {
7876
return PythonCextComplexBuiltinsFactory.getFactories();

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

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
5656
import com.oracle.graal.python.builtins.PythonBuiltins;
5757
import com.oracle.graal.python.builtins.modules.BuiltinConstructors.StrNode;
58-
import com.oracle.graal.python.builtins.objects.PNone;
5958
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.GetNativeNullNode;
6059
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.PRaiseNativeNode;
6160
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.TransformExceptionToNativeNode;
@@ -103,12 +102,10 @@
103102
import com.oracle.truffle.api.profiles.ConditionProfile;
104103
import com.oracle.truffle.api.profiles.LoopConditionProfile;
105104

106-
@CoreFunctions(defineModule = PythonCextDictBuiltins.PYTHON_CEXT_DICT)
105+
@CoreFunctions(extendsModule = PythonCextBuiltins.PYTHON_CEXT)
107106
@GenerateNodeFactory
108107
public class PythonCextDictBuiltins extends PythonBuiltins {
109108

110-
public static final String PYTHON_CEXT_DICT = "python_cext_dict";
111-
112109
@Override
113110
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {
114111
return PythonCextDictBuiltinsFactory.getFactories();
@@ -271,39 +268,39 @@ protected boolean isDictSubtype(VirtualFrame frame, Object obj, GetClassNode get
271268
}
272269
}
273270

274-
@Builtin(name = "PyDict_Copy", minNumOfPositionalArgs = 2, maxNumOfPositionalArgs = 3)
271+
@Builtin(name = "PyDict_Copy", minNumOfPositionalArgs = 2, declaresExplicitSelf = true)
275272
@GenerateNodeFactory
276-
public abstract static class PyDictCopyNode extends PythonUnaryBuiltinNode {
273+
public abstract static class PyDictCopyNode extends PythonBinaryBuiltinNode {
277274
@Specialization(limit = "3")
278-
public Object copy(PDict dict,
275+
public Object copy(Object module, PDict dict,
279276
@CachedLibrary("dict.getDictStorage()") HashingStorageLibrary lib,
280277
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode,
281278
@Cached GetNativeNullNode getNativeNullNode) {
282279
try {
283280
return factory().createDict(lib.copy(dict.getDictStorage()));
284281
} catch (PException e) {
285282
transformExceptionToNativeNode.execute(e);
286-
return getNativeNullNode.execute(PNone.NONE);
283+
return getNativeNullNode.execute(module);
287284
}
288285
}
289286

290287
@Specialization(guards = {"!isDict(dict)", "isDictSubtype(frame, dict, getClassNode, isSubtypeNode)"})
291-
public Object copyNative(VirtualFrame frame, @SuppressWarnings("unused") Object dict,
288+
public Object copyNative(VirtualFrame frame, Object module, @SuppressWarnings("unused") Object dict,
292289
@SuppressWarnings("unused") @Cached GetClassNode getClassNode,
293290
@SuppressWarnings("unused") @Cached IsSubtypeNode isSubtypeNode,
294291
@Cached GetNativeNullNode getNativeNullNode,
295292
@Cached PRaiseNativeNode raiseNativeNode) {
296-
return raiseNativeNode.raise(frame, getNativeNullNode.execute(), PythonBuiltinClassType.NotImplementedError, NATIVE_S_SUBTYPES_NOT_IMPLEMENTED, "dict");
293+
return raiseNativeNode.raise(frame, getNativeNullNode.execute(module), PythonBuiltinClassType.NotImplementedError, NATIVE_S_SUBTYPES_NOT_IMPLEMENTED, "dict");
297294
}
298295

299296
@Specialization(guards = {"!isDict(obj)", "!isDictSubtype(frame, obj, getClassNode, isSubtypeNode)"})
300-
public Object copy(VirtualFrame frame, Object obj,
297+
public Object copy(VirtualFrame frame, Object module, Object obj,
301298
@SuppressWarnings("unused") @Cached GetClassNode getClassNode,
302299
@SuppressWarnings("unused") @Cached IsSubtypeNode isSubtypeNode,
303300
@Cached StrNode strNode,
304301
@Cached PRaiseNativeNode raiseNativeNode,
305302
@Cached GetNativeNullNode getNativeNullNode) {
306-
return raiseNativeNode.raise(frame, getNativeNullNode.execute(), SystemError, BAD_ARG_TO_INTERNAL_FUNC_WAS_S_P, strNode.executeWith(frame, obj), obj);
303+
return raiseNativeNode.raise(frame, getNativeNullNode.execute(module), SystemError, BAD_ARG_TO_INTERNAL_FUNC_WAS_S_P, strNode.executeWith(frame, obj), obj);
307304
}
308305

309306
protected boolean isDictSubtype(VirtualFrame frame, Object obj, GetClassNode getClassNode, IsSubtypeNode isSubtypeNode) {

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,10 @@
6262
import com.oracle.truffle.api.dsl.Specialization;
6363
import com.oracle.truffle.api.frame.VirtualFrame;
6464

65-
@CoreFunctions(defineModule = PythonCextFloatBuiltins.PYTHON_CEXT_FLOAT)
65+
@CoreFunctions(extendsModule = PythonCextBuiltins.PYTHON_CEXT)
6666
@GenerateNodeFactory
6767
public class PythonCextFloatBuiltins extends PythonBuiltins {
6868

69-
public static final String PYTHON_CEXT_FLOAT = "python_cext_float";
70-
7169
@Override
7270
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {
7371
return PythonCextFloatBuiltinsFactory.getFactories();

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,10 @@
9393
import com.oracle.truffle.api.frame.VirtualFrame;
9494
import com.oracle.truffle.api.profiles.BranchProfile;
9595

96-
@CoreFunctions(defineModule = PythonCextListBuiltins.PYTHON_CEXT_LIST)
96+
@CoreFunctions(extendsModule = PythonCextBuiltins.PYTHON_CEXT)
9797
@GenerateNodeFactory
9898
public class PythonCextListBuiltins extends PythonBuiltins {
9999

100-
public static final String PYTHON_CEXT_LIST = "python_cext_LIST";
101-
102100
@Override
103101
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {
104102
return PythonCextListBuiltinsFactory.getFactories();

0 commit comments

Comments
 (0)