@@ -22,7 +22,6 @@ class SelectorInfo {
2222
2323 final int id;
2424 final int callCount;
25- final bool tornOff;
2625 final ParameterInfo paramInfo;
2726 int returnCount;
2827
@@ -45,8 +44,8 @@ class SelectorInfo {
4544
4645 int get sortWeight => classIds.length * 10 + callCount;
4746
48- SelectorInfo (this .translator, this .id, this .callCount, this .tornOff ,
49- this .paramInfo, this . returnCount);
47+ SelectorInfo (this .translator, this .id, this .callCount, this .paramInfo ,
48+ this .returnCount);
5049
5150 /// Compute the signature for the functions implementing members targeted by
5251 /// this selector.
@@ -222,6 +221,16 @@ class DispatchTable {
222221 .mapping;
223222
224223 SelectorInfo selectorForTarget (Reference target) {
224+ Member member = target.asMember;
225+ bool isGetter = target.isGetter || target.isTearOffReference;
226+ ProcedureAttributesMetadata metadata = procedureAttributeMetadata[member]! ;
227+ int selectorId = isGetter
228+ ? metadata.getterSelectorId
229+ : metadata.methodOrSetterSelectorId;
230+ return selectorInfo[selectorId]! ;
231+ }
232+
233+ SelectorInfo _createSelectorForTarget (Reference target) {
225234 Member member = target.asMember;
226235 bool isGetter = target.isGetter || target.isTearOffReference;
227236 bool isSetter = target.isSetter;
@@ -244,13 +253,8 @@ class DispatchTable {
244253
245254 final selector = selectorInfo.putIfAbsent (
246255 selectorId,
247- () => SelectorInfo (
248- translator,
249- selectorId,
250- selectorMetadata[selectorId].callCount,
251- selectorMetadata[selectorId].tornOff,
252- paramInfo,
253- returnCount));
256+ () => SelectorInfo (translator, selectorId,
257+ selectorMetadata[selectorId].callCount, paramInfo, returnCount));
254258 selector.paramInfo.merge (paramInfo);
255259 selector.returnCount = max (selector.returnCount, returnCount);
256260 selector.calledDynamically | = calledDynamically;
@@ -301,7 +305,7 @@ class DispatchTable {
301305 }
302306
303307 SelectorInfo addMember (Reference reference) {
304- SelectorInfo selector = selectorForTarget (reference);
308+ SelectorInfo selector = _createSelectorForTarget (reference);
305309 if (reference.asMember.isAbstract) {
306310 selector.targets[info.classId] ?? = reference;
307311 } else {
@@ -319,7 +323,7 @@ class DispatchTable {
319323 if (member.hasSetter) addMember (member.setterReference! );
320324 } else if (member is Procedure ) {
321325 SelectorInfo method = addMember (member.reference);
322- if (method.tornOff &&
326+ if (selectorMetadata[ method.id] .tornOff &&
323327 procedureAttributeMetadata[member]! .hasTearOffUses) {
324328 addMember (member.tearOffReference);
325329 }
0 commit comments