Index: pkg/compiler/lib/src/types/types.dart |
diff --git a/pkg/compiler/lib/src/types/types.dart b/pkg/compiler/lib/src/types/types.dart |
index 3aabff0cd02d1af1e26c6cebebc1a4fd2095d12f..97d357f18860aea478e33ee1ba901382408befe4 100644 |
--- a/pkg/compiler/lib/src/types/types.dart |
+++ b/pkg/compiler/lib/src/types/types.dart |
@@ -33,10 +33,6 @@ abstract class GlobalTypeInferenceElementResult { |
/// Whether the method element associated with this result always throws. |
bool get throwsAlways; |
- /// Whether the element associated with this result is only called once in one |
- /// location in the entire program. |
- bool get isCalledOnce; |
- |
/// The inferred type when this result belongs to a parameter or field |
/// element, null otherwise. |
TypeMask get type; |
@@ -71,6 +67,13 @@ abstract class GlobalTypeInferenceElementResult { |
TypeMask typeOfIteratorCurrent(ForIn node); |
} |
+abstract class GlobalTypeInferenceMemberResult |
+ extends GlobalTypeInferenceElementResult { |
+ /// Whether the member associated with this result is only called once in one |
+ /// location in the entire program. |
+ bool get isCalledOnce; |
+} |
+ |
abstract class GlobalTypeInferenceElementResultImpl |
implements GlobalTypeInferenceElementResult { |
// TODO(sigmund): delete, store data directly here. |
@@ -108,9 +111,10 @@ abstract class GlobalTypeInferenceElementResultImpl |
_data?.typeOfIteratorCurrent(node); |
} |
-class GlobalTypeInferenceMemberResult |
- extends GlobalTypeInferenceElementResultImpl { |
- GlobalTypeInferenceMemberResult( |
+class GlobalTypeInferenceMemberResultImpl |
+ extends GlobalTypeInferenceElementResultImpl |
+ implements GlobalTypeInferenceMemberResult { |
+ GlobalTypeInferenceMemberResultImpl( |
MemberElement owner, |
GlobalTypeInferenceElementData data, |
TypesInferrer inferrer, |
@@ -133,8 +137,6 @@ class GlobalTypeInferenceParameterResult |
ParameterElement owner, TypesInferrer inferrer, TypeMask _dynamic) |
: super.internal(owner, null, inferrer, false, _dynamic); |
- bool get isCalledOnce => _inferrer.isParameterCalledOnce(_owner); |
- |
TypeMask get returnType => |
_isJsInterop ? _dynamic : _inferrer.getReturnTypeOfParameter(_owner); |
@@ -205,7 +207,6 @@ abstract class TypesInferrer { |
TypeMask getTypeOfSelector(Selector selector, TypeMask mask); |
void clear(); |
bool isMemberCalledOnce(MemberElement element); |
- bool isParameterCalledOnce(ParameterElement element); |
bool isFixedArrayCheckedForGrowable(Node node); |
} |
@@ -227,7 +228,7 @@ class GlobalTypeInferenceResults { |
// TODO(sigmund,johnniwinther): compute result objects eagerly and make it an |
// error to query for results that don't exist. |
- GlobalTypeInferenceElementResult resultOfMember(MemberElement member) { |
+ GlobalTypeInferenceMemberResult resultOfMember(MemberElement member) { |
assert( |
!member.isGenerativeConstructorBody, |
failedAt( |
@@ -238,7 +239,7 @@ class GlobalTypeInferenceResults { |
bool isJsInterop = closedWorld.nativeData.isJsInteropMember(member); |
return _memberResults.putIfAbsent( |
member, |
- () => new GlobalTypeInferenceMemberResult( |
+ () => new GlobalTypeInferenceMemberResultImpl( |
member, |
// We store data in the context of the enclosing method, even |
// for closure elements. |