You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Describe the bug
A class's interface implementations are not taken into consideration for tye inference and type conversion insertion.
Example: IMyDisposable interface implements System.IDisposable interface and MyDisposable class implements IMyDisposable interface.
OldRod produces the following code:
The castclass to System.IDisposable is redundant since the parameter which is loaded before it is of type IMyDisposable which implements IDisposable.
If we look at the code before virtualization and then devirtualization we see exactly that.
Similar behavior can be seen where the aforementioned method is used:
We see another redundant cast to, this time, IMyDisposable. As before this cast is redundant as the MyDisposable class already implements that interface.
If we look at the non-processed code we see the cast is missing:
To Reproduce
Devirtualize the sample provided in the zip file below: sample2.zip
The text was updated successfully, but these errors were encountered:
only collecting base types during the construction of the type hierarchy. This "works" because every interface eventually is an object, as was mentioned in #48, so these casts aren't wrong.
Including interfaces in the type hierarchy complicates things, as the inheritance graph is no longer necessarily a tree any more. This makes looking for common base types more involved, especially if there is diverging paths in the inheritance graphs (which path to take? do we take a path or just resort to Object in those cases?).
Describe the bug
A class's interface implementations are not taken into consideration for tye inference and type conversion insertion.
Example:
IMyDisposable
interface implementsSystem.IDisposable
interface andMyDisposable
class implementsIMyDisposable
interface.OldRod produces the following code:
The
castclass
toSystem.IDisposable
is redundant since the parameter which is loaded before it is of typeIMyDisposable
which implementsIDisposable
.If we look at the code before virtualization and then devirtualization we see exactly that.
Similar behavior can be seen where the aforementioned method is used:
We see another redundant cast to, this time,
IMyDisposable
. As before this cast is redundant as theMyDisposable
class already implements that interface.If we look at the non-processed code we see the cast is missing:
To Reproduce
Devirtualize the sample provided in the zip file below:
sample2.zip
The text was updated successfully, but these errors were encountered: