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

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

Issue 2993463002: Add CallType to DynamicCallSiteTypeInformation (Closed)
Patch Set: Updated cf. comments 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
« no previous file with comments | « pkg/compiler/lib/src/inferrer/builder.dart ('k') | pkg/compiler/lib/src/inferrer/type_graph_nodes.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..232f83685e9234289828b3671d7a056667becc30 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,30 +358,34 @@ 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) {
- if (selector.isSetter || selector.isIndexSet) {
+ assert(validCallType(callType, node));
+ switch (callType) {
+ case CallType.complex:
+ 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:
data.setTypeMask(node, mask);
- } else if (selector.isGetter || selector.isIndex) {
- data.setGetterTypeMaskInComplexSendSet(node, mask);
- } else {
- assert(selector.isOperator);
- data.setOperatorTypeMaskInComplexSendSet(node, mask);
- }
- } else if (node.asSend() != null) {
- data.setTypeMask(node, mask);
- } else {
- 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;
+ case CallType.forIn:
+ 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;
}
}
@@ -976,6 +981,7 @@ class InferrerEngineImpl extends InferrerEngine {
}
TypeInformation registerCalledSelector(
+ CallType callType,
ast.Node node,
Selector selector,
TypeMask mask,
@@ -996,6 +1002,7 @@ class InferrerEngineImpl extends InferrerEngine {
CallSiteTypeInformation info = new DynamicCallSiteTypeInformation(
types.currentMember,
+ callType,
node,
caller,
selector,
« no previous file with comments | « pkg/compiler/lib/src/inferrer/builder.dart ('k') | pkg/compiler/lib/src/inferrer/type_graph_nodes.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698