Skip to content

Commit f50076c

Browse files
timfelfangerer
authored andcommitted
simplify the ForeignBinaryNode, the reverse field is final and now we can use the fallback guard
1 parent aeb0b98 commit f50076c

File tree

1 file changed

+30
-67
lines changed

1 file changed

+30
-67
lines changed

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

Lines changed: 30 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -202,89 +202,65 @@ protected static boolean isNegativeNumber(InteropLibrary lib, Object right) {
202202
return false;
203203
}
204204

205-
@Specialization(guards = {"!reverse", "lib.isBoolean(left)"})
205+
@Specialization(guards = {"lib.isBoolean(left)"})
206206
Object doComparisonBool(Object left, Object right,
207207
@CachedLibrary(limit = "3") InteropLibrary lib) {
208208
try {
209-
return op.executeObject(lib.asBoolean(left), right);
209+
if (!reverse) {
210+
return op.executeObject(lib.asBoolean(left), right);
211+
} else {
212+
return op.executeObject(right, lib.asBoolean(left));
213+
}
210214
} catch (UnsupportedMessageException e) {
211215
throw new IllegalStateException("object does not unpack as it claims to");
212216
}
213217
}
214218

215-
@Specialization(guards = {"!reverse", "lib.fitsInLong(left)"})
219+
@Specialization(guards = {"lib.fitsInLong(left)"})
216220
Object doComparisonLong(Object left, Object right,
217221
@CachedLibrary(limit = "3") InteropLibrary lib) {
218222
try {
219-
return op.executeObject(lib.asLong(left), right);
223+
if (!reverse) {
224+
return op.executeObject(lib.asLong(left), right);
225+
} else {
226+
return op.executeObject(right, lib.asLong(left));
227+
}
220228
} catch (UnsupportedMessageException e) {
221229
throw new IllegalStateException("object does not unpack as it claims to");
222230
}
223231
}
224232

225-
@Specialization(guards = {"!reverse", "lib.fitsInDouble(left)"})
233+
@Specialization(guards = {"lib.fitsInDouble(left)"})
226234
Object doComparisonDouble(Object left, Object right,
227235
@CachedLibrary(limit = "3") InteropLibrary lib) {
228236
try {
229-
return op.executeObject(lib.asDouble(left), right);
237+
if (!reverse) {
238+
return op.executeObject(lib.asDouble(left), right);
239+
} else {
240+
return op.executeObject(right, lib.asDouble(left));
241+
}
230242
} catch (UnsupportedMessageException e) {
231243
throw new IllegalStateException("object does not unpack as it claims to");
232244
}
233245
}
234246

235-
@Specialization(guards = {"!reverse", "lib.isString(left)"})
247+
@Specialization(guards = {"lib.isString(left)"})
236248
Object doComparisonString(Object left, Object right,
237249
@CachedLibrary(limit = "3") InteropLibrary lib) {
238250
try {
239-
return op.executeObject(lib.asString(left), right);
240-
} catch (UnsupportedMessageException e) {
241-
return PNotImplemented.NOT_IMPLEMENTED;
242-
}
243-
}
244-
@Specialization(guards = {"reverse", "lib.isBoolean(left)"})
245-
Object doComparisonBoolR(Object left, Object right,
246-
@CachedLibrary(limit = "3") InteropLibrary lib) {
247-
try {
248-
return op.executeObject(right, lib.asBoolean(left));
249-
} catch (UnsupportedMessageException e) {
250-
return PNotImplemented.NOT_IMPLEMENTED;
251-
}
252-
}
253-
254-
@Specialization(guards = {"reverse", "lib.fitsInLong(left)"})
255-
Object doComparisonLongR(Object left, Object right,
256-
@CachedLibrary(limit = "3") InteropLibrary lib) {
257-
try {
258-
return op.executeObject(right, lib.asLong(left));
259-
} catch (UnsupportedMessageException e) {
260-
return PNotImplemented.NOT_IMPLEMENTED;
261-
}
262-
}
263-
264-
@Specialization(guards = {"reverse", "lib.fitsInDouble(left)"})
265-
Object doComparisonDoubleR(Object left, Object right,
266-
@CachedLibrary(limit = "3") InteropLibrary lib) {
267-
try {
268-
return op.executeObject(right, lib.asDouble(left));
269-
} catch (UnsupportedMessageException e) {
270-
return PNotImplemented.NOT_IMPLEMENTED;
271-
}
272-
}
273-
274-
@Specialization(guards = {"reverse", "lib.isString(left)"})
275-
Object doComparisonStringR(Object left, Object right,
276-
@CachedLibrary(limit = "3") InteropLibrary lib) {
277-
try {
278-
return op.executeObject(right, lib.asString(left));
251+
if (!reverse) {
252+
return op.executeObject(lib.asString(left), right);
253+
} else {
254+
return op.executeObject(right, lib.asString(left));
255+
}
279256
} catch (UnsupportedMessageException e) {
280257
throw new IllegalStateException("object does not unpack as it claims to");
281258
}
282259
}
283260

