Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Unified Diff: pkg/compiler/lib/src/inferrer/inferrer_engine.dart

Issue 2993463002: Add CallType to DynamicCallSiteTypeInformation (Closed)
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/compiler/lib/src/inferrer/inferrer_engine.dart
diff --git a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
index 23947f26b9d196a15728694f2ed1f154db0a1fdf..3ee5dd6c4c2791be361679a2e534de63ae6046a2 100644
--- a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
+++ b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
@@ -183,6 +183,7 @@ abstract class InferrerEngine {
///
/// [inLoop] tells whether the call happens in a loop.
TypeInformation registerCalledSelector(
+ CallType callType,
ast.Node node,
Selector selector,
TypeMask mask,
@@ -200,8 +201,8 @@ abstract class InferrerEngine {
ArgumentsTypes arguments, Selector selector, TypeMask mask,
{bool remove, bool addToQueue: true});
- void updateSelectorInMember(
- MemberEntity owner, ast.Node node, Selector selector, TypeMask mask);
+ void updateSelectorInMember(MemberEntity owner, CallType callType,
+ ast.Node node, Selector selector, TypeMask mask);
/// Returns the return type of [element].
TypeInformation returnTypeOfMember(MemberEntity element);
@@ -357,10 +358,38 @@ class InferrerEngineImpl extends InferrerEngine {
return returnType;
}
- void updateSelectorInMember(
- MemberEntity owner, ast.Node node, Selector selector, TypeMask mask) {
+ void updateSelectorInMember(MemberEntity owner, CallType callType,
+ ast.Node node, Selector selector, TypeMask mask) {
GlobalTypeInferenceElementData data = dataOfMember(owner);
- if (node.asSendSet() != null) {
+ switch (callType) {
+ case CallType.complex:
+ assert(node.asSendSet() != null);
+ if (selector.isSetter || selector.isIndexSet) {
+ data.setTypeMask(node, mask);
+ } else if (selector.isGetter || selector.isIndex) {
+ data.setGetterTypeMaskInComplexSendSet(node, mask);
+ } else {
+ assert(selector.isOperator);
+ data.setOperatorTypeMaskInComplexSendSet(node, mask);
+ }
+ break;
+ case CallType.access:
+ assert(node.asSend() != null);
+ data.setTypeMask(node, mask);
+ break;
+ case CallType.forIn:
+ assert(node.asForIn() != null);
+ if (selector == Selectors.iterator) {
+ data.setIteratorTypeMask(node, mask);
+ } else if (selector == Selectors.current) {
+ data.setCurrentTypeMask(node, mask);
+ } else {
+ assert(selector == Selectors.moveNext);
+ data.setMoveNextTypeMask(node, mask);
+ }
+ break;
+ }
+ /*if (node.asSendSet() != null) {
Siggi Cherem (dart-lang) 2017/07/31 19:30:29 delete old code
Johnni Winther 2017/08/01 13:09:20 Done.
if (selector.isSetter || selector.isIndexSet) {
data.setTypeMask(node, mask);
} else if (selector.isGetter || selector.isIndex) {
@@ -381,7 +410,7 @@ class InferrerEngineImpl extends InferrerEngine {
assert(selector == Selectors.moveNext);
data.setMoveNextTypeMask(node, mask);
}
- }
+ }*/
}
bool checkIfExposesThis(ConstructorEntity element) {
@@ -976,6 +1005,7 @@ class InferrerEngineImpl extends InferrerEngine {
}
TypeInformation registerCalledSelector(
+ CallType callType,
ast.Node node,
Selector selector,
TypeMask mask,
@@ -996,6 +1026,7 @@ class InferrerEngineImpl extends InferrerEngine {
CallSiteTypeInformation info = new DynamicCallSiteTypeInformation(
types.currentMember,
+ callType,
node,
caller,
selector,

Powered by Google App Engine
This is Rietveld 408576698