e4c4d0f839
Hot reload requires DDC to update how its tearoffs are represented. Tearoffs obey the following conventions: * Instance tearoffs are never identical * Tearoffs with the same object target and name have the same hash code (even if they resolve to different functions across hot reloads) * Two separate tearoffs of the same member are equal To support this, tearoff equality must not depend on the bound object and method but a composite of the bound object, torn off member name, and the exact class/object from which the member was torn off. Notable changes: * Methods' immediately bound targets are emitted with member signatures. This is required to determine the bound targets for instance and dynamic tearoffs. Bound targets are identified by `libraryUri:class` strings. * `applyMixin` passes in a 'true' bound target. This is because mixin applications' members are considered children of their 'on' class (not the mixed in class) wrt equality/hashCode. * `bind` is modified to pass in its 'true' bound object to support mixins' super getters. * `tearoff` and `staticTearoff` are modified to accept a bound target string (only required for static tearoffs, as they are bound at tearoff-creation-time). * Static tearoffs avoid using their bound object for hashcode and equality, as these libraries may be wrapped in proxy objects. * Tearoff equality and hashCode are updated to consider bound object, bound name, and its bound method's immediate target. * 'noSuchMethod' and 'toString' methods are always accessed through their extension property during signature lookups. Change-Id: Ica5501b6860c605db50aa945bafb6802a7317511 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/406723 Reviewed-by: Nate Biggs <natebiggs@google.com> Reviewed-by: Nicholas Shahan <nshahan@google.com> Commit-Queue: Mark Zhou <markzipan@google.com>