284261
@SuppressWarnings("unused")
285-
@Specialization(guards = {"!lib.fitsInDouble(left)", "!lib.fitsInLong(left)", "!lib.isBoolean(left)"})
286-
public PNotImplemented doGeneric(Object left, Object right,
287-
@CachedLibrary(limit = "3") InteropLibrary lib) {
262+
@Fallback
263+
public PNotImplemented doGeneric(Object left, Object right) {
288264
return PNotImplemented.NOT_IMPLEMENTED;
289265
}
290266
}
@@ -335,11 +311,7 @@ abstract static class MulNode extends ForeignBinaryNode {
335311
super(BinaryArithmetic.Mul.create(), false);
336312
}
337313

338-
protected static boolean isPythonLikeSequence(InteropLibrary lib, Object receiver) {
339-
return lib.hasArrayElements(receiver);
340-
}
341-
342-
@Specialization(insertBefore = "doComparisonBool", guards = {"isPythonLikeSequence(lib, left)", "lib.fitsInInt(right)"})
314+
@Specialization(insertBefore = "doComparisonBool", guards = {"lib.hasArrayElements(left)", "lib.fitsInInt(right)"})
343315
static Object doForeignArray(Object left, Object right,
344316
@Cached PRaiseNode raise,
345317
@Cached PythonObjectFactory factory,
@@ -369,7 +341,7 @@ static Object doForeignArray(Object left, Object right,
369341
}
370342
}
371343

372-
@Specialization(insertBefore = "doComparisonBool", guards = {"isPythonLikeSequence(lib, left)", "lib.isBoolean(right)"})
344+
@Specialization(insertBefore = "doComparisonBool", guards = {"lib.hasArrayElements(left)", "lib.isBoolean(right)"})
373345
static Object doForeignArrayForeignBoolean(Object left, Object right,
374346
@Cached PRaiseNode raise,
375347
@Cached PythonObjectFactory factory,
@@ -378,26 +350,17 @@ static Object doForeignArrayForeignBoolean(Object left, Object right,
378350
try {
379351
return doForeignArray(left, lib.asBoolean(right) ? 1 : 0, raise, factory, convert, lib);
380352
} catch (UnsupportedMessageException e) {
381-
return PNotImplemented.NOT_IMPLEMENTED;
353+
throw new IllegalStateException("object does not unpack as it claims to");
382354
}
383355
}
384356

385357
@SuppressWarnings("unused")
386-
@Specialization(insertBefore = "doGeneric", guards = {"isPythonLikeSequence(lib, left)", "isNegativeNumber(lib, right)"})
358+
@Specialization(insertBefore = "doGeneric", guards = {"lib.hasArrayElements(left)", "isNegativeNumber(lib, right)"})
387359
static Object doForeignArrayNegativeMult(Object left, Object right,
388360
@Cached PythonObjectFactory factory,
389361
@CachedLibrary(limit = "3") InteropLibrary lib) {
390-
391362
return factory.createList();
392363
}
393-
394-
@SuppressWarnings("unused")
395-
@Specialization(insertBefore = "doGeneric", guards = {"!lib.fitsInDouble(left)", "!lib.fitsInLong(left)", "!lib.isBoolean(left)", "!isPythonLikeSequence(lib, left)"})
396-
PNotImplemented doForeignGeneric(Object left, Object right,
397-
@CachedLibrary(limit = "3") InteropLibrary lib) {
398-
return PNotImplemented.NOT_IMPLEMENTED;
399-
}
400-
401364
}
402365

403366
@Builtin(name = __RMUL__, minNumOfPositionalArgs = 2)

0 commit comments

Comments
 (0)