Skip to content

Commit ec956ea

Browse files
committed
[GR-23266] Few fixes for test_types
PullRequest: graalpython/1187
2 parents b050f75 + 682bc3b commit ec956ea

File tree

15 files changed

+147
-101
lines changed

15 files changed

+147
-101
lines changed

graalpython/com.oracle.graal.python.benchmarks/python/micro/instantiation.py

Lines changed: 0 additions & 58 deletions
This file was deleted.

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
*graalpython.lib-python.3.test.test_types.ClassCreationTests.test_bad___prepare__
12
*graalpython.lib-python.3.test.test_types.ClassCreationTests.test_metaclass_derivation
23
*graalpython.lib-python.3.test.test_types.ClassCreationTests.test_metaclass_override_callable
34
*graalpython.lib-python.3.test.test_types.ClassCreationTests.test_metaclass_override_function
@@ -26,8 +27,19 @@
2627
*graalpython.lib-python.3.test.test_types.MappingProxyTests.test_iterators
2728
*graalpython.lib-python.3.test.test_types.MappingProxyTests.test_len
2829
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_as_dict
30+
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_attrdel
31+
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_attrget
32+
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_attrset
33+
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_constructor
34+
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_equal
2935
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_fake_namespace_compare
36+
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_nested
37+
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_pickle
3038
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_recursive
39+
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_repr
40+
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_subclass
41+
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_unbound
42+
*graalpython.lib-python.3.test.test_types.SimpleNamespaceTests.test_underlying_dict
3143
*graalpython.lib-python.3.test.test_types.TypesTests.test_boolean_ops
3244
*graalpython.lib-python.3.test.test_types.TypesTests.test_comparisons
3345
*graalpython.lib-python.3.test.test_types.TypesTests.test_float__format__
@@ -43,3 +55,4 @@
4355
*graalpython.lib-python.3.test.test_types.TypesTests.test_strings
4456
*graalpython.lib-python.3.test.test_types.TypesTests.test_truth_values
4557
*graalpython.lib-python.3.test.test_types.TypesTests.test_type_function
58+
*graalpython.lib-python.3.test.test_types.TypesTests.test_zero_division

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,14 @@
6565
import com.oracle.graal.python.builtins.objects.method.PMethod;
6666
import com.oracle.graal.python.builtins.objects.module.PythonModule;
6767
import com.oracle.graal.python.builtins.objects.object.PythonObject;
68+
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
6869
import com.oracle.graal.python.nodes.ErrorMessages;
6970
import com.oracle.graal.python.nodes.argument.ReadIndexedArgumentNode;
7071
import com.oracle.graal.python.nodes.argument.ReadVarArgsNode;
7172
import com.oracle.graal.python.nodes.function.FunctionRootNode;
7273
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
7374
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
75+
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
7476
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
7577
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
7678
import com.oracle.graal.python.nodes.subscript.GetItemNode;
@@ -101,6 +103,7 @@
101103
import com.oracle.truffle.api.dsl.Specialization;
102104
import com.oracle.truffle.api.dsl.TypeSystemReference;
103105
import com.oracle.truffle.api.frame.VirtualFrame;
106+
import com.oracle.truffle.api.library.CachedLibrary;
104107
import com.oracle.truffle.api.nodes.LanguageInfo;
105108
import com.oracle.truffle.api.nodes.Node;
106109
import com.oracle.truffle.api.nodes.NodeUtil;
@@ -456,4 +459,15 @@ protected Object getToolPath(String tool) {
456459
return toolPath.toString();
457460
}
458461
}
462+
463+
// Equivalent of PyObject_TypeCheck
464+
@Builtin(name = "type_check", minNumOfPositionalArgs = 2)
465+
@GenerateNodeFactory
466+
public abstract static class TypeCheckNode extends PythonBinaryBuiltinNode {
467+
@Specialization(limit = "3")
468+
boolean typeCheck(Object instance, Object cls,
469+
@CachedLibrary("instance") PythonObjectLibrary lib) {
470+
return lib.typeCheck(instance, cls);
471+
}
472+
}
459473
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/PythonAbstractObject.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -822,7 +822,7 @@ public Object asIndexWithState(ThreadState state,
822822
@Shared("methodLib") @CachedLibrary(limit = "2") PythonObjectLibrary methodLib,
823823
@CachedLibrary(limit = "5") PythonObjectLibrary resultLib,
824824
@Shared("raise") @Cached PRaiseNode raise,
825-
@Exclusive @Cached IsSubtypeNode isSubtype,
825+
@Shared("isSubtypeNode") @Cached IsSubtypeNode isSubtype,
826826
@Exclusive @Cached ConditionProfile noIndex,
827827
@Exclusive @Cached ConditionProfile resultProfile) {
828828
// n.b.: the CPython shortcut "if (PyLong_Check(item)) return item;" is
@@ -863,7 +863,7 @@ public String asPathWithState(ThreadState state,
863863
public Object asPStringWithState(ThreadState state,
864864
@CachedLibrary("this") PythonObjectLibrary lib,
865865
@CachedLibrary(limit = "1") PythonObjectLibrary resultLib,
866-
@Exclusive @Cached IsSubtypeNode isSubtypeNode,
866+
@Shared("isSubtypeNode") @Cached IsSubtypeNode isSubtypeNode,
867867
@Shared("raise") @Cached PRaiseNode raise) {
868868
return asPString(lib, this, state, isSubtypeNode, resultLib, raise);
869869
}
@@ -1160,6 +1160,15 @@ public long asJavaLongWithState(ThreadState state,
11601160
}
11611161
}
11621162

1163+
@ExportMessage
1164+
public boolean typeCheck(Object type,
1165+
@CachedLibrary("this") PythonObjectLibrary lib,
1166+
@Cached TypeNodes.IsSameTypeNode isSameTypeNode,
1167+
@Shared("isSubtypeNode") @Cached IsSubtypeNode isSubtypeNode) {
1168+
Object instanceClass = lib.getLazyPythonClass(this);
1169+
return isSameTypeNode.execute(instanceClass, type) || isSubtypeNode.execute(instanceClass, type);
1170+
}
1171+
11631172
@ExportMessage
11641173
public final boolean isContextManager(@CachedLibrary("this") PythonObjectLibrary lib,
11651174
@Exclusive @Cached ConditionProfile profile) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/floats/FloatBuiltins.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -855,26 +855,31 @@ public static double op(double left, double right) {
855855
abstract static class DivNode extends FloatBinaryBuiltinNode {
856856
@Specialization
857857
double doDD(double left, double right) {
858+
raiseDivisionByZero(right == 0.0);
858859
return left / right;
859860
}
860861

861862
@Specialization
862863
double doDL(double left, long right) {
864+
raiseDivisionByZero(right == 0);
863865
return left / right;
864866
}
865867

866868
@Specialization
867869
double doDPi(double left, PInt right) {
870+
raiseDivisionByZero(right.isZero());
868871
return left / right.doubleValueWithOverflow(getRaiseNode());
869872
}
870873

871874
@Specialization
872875
double div(long left, double right) {
876+
raiseDivisionByZero(right == 0.0);
873877
return left / right;
874878
}
875879

876880
@Specialization
877881
double div(PInt left, double right) {
882+
raiseDivisionByZero(right == 0.0);
878883
return left.doubleValueWithOverflow(getRaiseNode()) / right;
879884
}
880885

@@ -883,6 +888,7 @@ Object doDP(VirtualFrame frame, long left, PythonNativeObject right,
883888
@Cached FromNativeSubclassNode getFloat) {
884889
Double rPrimitive = getFloat.execute(frame, right);
885890
if (rPrimitive != null) {
891+
raiseDivisionByZero(rPrimitive == 0.0);
886892
return left / rPrimitive;
887893
} else {
888894
return PNotImplemented.NOT_IMPLEMENTED;

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/object/DefaultPythonBooleanExports.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@
4747
import com.oracle.graal.python.builtins.objects.function.PArguments;
4848
import com.oracle.graal.python.builtins.objects.function.PArguments.ThreadState;
4949
import com.oracle.graal.python.builtins.objects.ints.PInt;
50+
import com.oracle.graal.python.builtins.objects.type.TypeNodes;
51+
import com.oracle.graal.python.nodes.classes.IsSubtypeNode;
5052
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
5153
import com.oracle.graal.python.runtime.PythonContext;
5254
import com.oracle.graal.python.runtime.PythonOptions;
@@ -286,7 +288,7 @@ static int asPInt(Boolean receiver) {
286288
}
287289

288290
@ExportMessage
289-
public static Object lookupAttributeInternal(Boolean receiver, ThreadState state, String name, boolean strict,
291+
static Object lookupAttributeInternal(Boolean receiver, ThreadState state, String name, boolean strict,
290292
@Cached ConditionProfile gotState,
291293
@Exclusive @Cached PythonAbstractObject.LookupAttributeNode lookup) {
292294
VirtualFrame frame = null;
@@ -297,24 +299,32 @@ public static Object lookupAttributeInternal(Boolean receiver, ThreadState state
297299
}
298300

299301
@ExportMessage
300-
public static Object lookupAttributeOnTypeInternal(@SuppressWarnings("unused") Boolean receiver, String name, boolean strict,
302+
static Object lookupAttributeOnTypeInternal(@SuppressWarnings("unused") Boolean receiver, String name, boolean strict,
301303
@Exclusive @Cached PythonAbstractObject.LookupAttributeOnTypeNode lookup) {
302304
return lookup.execute(PythonBuiltinClassType.Boolean, name, strict);
303305
}
304306

305307
@ExportMessage
306-
public static Object lookupAndCallSpecialMethodWithState(Boolean receiver, ThreadState state, String methodName, Object[] arguments,
308+
static Object lookupAndCallSpecialMethodWithState(Boolean receiver, ThreadState state, String methodName, Object[] arguments,
307309
@CachedLibrary("receiver") PythonObjectLibrary plib,
308310
@Shared("methodLib") @CachedLibrary(limit = "2") PythonObjectLibrary methodLib) {
309311
Object method = plib.lookupAttributeOnTypeStrict(receiver, methodName);
310312
return methodLib.callUnboundMethodWithState(method, state, receiver, arguments);
311313
}
312314

313315
@ExportMessage
314-
public static Object lookupAndCallRegularMethodWithState(Boolean receiver, ThreadState state, String methodName, Object[] arguments,
316+
static Object lookupAndCallRegularMethodWithState(Boolean receiver, ThreadState state, String methodName, Object[] arguments,
315317
@CachedLibrary("receiver") PythonObjectLibrary plib,
316318
@Shared("methodLib") @CachedLibrary(limit = "2") PythonObjectLibrary methodLib) {
317319
Object method = plib.lookupAttributeStrictWithState(receiver, state, methodName);
318320
return methodLib.callObjectWithState(method, state, arguments);
319321
}
322+
323+
@ExportMessage
324+
static boolean typeCheck(@SuppressWarnings("unused") Boolean receiver, Object type,
325+
@Cached TypeNodes.IsSameTypeNode isSameTypeNode,
326+
@Cached IsSubtypeNode isSubtypeNode) {
327+
Object instanceClass = PythonBuiltinClassType.Boolean;
328+
return isSameTypeNode.execute(instanceClass, type) || isSubtypeNode.execute(instanceClass, type);
329+
}
320330
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/object/DefaultPythonDoubleExports.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import com.oracle.graal.python.builtins.objects.function.PArguments;
5151
import com.oracle.graal.python.builtins.objects.function.PArguments.ThreadState;
5252
import com.oracle.graal.python.builtins.objects.ints.PInt;
53+
import com.oracle.graal.python.builtins.objects.type.TypeNodes;
5354
import com.oracle.graal.python.nodes.ErrorMessages;
5455
import com.oracle.graal.python.nodes.PRaiseNode;
5556
import com.oracle.graal.python.nodes.classes.IsSubtypeNode;
@@ -195,7 +196,7 @@ static int dO(Double receiver, Object other, @SuppressWarnings("unused") ThreadS
195196
static Object asPString(Double receiver,
196197
@CachedLibrary("receiver") PythonObjectLibrary lib,
197198
@CachedLibrary(limit = "1") PythonObjectLibrary resultLib,
198-
@Exclusive @Cached IsSubtypeNode isSubtypeNode,
199+
@Shared("isSubtypeNode") @Cached IsSubtypeNode isSubtypeNode,
199200
@Exclusive @Cached PRaiseNode raise) {
200201
return PythonAbstractObject.asPString(lib, receiver, null, isSubtypeNode, resultLib, raise);
201202
}
@@ -234,7 +235,7 @@ static int asPInt(Double receiver,
234235
}
235236

236237
@ExportMessage
237-
public static Object lookupAttributeInternal(Double receiver, ThreadState state, String name, boolean strict,
238+
static Object lookupAttributeInternal(Double receiver, ThreadState state, String name, boolean strict,
238239
@Cached ConditionProfile gotState,
239240
@Exclusive @Cached PythonAbstractObject.LookupAttributeNode lookup) {
240241
VirtualFrame frame = null;
@@ -245,24 +246,32 @@ public static Object lookupAttributeInternal(Double receiver, ThreadState state,
245246
}
246247

247248
@ExportMessage
248-
public static Object lookupAttributeOnTypeInternal(@SuppressWarnings("unused") Double receiver, String name, boolean strict,
249+
static Object lookupAttributeOnTypeInternal(@SuppressWarnings("unused") Double receiver, String name, boolean strict,
249250
@Exclusive @Cached PythonAbstractObject.LookupAttributeOnTypeNode lookup) {
250251
return lookup.execute(PythonBuiltinClassType.PFloat, name, strict);
251252
}
252253

253254
@ExportMessage
254-
public static Object lookupAndCallSpecialMethodWithState(Double receiver, ThreadState state, String methodName, Object[] arguments,
255+
static Object lookupAndCallSpecialMethodWithState(Double receiver, ThreadState state, String methodName, Object[] arguments,
255256
@CachedLibrary("receiver") PythonObjectLibrary plib,
256257
@Shared("methodLib") @CachedLibrary(limit = "2") PythonObjectLibrary methodLib) {
257258
Object method = plib.lookupAttributeOnTypeStrict(receiver, methodName);
258259
return methodLib.callUnboundMethodWithState(method, state, receiver, arguments);
259260
}
260261

261262
@ExportMessage
262-
public static Object lookupAndCallRegularMethodWithState(Double receiver, ThreadState state, String methodName, Object[] arguments,
263+
static Object lookupAndCallRegularMethodWithState(Double receiver, ThreadState state, String methodName, Object[] arguments,
263264
@CachedLibrary("receiver") PythonObjectLibrary plib,
264265
@Shared("methodLib") @CachedLibrary(limit = "2") PythonObjectLibrary methodLib) {
265266
Object method = plib.lookupAttributeStrictWithState(receiver, state, methodName);
266267
return methodLib.callObjectWithState(method, state, arguments);
267268
}
269+
270+
@ExportMessage
271+
static boolean typeCheck(@SuppressWarnings("unused") Double receiver, Object type,
272+
@Cached TypeNodes.IsSameTypeNode isSameTypeNode,
273+
@Shared("isSubtypeNode") @Cached IsSubtypeNode isSubtypeNode) {
274+
Object instanceClass = PythonBuiltinClassType.PFloat;
275+
return isSameTypeNode.execute(instanceClass, type) || isSubtypeNode.execute(instanceClass, type);
276+
}
268277
}

0 commit comments

Comments
 (0)