38
38
import static com .oracle .graal .python .nodes .SpecialMethodNames .__OR__ ;
39
39
import static com .oracle .graal .python .nodes .SpecialMethodNames .__REDUCE__ ;
40
40
import static com .oracle .graal .python .nodes .SpecialMethodNames .__SUB__ ;
41
+ import static com .oracle .graal .python .nodes .SpecialMethodNames .__XOR__ ;
41
42
42
43
import java .util .Iterator ;
43
44
import java .util .List ;
@@ -193,19 +194,19 @@ PBaseSet doPBaseSet(VirtualFrame frame, PFrozenSet left, String right,
193
194
}
194
195
195
196
@ Specialization (limit = "1" )
196
- PBaseSet doPBaseSet (@ SuppressWarnings ( "unused" ) VirtualFrame frame , PSet left , PBaseSet right ,
197
+ PBaseSet doPBaseSet (VirtualFrame frame , PSet left , PBaseSet right ,
197
198
@ Cached ("createBinaryProfile()" ) ConditionProfile hasFrame ,
198
199
@ CachedLibrary ("left.getDictStorage()" ) HashingStorageLibrary leftLib ) {
199
- HashingStorage intersectedStorage = intersect (leftLib , left .getDictStorage (), right .getDictStorage (), frame , hasFrame );
200
- return factory ().createSet (intersectedStorage );
200
+ HashingStorage storage = intersect (leftLib , left .getDictStorage (), right .getDictStorage (), frame , hasFrame );
201
+ return factory ().createSet (storage );
201
202
}
202
203
203
204
@ Specialization (limit = "1" )
204
- PBaseSet doPBaseSet (@ SuppressWarnings ( "unused" ) VirtualFrame frame , PFrozenSet left , PBaseSet right ,
205
+ PBaseSet doPBaseSet (VirtualFrame frame , PFrozenSet left , PBaseSet right ,
205
206
@ Cached ("createBinaryProfile()" ) ConditionProfile hasFrame ,
206
207
@ CachedLibrary ("left.getDictStorage()" ) HashingStorageLibrary leftLib ) {
207
- HashingStorage intersectedStorage = intersect (leftLib , left .getDictStorage (), right .getDictStorage (), frame , hasFrame );
208
- return factory ().createFrozenSet (intersectedStorage );
208
+ HashingStorage storage = intersect (leftLib , left .getDictStorage (), right .getDictStorage (), frame , hasFrame );
209
+ return factory ().createFrozenSet (storage );
209
210
}
210
211
211
212
@ Specialization (limit = "1" )
@@ -214,8 +215,8 @@ PBaseSet doPBaseSet(VirtualFrame frame, PSet left, PDictView right,
214
215
@ Cached ("createBinaryProfile()" ) ConditionProfile hasFrame ,
215
216
@ CachedLibrary ("left.getDictStorage()" ) HashingStorageLibrary leftLib ) {
216
217
PSet rightSet = constructSetNode .executeWith (frame , right );
217
- HashingStorage intersectedStorage = intersect (leftLib , left .getDictStorage (), rightSet .getDictStorage (), frame , hasFrame );
218
- return factory ().createSet (intersectedStorage );
218
+ HashingStorage storage = intersect (leftLib , left .getDictStorage (), rightSet .getDictStorage (), frame , hasFrame );
219
+ return factory ().createSet (storage );
219
220
}
220
221
221
222
@ Specialization (limit = "1" )
@@ -224,8 +225,8 @@ PBaseSet doPBaseSet(VirtualFrame frame, PFrozenSet left, PDictView right,
224
225
@ Cached ("createBinaryProfile()" ) ConditionProfile hasFrame ,
225
226
@ CachedLibrary ("left.getDictStorage()" ) HashingStorageLibrary leftLib ) {
226
227
PSet rightSet = constructSetNode .executeWith (frame , right );
227
- HashingStorage intersectedStorage = intersect (leftLib , left .getDictStorage (), rightSet .getDictStorage (), frame , hasFrame );
228
- return factory ().createSet (intersectedStorage );
228
+ HashingStorage storage = intersect (leftLib , left .getDictStorage (), rightSet .getDictStorage (), frame , hasFrame );
229
+ return factory ().createSet (storage );
229
230
}
230
231
231
232
@ Fallback
@@ -261,33 +262,33 @@ PBaseSet doPBaseSet(VirtualFrame frame, PFrozenSet left, String right,
261
262
@ Specialization (limit = "1" )
262
263
PBaseSet doPBaseSet (@ SuppressWarnings ("unused" ) VirtualFrame frame , PSet left , PBaseSet right ,
263
264
@ CachedLibrary ("left.getDictStorage()" ) HashingStorageLibrary leftLib ) {
264
- HashingStorage intersectedStorage = union (leftLib , left .getDictStorage (), right .getDictStorage ());
265
- return factory ().createSet (intersectedStorage );
265
+ HashingStorage storage = union (leftLib , left .getDictStorage (), right .getDictStorage ());
266
+ return factory ().createSet (storage );
266
267
}
267
268
268
269
@ Specialization (limit = "1" )
269
270
PBaseSet doPBaseSet (@ SuppressWarnings ("unused" ) VirtualFrame frame , PFrozenSet left , PBaseSet right ,
270
271
@ CachedLibrary ("left.getDictStorage()" ) HashingStorageLibrary leftLib ) {
271
- HashingStorage intersectedStorage = union (leftLib , left .getDictStorage (), right .getDictStorage ());
272
- return factory ().createFrozenSet (intersectedStorage );
272
+ HashingStorage storage = union (leftLib , left .getDictStorage (), right .getDictStorage ());
273
+ return factory ().createFrozenSet (storage );
273
274
}
274
275
275
276
@ Specialization (limit = "1" )
276
277
PBaseSet doPBaseSet (VirtualFrame frame , PSet left , PDictView right ,
277
278
@ Cached ("create()" ) SetNodes .ConstructSetNode constructSetNode ,
278
279
@ CachedLibrary ("left.getDictStorage()" ) HashingStorageLibrary leftLib ) {
279
280
PSet rightSet = constructSetNode .executeWith (frame , right );
280
- HashingStorage intersectedStorage = union (leftLib , left .getDictStorage (), rightSet .getDictStorage ());
281
- return factory ().createSet (intersectedStorage );
281
+ HashingStorage storage = union (leftLib , left .getDictStorage (), rightSet .getDictStorage ());
282
+ return factory ().createSet (storage );
282
283
}
283
284
284
285
@ Specialization (limit = "1" )
285
286
PBaseSet doPBaseSet (VirtualFrame frame , PFrozenSet left , PDictView right ,
286
287
@ Cached ("create()" ) SetNodes .ConstructSetNode constructSetNode ,
287
288
@ CachedLibrary ("left.getDictStorage()" ) HashingStorageLibrary leftLib ) {
288
289
PSet rightSet = constructSetNode .executeWith (frame , right );
289
- HashingStorage intersectedStorage = union (leftLib , left .getDictStorage (), rightSet .getDictStorage ());
290
- return factory ().createSet (intersectedStorage );
290
+ HashingStorage storage = union (leftLib , left .getDictStorage (), rightSet .getDictStorage ());
291
+ return factory ().createSet (storage );
291
292
}
292
293
293
294
@ Fallback
@@ -296,6 +297,68 @@ Object doOr(Object self, Object other) {
296
297
}
297
298
}
298
299
300
+ @ Builtin (name = __XOR__ , minNumOfPositionalArgs = 2 )
301
+ @ GenerateNodeFactory
302
+ abstract static class XorNode extends PythonBinaryBuiltinNode {
303
+
304
+ protected static HashingStorage xor (HashingStorageLibrary lib , HashingStorage left , HashingStorage right ) {
305
+ return lib .xor (left , right );
306
+ }
307
+
308
+ @ Specialization (limit = "1" )
309
+ PBaseSet doPBaseSet (VirtualFrame frame , PSet left , String right ,
310
+ @ Cached ("createBinaryProfile()" ) ConditionProfile hasFrame ,
311
+ @ CachedLibrary ("left.getDictStorage()" ) HashingStorageLibrary leftLib ,
312
+ @ CachedLibrary (limit = "1" ) HashingStorageLibrary lib ) {
313
+ return factory ().createSet (xor (leftLib , left .getDictStorage (), getStringAsHashingStorage (frame , right , lib , hasFrame )));
314
+ }
315
+
316
+ @ Specialization (limit = "1" )
317
+ PBaseSet doPBaseSet (VirtualFrame frame , PFrozenSet left , String right ,
318
+ @ Cached ("createBinaryProfile()" ) ConditionProfile hasFrame ,
319
+ @ CachedLibrary ("left.getDictStorage()" ) HashingStorageLibrary leftLib ,
320
+ @ CachedLibrary (limit = "1" ) HashingStorageLibrary lib ) {
321
+ return factory ().createFrozenSet (xor (leftLib , left .getDictStorage (), getStringAsHashingStorage (frame , right , lib , hasFrame )));
322
+ }
323
+
324
+ @ Specialization (limit = "1" )
325
+ PBaseSet doPBaseSet (@ SuppressWarnings ("unused" ) VirtualFrame frame , PSet left , PBaseSet right ,
326
+ @ CachedLibrary ("left.getDictStorage()" ) HashingStorageLibrary leftLib ) {
327
+ HashingStorage storage = xor (leftLib , left .getDictStorage (), right .getDictStorage ());
328
+ return factory ().createSet (storage );
329
+ }
330
+
331
+ @ Specialization (limit = "1" )
332
+ PBaseSet doPBaseSet (@ SuppressWarnings ("unused" ) VirtualFrame frame , PFrozenSet left , PBaseSet right ,
333
+ @ CachedLibrary ("left.getDictStorage()" ) HashingStorageLibrary leftLib ) {
334
+ HashingStorage storage = xor (leftLib , left .getDictStorage (), right .getDictStorage ());
335
+ return factory ().createFrozenSet (storage );
336
+ }
337
+
338
+ @ Specialization (limit = "1" )
339
+ PBaseSet doPBaseSet (VirtualFrame frame , PSet left , PDictView right ,
340
+ @ Cached ("create()" ) SetNodes .ConstructSetNode constructSetNode ,
341
+ @ CachedLibrary ("left.getDictStorage()" ) HashingStorageLibrary leftLib ) {
342
+ PSet rightSet = constructSetNode .executeWith (frame , right );
343
+ HashingStorage storage = xor (leftLib , left .getDictStorage (), rightSet .getDictStorage ());
344
+ return factory ().createSet (storage );
345
+ }
346
+
347
+ @ Specialization (limit = "1" )
348
+ PBaseSet doPBaseSet (VirtualFrame frame , PFrozenSet left , PDictView right ,
349
+ @ Cached ("create()" ) SetNodes .ConstructSetNode constructSetNode ,
350
+ @ CachedLibrary ("left.getDictStorage()" ) HashingStorageLibrary leftLib ) {
351
+ PSet rightSet = constructSetNode .executeWith (frame , right );
352
+ HashingStorage storage = xor (leftLib , left .getDictStorage (), rightSet .getDictStorage ());
353
+ return factory ().createSet (storage );
354
+ }
355
+
356
+ @ Fallback
357
+ Object doOr (Object self , Object other ) {
358
+ throw raise (PythonErrorType .TypeError , "unsupported operand type(s) for ^: '%p' and '%p'" , self , other );
359
+ }
360
+ }
361
+
299
362
@ Builtin (name = __SUB__ , minNumOfPositionalArgs = 2 )
300
363
@ GenerateNodeFactory
301
364
abstract static class SubNode extends PythonBinaryBuiltinNode {
0 commit comments