Skip to content

Commit dc043d4

Browse files
committed
Add missing reverse operations
Fixes #369
1 parent 932183a commit dc043d4

File tree

8 files changed

+50
-61
lines changed

8 files changed

+50
-61
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/bool/BoolBuiltins.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@
2727

2828
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___AND__;
2929
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___OR__;
30+
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RAND__;
3031
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___REPR__;
32+
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___ROR__;
33+
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RXOR__;
3134
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___STR__;
3235
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___XOR__;
3336
import static com.oracle.graal.python.nodes.StringLiterals.T_FALSE;
@@ -89,6 +92,7 @@ static boolean atLeastOneIsNotBoolean(Object self, Object other) {
8992
}
9093

9194
@Builtin(name = J___AND__, minNumOfPositionalArgs = 2)
95+
@Builtin(name = J___RAND__, minNumOfPositionalArgs = 2)
9296
@TypeSystemReference(PythonArithmeticTypes.class)
9397
@GenerateNodeFactory
9498
abstract static class AndNode extends BaseBoolBinaryNode {
@@ -105,6 +109,7 @@ static Object doOther(VirtualFrame frame, Object self, Object other,
105109
}
106110

107111
@Builtin(name = J___OR__, minNumOfPositionalArgs = 2)
112+
@Builtin(name = J___ROR__, minNumOfPositionalArgs = 2)
108113
@TypeSystemReference(PythonArithmeticTypes.class)
109114
@GenerateNodeFactory
110115
abstract static class OrNode extends BaseBoolBinaryNode {
@@ -121,6 +126,7 @@ static Object doOther(VirtualFrame frame, Object self, Object other,
121126
}
122127

123128
@Builtin(name = J___XOR__, minNumOfPositionalArgs = 2)
129+
@Builtin(name = J___RXOR__, minNumOfPositionalArgs = 2)
124130
@TypeSystemReference(PythonArithmeticTypes.class)
125131
@GenerateNodeFactory
126132
abstract static class XorNode extends BaseBoolBinaryNode {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/ints/IntBuiltins.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___REPR__;
7575
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RFLOORDIV__;
7676
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RLSHIFT__;
77+
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RMOD__;
7778
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RMUL__;
7879
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___ROR__;
7980
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___ROUND__;
@@ -862,6 +863,7 @@ protected static boolean accepts(Object obj) {
862863
}
863864

864865
@Builtin(name = J___MOD__, minNumOfPositionalArgs = 2)
866+
@Builtin(name = J___RMOD__, minNumOfPositionalArgs = 2, reverseOperation = true)
865867
@TypeSystemReference(PythonArithmeticTypes.class)
866868
@GenerateNodeFactory
867869
public abstract static class ModNode extends IntBinaryBuiltinNode {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/set/BaseSetBuiltins.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___LT__;
5353
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___REDUCE__;
5454
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___REPR__;
55+
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RSUB__;
56+
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___SUB__;
5557
import static com.oracle.graal.python.nodes.StringLiterals.T_COMMA_SPACE;
5658
import static com.oracle.graal.python.nodes.StringLiterals.T_ELLIPSIS_IN_PARENS;
5759
import static com.oracle.graal.python.nodes.StringLiterals.T_EMPTY_PARENS;
@@ -71,6 +73,7 @@
7173
import com.oracle.graal.python.builtins.objects.PNotImplemented;
7274
import com.oracle.graal.python.builtins.objects.common.HashingCollectionNodes;
7375
import com.oracle.graal.python.builtins.objects.common.HashingStorage;
76+
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes;
7477
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes.HashingStorageAreDisjoint;
7578
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes.HashingStorageCompareKeys;
7679
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes.HashingStorageCopy;
@@ -271,6 +274,32 @@ static boolean contains(VirtualFrame frame, PBaseSet self, Object key,
271274
}
272275
}
273276

277+
@Builtin(name = J___SUB__, minNumOfPositionalArgs = 2)
278+
@Builtin(name = J___RSUB__, minNumOfPositionalArgs = 2, reverseOperation = true)
279+
@GenerateNodeFactory
280+
abstract static class SubNode extends PythonBinaryBuiltinNode {
281+
@Specialization
282+
static PBaseSet doPBaseSet(@SuppressWarnings("unused") VirtualFrame frame, PBaseSet left, PBaseSet right,
283+
@Bind("this") Node inliningTarget,
284+
@Cached InlinedConditionProfile leftProfile,
285+
@Cached HashingCollectionNodes.GetHashingStorageNode getHashingStorageNode,
286+
@Cached HashingStorageNodes.HashingStorageDiff diffNode,
287+
@Cached PythonObjectFactory factory) {
288+
HashingStorage storage = diffNode.execute(frame, inliningTarget, left.getDictStorage(), getHashingStorageNode.execute(frame, inliningTarget, right));
289+
if (leftProfile.profile(inliningTarget, left instanceof PFrozenSet)) {
290+
return factory.createFrozenSet(storage);
291+
} else {
292+
return factory.createSet(storage);
293+
}
294+
}
295+
296+
@Fallback
297+
@SuppressWarnings("unused")
298+
static Object doOther(Object self, Object other) {
299+
return PNotImplemented.NOT_IMPLEMENTED;
300+
}
301+
}
302+
274303
@Builtin(name = "issubset", minNumOfPositionalArgs = 2)
275304
@GenerateNodeFactory
276305
protected abstract static class BaseIsSubsetNode extends PythonBinaryBuiltinNode {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/set/FrozenSetBuiltins.java

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,7 @@
3030
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___OR__;
3131
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RAND__;
3232
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___ROR__;
33-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RSUB__;
3433
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RXOR__;
35-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___SUB__;
3634
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___XOR__;
3735

3836
import java.util.List;
@@ -260,35 +258,6 @@ static PFrozenSet doSet(@SuppressWarnings("unused") VirtualFrame frame, PFrozenS
260258
}
261259
}
262260

263-
@Builtin(name = J___SUB__, minNumOfPositionalArgs = 2)
264-
@Builtin(name = J___RSUB__, minNumOfPositionalArgs = 2, reverseOperation = true)
265-
@GenerateNodeFactory
266-
@ImportStatic(PGuards.class)
267-
abstract static class SubNode extends PythonBinaryBuiltinNode {
268-
269-
@Specialization(guards = "canDoSetBinOp(right)")
270-
static PBaseSet doPBaseSet(@SuppressWarnings("unused") VirtualFrame frame, PFrozenSet left, Object right,
271-
@Bind("this") Node inliningTarget,
272-
@Cached InlinedConditionProfile rightIsSetProfile,
273-
@Cached GetHashingStorageNode getHashingStorageNode,
274-
@Cached HashingStorageDiff diffNode,
275-
@Cached PythonObjectFactory factory) {
276-
HashingStorage rightStorage = getHashingStorageNode.execute(frame, inliningTarget, right);
277-
HashingStorage storage = diffNode.execute(frame, inliningTarget, left.getDictStorage(), rightStorage);
278-
if (rightIsSetProfile.profile(inliningTarget, right instanceof PBaseSet)) {
279-
return factory.createFrozenSet(storage);
280-
} else {
281-
return factory.createSet(storage);
282-
}
283-
}
284-
285-
@Fallback
286-
static Object doSub(Object self, Object other,
287-
@Cached PRaiseNode raiseNode) {
288-
throw raiseNode.raise(PythonErrorType.TypeError, ErrorMessages.UNSUPPORTED_OPERAND_TYPES_FOR_S_P_AND_P, "-", self, other);
289-
}
290-
}
291-
292261
@Builtin(name = "difference", minNumOfPositionalArgs = 1, takesVarArgs = true)
293262
@GenerateNodeFactory
294263
public abstract static class DifferenceNode extends PythonBuiltinNode {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/set/SetBuiltins.java

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,7 @@
3535
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___OR__;
3636
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RAND__;
3737
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___ROR__;
38-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RSUB__;
3938
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RXOR__;
40-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___SUB__;
4139
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___XOR__;
4240
import static com.oracle.graal.python.nodes.SpecialMethodNames.T___HASH__;
4341
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
@@ -638,28 +636,6 @@ static PNone doSetOther(VirtualFrame frame, PSet self, Object other,
638636
}
639637
}
640638

641-
@Builtin(name = J___SUB__, minNumOfPositionalArgs = 2)
642-
@Builtin(name = J___RSUB__, minNumOfPositionalArgs = 2, reverseOperation = true)
643-
@GenerateNodeFactory
644-
@ImportStatic(PGuards.class)
645-
abstract static class SubNode extends PythonBinaryBuiltinNode {
646-
@Specialization(guards = "canDoSetBinOp(right)")
647-
static PBaseSet doPBaseSet(VirtualFrame frame, PSet left, Object right,
648-
@Bind("this") Node inliningTarget,
649-
@Cached GetHashingStorageNode getHashingStorageNode,
650-
@Cached HashingStorageDiff diffNode,
651-
@Cached PythonObjectFactory factory) {
652-
HashingStorage storage = diffNode.execute(frame, inliningTarget, left.getDictStorage(), getHashingStorageNode.execute(frame, inliningTarget, right));
653-
return factory.createSet(storage);
654-
}
655-
656-
@SuppressWarnings("unused")
657-
@Fallback
658-
Object doSub(Object self, Object other) {
659-
return PNotImplemented.NOT_IMPLEMENTED;
660-
}
661-
}
662-
663639
@Builtin(name = J___ISUB__, minNumOfPositionalArgs = 2)
664640
@GenerateNodeFactory
665641
abstract static class ISubNode extends PythonBinaryBuiltinNode {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/str/StringBuiltins.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___MUL__;
5555
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___NE__;
5656
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___REPR__;
57+
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RMOD__;
5758
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RMUL__;
5859
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___STR__;
5960
import static com.oracle.graal.python.nodes.SpecialMethodNames.T___ADD__;
@@ -1891,6 +1892,16 @@ static Object doGeneric(VirtualFrame frame, Object self, Object right,
18911892
}
18921893
}
18931894

1895+
@Builtin(name = J___RMOD__, minNumOfPositionalArgs = 2)
1896+
@GenerateNodeFactory
1897+
abstract static class RModNode extends PythonBinaryBuiltinNode {
1898+
@SuppressWarnings("unused")
1899+
@Specialization
1900+
Object mod(Object self, Object right) {
1901+
return PNotImplemented.NOT_IMPLEMENTED;
1902+
}
1903+
}
1904+
18941905
@Builtin(name = "isascii", minNumOfPositionalArgs = 1)
18951906
@GenerateNodeFactory
18961907
abstract static class IsAsciiNode extends PythonUnaryBuiltinNode {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/tuple/TupleBuiltins.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@
8787
import com.oracle.graal.python.nodes.builtins.TupleNodes.GetNativeTupleStorage;
8888
import com.oracle.graal.python.nodes.builtins.TupleNodes.GetTupleStorage;
8989
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
90-
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
9190
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
9291
import com.oracle.graal.python.nodes.function.builtins.PythonQuaternaryClinicBuiltinNode;
9392
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
@@ -177,7 +176,7 @@ int index(VirtualFrame frame, Object self, Object value, int startIn, int endIn,
177176

178177
@Builtin(name = "count", minNumOfPositionalArgs = 2)
179178
@GenerateNodeFactory
180-
public abstract static class CountNode extends PythonBuiltinNode {
179+
public abstract static class CountNode extends PythonBinaryBuiltinNode {
181180

182181
@Specialization
183182
long count(VirtualFrame frame, Object self, Object value,
@@ -410,7 +409,7 @@ protected CmpNode createCmp() {
410409

411410
@Builtin(name = J___ADD__, minNumOfPositionalArgs = 2)
412411
@GenerateNodeFactory
413-
abstract static class AddNode extends PythonBuiltinNode {
412+
abstract static class AddNode extends PythonBinaryBuiltinNode {
414413

415414
@Specialization(guards = {"checkRight.execute(inliningTarget, right)"}, limit = "1")
416415
static PTuple doTuple(Object left, Object right,

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/SpecialMethodNames.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -207,9 +207,6 @@ public abstract class SpecialMethodNames {
207207
public static final String J___MUL__ = "__mul__";
208208
public static final TruffleString T___MUL__ = tsLiteral(J___MUL__);
209209

210-
public static final String J___DIV__ = "__div__";
211-
// public static final TruffleString T___DIV__ = tsLiteral(J___DIV__);
212-
213210
public static final String J___MATMUL__ = "__matmul__";
214211
public static final TruffleString T___MATMUL__ = tsLiteral(J___MATMUL__);
215212

0 commit comments

Comments
 (0)