Skip to content

Commit 8146039

Browse files
committed
Remove *naryArithmetic classes
1 parent 56b614a commit 8146039

File tree

8 files changed

+55
-327
lines changed

8 files changed

+55
-327
lines changed

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import com.oracle.graal.python.lib.PyLongFromDoubleNode;
5757
import com.oracle.graal.python.lib.PyNumberAsSizeNode;
5858
import com.oracle.graal.python.lib.PyNumberIndexNode;
59+
import com.oracle.graal.python.lib.PyNumberMultiplyNode;
5960
import com.oracle.graal.python.lib.PyObjectGetIter;
6061
import com.oracle.graal.python.nodes.ErrorMessages;
6162
import com.oracle.graal.python.nodes.PGuards;
@@ -65,9 +66,7 @@
6566
import com.oracle.graal.python.nodes.call.special.LookupAndCallUnaryNode;
6667
import com.oracle.graal.python.nodes.call.special.LookupSpecialMethodNode;
6768
import com.oracle.graal.python.nodes.classes.IsSubtypeNode;
68-
import com.oracle.graal.python.nodes.expression.BinaryArithmetic;
6969
import com.oracle.graal.python.nodes.expression.BinaryComparisonNode;
70-
import com.oracle.graal.python.nodes.expression.BinaryOpNode;
7170
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
7271
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
7372
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
@@ -2469,14 +2468,14 @@ private static void raiseIfNegative(Node inliningTarget, boolean condition, PRai
24692468
public abstract static class ProdNode extends PythonBuiltinNode {
24702469

24712470
@Child private LookupAndCallUnaryNode callNextNode = LookupAndCallUnaryNode.create(SpecialMethodSlot.Next);
2472-
@Child private BinaryOpNode mul = BinaryArithmetic.Mul.create();
24732471

24742472
@Specialization
24752473
public Object doGeneric(VirtualFrame frame, Object iterable, Object startIn,
24762474
@Bind("this") Node inliningTarget,
24772475
@Cached IsBuiltinObjectProfile errorProfile,
24782476
@Cached InlinedConditionProfile startIsNoValueProfile,
2479-
@Cached PyObjectGetIter getIter) {
2477+
@Cached PyObjectGetIter getIter,
2478+
@Cached PyNumberMultiplyNode multiplyNode) {
24802479
Object start = startIsNoValueProfile.profile(inliningTarget, PGuards.isNoValue(startIn)) ? 1 : startIn;
24812480
Object iterator = getIter.execute(frame, inliningTarget, iterable);
24822481
Object value = start;
@@ -2488,7 +2487,7 @@ public Object doGeneric(VirtualFrame frame, Object iterable, Object startIn,
24882487
e.expectStopIteration(inliningTarget, errorProfile);
24892488
return value;
24902489
}
2491-
value = mul.execute(frame, value, nextValue);
2490+
value = multiplyNode.execute(frame, inliningTarget, value, nextValue);
24922491
}
24932492
}
24942493
}

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
import com.oracle.graal.python.lib.PyLongAsLongAndOverflowNode;
8989
import com.oracle.graal.python.lib.PyLongAsLongNode;
9090
import com.oracle.graal.python.lib.PyLongCheckNode;
91+
import com.oracle.graal.python.lib.PyNumberDivmodNode;
9192
import com.oracle.graal.python.lib.PyNumberIndexNode;
9293
import com.oracle.graal.python.lib.PyOSFSPathNode;
9394
import com.oracle.graal.python.lib.PyObjectAsFileDescriptor;
@@ -98,8 +99,6 @@
9899
import com.oracle.graal.python.nodes.PGuards;
99100
import com.oracle.graal.python.nodes.PRaiseNode;
100101
import com.oracle.graal.python.nodes.call.special.LookupAndCallUnaryNode;
101-
import com.oracle.graal.python.nodes.expression.BinaryArithmetic;
102-
import com.oracle.graal.python.nodes.expression.BinaryOpNode;
103102
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
104103
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
105104
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryClinicBuiltinNode;
@@ -3300,7 +3299,7 @@ static void doGeneric(VirtualFrame frame, Node inliningTarget, Object value, lon
33003299
*/
33013300
@GenerateInline
33023301
@GenerateCached(false)
3303-
@ImportStatic({BinaryArithmetic.class, PGuards.class})
3302+
@ImportStatic(PGuards.class)
33043303
abstract static class SplitLongToSAndNsNode extends ConvertToTimespecBaseNode {
33053304

33063305
private static final long BILLION = 1000000000;
@@ -3318,12 +3317,12 @@ static void doLong(long value, long[] timespec, int offset) {
33183317

33193318
@Specialization(guards = {"!isInteger(value)"})
33203319
static void doGeneric(VirtualFrame frame, Node inliningTarget, Object value, long[] timespec, int offset,
3321-
@Cached(value = "DivMod.create()", inline = false) BinaryOpNode callDivmod,
3320+
@Cached PyNumberDivmodNode divmodNode,
33223321
@Cached LenNode lenNode,
33233322
@Cached(value = "createNotNormalized()", inline = false) GetItemNode getItemNode,
33243323
@Cached PyLongAsLongNode asLongNode,
33253324
@Cached PRaiseNode raiseNode) {
3326-
Object divmod = callDivmod.execute(frame, value, BILLION);
3325+
Object divmod = divmodNode.execute(frame, inliningTarget, value, BILLION);
33273326
if (!PGuards.isPTuple(divmod) || lenNode.execute(inliningTarget, (PSequence) divmod) != 2) {
33283327
throw raiseNode.raise(inliningTarget, TypeError, ErrorMessages.MUST_RETURN_2TUPLE, value, divmod);
33293328
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/foreign/ForeignNumberBuiltins.java

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,10 @@
6565
import com.oracle.graal.python.lib.PyNumberAddNode;
6666
import com.oracle.graal.python.lib.PyNumberAndNode;
6767
import com.oracle.graal.python.lib.PyNumberDivmodNode;
68+
import com.oracle.graal.python.lib.PyNumberFloatNode;
6869
import com.oracle.graal.python.lib.PyNumberFloorDivideNode;
6970
import com.oracle.graal.python.lib.PyNumberInvertNode;
71+
import com.oracle.graal.python.lib.PyNumberLongNode;
7072
import com.oracle.graal.python.lib.PyNumberLshiftNode;
7173
import com.oracle.graal.python.lib.PyNumberMultiplyNode;
7274
import com.oracle.graal.python.lib.PyNumberNegativeNode;
@@ -83,9 +85,8 @@
8385
import com.oracle.graal.python.nodes.PRaiseNode;
8486
import com.oracle.graal.python.nodes.SpecialMethodNames;
8587
import com.oracle.graal.python.nodes.call.special.LookupAndCallBinaryNode;
86-
import com.oracle.graal.python.nodes.expression.BinaryArithmetic;
88+
import com.oracle.graal.python.nodes.call.special.LookupAndCallUnaryNode;
8789
import com.oracle.graal.python.nodes.expression.BinaryOpNode;
88-
import com.oracle.graal.python.nodes.expression.UnaryArithmetic;
8990
import com.oracle.graal.python.nodes.expression.UnaryOpNode;
9091
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
9192
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
@@ -268,11 +269,8 @@ Object doGeneric(VirtualFrame frame, Object value,
268269
@Bind("this") Node inliningTarget,
269270
@Cached UnboxNode unboxNode) {
270271
Object unboxed = unboxNode.execute(inliningTarget, value);
271-
if (unboxed != null) {
272-
return op.execute(frame, unboxed);
273-
} else {
274-
return PNotImplemented.NOT_IMPLEMENTED;
275-
}
272+
assert unboxed != null;
273+
return op.execute(frame, unboxed);
276274
}
277275
}
278276

@@ -393,39 +391,49 @@ abstract static class AbsNode extends ForeignUnaryNode {
393391
@GenerateNodeFactory
394392
abstract static class CeilNode extends ForeignUnaryNode {
395393
CeilNode() {
396-
super(UnaryArithmetic.GenericUnaryArithmeticNode.create(SpecialMethodNames.T___CEIL__));
394+
super(LookupAndCallUnaryNode.create(SpecialMethodNames.T___CEIL__));
397395
}
398396
}
399397

400398
@Builtin(name = J___FLOOR__, minNumOfPositionalArgs = 1)
401399
@GenerateNodeFactory
402400
abstract static class FloorNode extends ForeignUnaryNode {
403401
FloorNode() {
404-
super(UnaryArithmetic.GenericUnaryArithmeticNode.create(SpecialMethodNames.T___FLOOR__));
402+
super(LookupAndCallUnaryNode.create(SpecialMethodNames.T___FLOOR__));
405403
}
406404
}
407405

408406
@Builtin(name = J___TRUNC__, minNumOfPositionalArgs = 1)
409407
@GenerateNodeFactory
410408
abstract static class TruncNode extends ForeignUnaryNode {
411409
TruncNode() {
412-
super(UnaryArithmetic.GenericUnaryArithmeticNode.create(SpecialMethodNames.T___TRUNC__));
410+
super(LookupAndCallUnaryNode.create(SpecialMethodNames.T___TRUNC__));
413411
}
414412
}
415413

416414
@Slot(value = SlotKind.nb_int, isComplex = true)
417415
@GenerateNodeFactory
418-
abstract static class IntNode extends ForeignUnaryNode {
419-
IntNode() {
420-
super(UnaryArithmetic.GenericUnaryArithmeticNode.create(SpecialMethodNames.T___INT__));
416+
abstract static class IntNode extends PythonUnaryBuiltinNode {
417+
@Specialization
418+
Object doGeneric(VirtualFrame frame, Object self,
419+
@Bind("this") Node inliningTarget,
420+
@Cached UnboxNode unboxNode,
421+
@Cached PyNumberLongNode longNode) {
422+
Object unboxed = unboxNode.execute(inliningTarget, self);
423+
return longNode.execute(frame, inliningTarget, unboxed);
421424
}
422425
}
423426

424427
@Slot(value = SlotKind.nb_float, isComplex = true)
425428
@GenerateNodeFactory
426-
abstract static class FloatNode extends ForeignUnaryNode {
427-
FloatNode() {
428-
super(UnaryArithmetic.GenericUnaryArithmeticNode.create(SpecialMethodNames.T___FLOAT__));
429+
abstract static class FloatNode extends PythonUnaryBuiltinNode {
430+
@Specialization
431+
Object doGeneric(VirtualFrame frame, Object self,
432+
@Bind("this") Node inliningTarget,
433+
@Cached UnboxNode unboxNode,
434+
@Cached PyNumberFloatNode floatNode) {
435+
Object unboxed = unboxNode.execute(inliningTarget, self);
436+
return floatNode.execute(frame, inliningTarget, unboxed);
429437
}
430438
}
431439

@@ -598,9 +606,15 @@ static Object doIt(VirtualFrame frame, Object v, Object w, Object z,
598606

599607
@Builtin(name = J___ROUND__, minNumOfPositionalArgs = 1, maxNumOfPositionalArgs = 2)
600608
@GenerateNodeFactory
601-
abstract static class RoundNode extends ForeignBinaryNode {
602-
RoundNode() {
603-
super(BinaryArithmetic.GenericBinaryArithmeticNode.create(SpecialMethodSlot.Round), false);
609+
abstract static class RoundNode extends PythonBinaryBuiltinNode {
610+
611+
@Specialization
612+
Object doGeneric(VirtualFrame frame, Object self, Object n,
613+
@Bind("this") Node inliningTarget,
614+
@Cached UnboxNode unboxNode,
615+
@Cached("create(Round)") LookupAndCallBinaryNode callRound) {
616+
Object unboxed = unboxNode.execute(inliningTarget, self);
617+
return callRound.executeObject(frame, unboxed, n);
604618
}
605619
}
606620

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/mappingproxy/MappingproxyBuiltins.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotBinaryFunc.MpSubscriptBuiltinNode;
6262
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotBinaryOp.BinaryOpBuiltinNode;
6363
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotLen.LenBuiltinNode;
64+
import com.oracle.graal.python.lib.PyNumberOrNode;
6465
import com.oracle.graal.python.lib.PyObjectCallMethodObjArgs;
6566
import com.oracle.graal.python.lib.PyObjectGetItem;
6667
import com.oracle.graal.python.lib.PyObjectGetIter;
@@ -70,8 +71,6 @@
7071
import com.oracle.graal.python.lib.PyObjectStrAsObjectNode;
7172
import com.oracle.graal.python.nodes.ErrorMessages;
7273
import com.oracle.graal.python.nodes.PRaiseNode;
73-
import com.oracle.graal.python.nodes.expression.BinaryArithmetic;
74-
import com.oracle.graal.python.nodes.expression.BinaryOpNode;
7574
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
7675
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
7776
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
@@ -267,10 +266,10 @@ static Object classGetItem(Object cls, Object key,
267266
@Slot(value = SlotKind.nb_or, isComplex = true)
268267
@GenerateNodeFactory
269268
abstract static class OrNode extends BinaryOpBuiltinNode {
270-
@Child BinaryOpNode orNode = BinaryArithmetic.Or.create();
271269

272270
@Specialization
273-
Object or(VirtualFrame frame, Object self, Object other) {
271+
static Object or(VirtualFrame frame, Object self, Object other,
272+
@Cached PyNumberOrNode orNode) {
274273
if (self instanceof PMappingproxy) {
275274
self = ((PMappingproxy) self).getMapping();
276275
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/types/UnionTypeBuiltins.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,13 @@
7373
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotBinaryFunc.MpSubscriptBuiltinNode;
7474
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotBinaryOp.BinaryOpBuiltinNode;
7575
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotGetAttr.GetAttrBuiltinNode;
76+
import com.oracle.graal.python.lib.PyNumberOrNode;
7677
import com.oracle.graal.python.lib.PyObjectGetAttr;
7778
import com.oracle.graal.python.lib.PyObjectHashNode;
7879
import com.oracle.graal.python.lib.PyObjectRichCompareBool;
7980
import com.oracle.graal.python.nodes.ErrorMessages;
8081
import com.oracle.graal.python.nodes.PRaiseNode;
8182
import com.oracle.graal.python.nodes.StringLiterals;
82-
import com.oracle.graal.python.nodes.expression.BinaryArithmetic;
83-
import com.oracle.graal.python.nodes.expression.BinaryOpNode;
8483
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
8584
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
8685
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
@@ -289,12 +288,12 @@ Object eq(Object self, Object other) {
289288
@Slot(value = SlotKind.mp_subscript, isComplex = true)
290289
@GenerateNodeFactory
291290
abstract static class GetItemNode extends MpSubscriptBuiltinNode {
292-
@Child BinaryOpNode orNode = BinaryArithmetic.Or.create();
293291

294292
@Specialization
295293
Object getitem(VirtualFrame frame, PUnionType self, Object item,
296294
@Bind("this") Node inliningTarget,
297-
@Cached InlinedBranchProfile createProfile) {
295+
@Cached InlinedBranchProfile createProfile,
296+
@Cached PyNumberOrNode orNode) {
298297
if (self.getParameters() == null) {
299298
createProfile.enter(inliningTarget);
300299
self.setParameters(PFactory.createTuple(PythonLanguage.get(inliningTarget), GenericTypeNodes.makeParameters(self.getArgs())));

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/call/special/LookupAndCallUnaryNode.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2018, 2025, 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
@@ -47,6 +47,7 @@
4747
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
4848
import com.oracle.graal.python.nodes.PNodeWithContext;
4949
import com.oracle.graal.python.nodes.attributes.LookupAttributeInMRONode;
50+
import com.oracle.graal.python.nodes.expression.UnaryOpNode;
5051
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
5152
import com.oracle.graal.python.nodes.object.GetClassNode;
5253
import com.oracle.graal.python.runtime.PythonOptions;
@@ -66,7 +67,7 @@
6667
import com.oracle.truffle.api.strings.TruffleString;
6768

6869
@ImportStatic(PythonOptions.class)
69-
public abstract class LookupAndCallUnaryNode extends Node {
70+
public abstract class LookupAndCallUnaryNode extends UnaryOpNode {
7071

7172
public abstract static class NoAttributeHandler extends PNodeWithContext {
7273
public abstract Object execute(Object receiver);
@@ -79,6 +80,11 @@ public abstract static class NoAttributeHandler extends PNodeWithContext {
7980

8081
public abstract Object executeObject(VirtualFrame frame, Object receiver);
8182

83+
@Override
84+
public Object execute(VirtualFrame frame, Object receiver) {
85+
return executeObject(frame, receiver);
86+
}
87+
8288
@NeverDefault
8389
public static LookupAndCallUnaryNode create(TruffleString name) {
8490
return LookupAndCallUnaryNodeGen.create(name, null);

0 commit comments

Comments
 (0)