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

Unified Diff: pkg/compiler/lib/src/inferrer/builder.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 | « no previous file | pkg/compiler/lib/src/inferrer/inferrer_engine.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/inferrer/builder.dart
diff --git a/pkg/compiler/lib/src/inferrer/builder.dart b/pkg/compiler/lib/src/inferrer/builder.dart
index cca3291440d75f27724fb4d1896e1c39362300b3..7d3685d7b8d51a28e2ecbed9a50f6a950b8f4c55 100644
--- a/pkg/compiler/lib/src/inferrer/builder.dart
+++ b/pkg/compiler/lib/src/inferrer/builder.dart
@@ -1324,8 +1324,8 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation>
} else if (Elements.isUnresolved(element) ||
element.isSetter ||
element.isField) {
- getterType = handleDynamicSend(
- node, getterSelector, getterMask, receiverType, null);
+ getterType = handleDynamicSend(CallType.complex, node, getterSelector,
+ getterMask, receiverType, null);
} else if (element.isLocal) {
LocalElement local = element;
getterType = locals.use(local);
@@ -1339,8 +1339,8 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation>
} else {
Selector operatorSelector =
elements.getOperatorSelectorInComplexSendSet(node);
- newType = handleDynamicSend(node, operatorSelector, operatorMask,
- getterType, new ArgumentsTypes([rhsType], null));
+ newType = handleDynamicSend(CallType.complex, node, operatorSelector,
+ operatorMask, getterType, new ArgumentsTypes([rhsType], null));
}
if (Elements.isStaticOrTopLevelField(element)) {
@@ -1349,8 +1349,8 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation>
} else if (Elements.isUnresolved(element) ||
element.isSetter ||
element.isField) {
- handleDynamicSend(node, setterSelector, setterMask, receiverType,
- new ArgumentsTypes([newType], null));
+ handleDynamicSend(CallType.complex, node, setterSelector, setterMask,
+ receiverType, new ArgumentsTypes([newType], null));
} else if (element.isLocal) {
locals.update(element, newType, node);
}
@@ -1374,18 +1374,23 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation>
Selector setterSelector = elements.getSelector(node);
TypeMask setterMask = memberData.typeOfSend(node);
- TypeInformation getterType = handleDynamicSend(node, getterSelector,
- getterMask, receiverType, new ArgumentsTypes([indexType], null));
+ TypeInformation getterType = handleDynamicSend(
+ CallType.complex,
+ node,
+ getterSelector,
+ getterMask,
+ receiverType,
+ new ArgumentsTypes([indexType], null));
TypeInformation returnType;
if (node.isIfNullAssignment) {
returnType = types.allocateDiamondPhi(getterType, rhsType);
} else {
- returnType = handleDynamicSend(node, operatorSelector, operatorMask,
- getterType, new ArgumentsTypes([rhsType], null));
+ returnType = handleDynamicSend(CallType.complex, node, operatorSelector,
+ operatorMask, getterType, new ArgumentsTypes([rhsType], null));
}
- handleDynamicSend(node, setterSelector, setterMask, receiverType,
- new ArgumentsTypes([indexType, returnType], null));
+ handleDynamicSend(CallType.complex, node, setterSelector, setterMask,
+ receiverType, new ArgumentsTypes([indexType, returnType], null));
if (node.isPostfix) {
return getterType;
@@ -1483,8 +1488,8 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation>
Selector operatorSelector =
elements.getOperatorSelectorInComplexSendSet(node);
TypeMask operatorMask = memberData.typeOfOperator(node);
- returnType = handleDynamicSend(node, operatorSelector, operatorMask,
- getterType, new ArgumentsTypes([rhsType], null));
+ returnType = handleDynamicSend(CallType.complex, node, operatorSelector,
+ operatorMask, getterType, new ArgumentsTypes([rhsType], null));
}
handleSuperSend(node, setterSelector, setterMask, setter,
new ArgumentsTypes([indexType, returnType], null));
@@ -1919,8 +1924,8 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation>
Selector operatorSelector =
elements.getOperatorSelectorInComplexSendSet(node);
TypeMask operatorMask = memberData.typeOfOperator(node);
- returnType = handleDynamicSend(node, operatorSelector, operatorMask,
- getterType, new ArgumentsTypes([rhsType], null));
+ returnType = handleDynamicSend(CallType.complex, node, operatorSelector,
+ operatorMask, getterType, new ArgumentsTypes([rhsType], null));
}
handleSuperSend(node, setterSelector, setterMask, setter,
new ArgumentsTypes([returnType], null));
@@ -1933,8 +1938,8 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation>
TypeInformation indexType, TypeInformation rhsType) {
Selector setterSelector = elements.getSelector(node);
TypeMask setterMask = memberData.typeOfSend(node);
- handleDynamicSend(node, setterSelector, setterMask, receiverType,
- new ArgumentsTypes([indexType, rhsType], null));
+ handleDynamicSend(CallType.complex, node, setterSelector, setterMask,
+ receiverType, new ArgumentsTypes([indexType, rhsType], null));
return rhsType;
}
@@ -2001,8 +2006,8 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation>
}
}
}
- handleDynamicSend(
- node, setterSelector, setterMask, receiverType, arguments);
+ handleDynamicSend(CallType.access, node, setterSelector, setterMask,
+ receiverType, arguments);
} else if (element.isField) {
FieldElement field = element;
if (field.isFinal) {
@@ -2014,8 +2019,8 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation>
if (visitingInitializers) {
inferrer.recordTypeOfField(field, rhsType);
} else {
- handleDynamicSend(
- node, setterSelector, setterMask, receiverType, arguments);
+ handleDynamicSend(CallType.complex, node, setterSelector, setterMask,
+ receiverType, arguments);
}
}
} else if (element.isLocal) {
@@ -2744,14 +2749,20 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation>
element, arguments, sideEffects, inLoop);
}
- TypeInformation handleDynamicSend(ast.Node node, Selector selector,
- TypeMask mask, TypeInformation receiverType, ArgumentsTypes arguments) {
+ TypeInformation handleDynamicSend(
+ CallType callType,
+ ast.Node node,
+ Selector selector,
+ TypeMask mask,
+ TypeInformation receiverType,
+ ArgumentsTypes arguments) {
assert(receiverType != null);
if (types.selectorNeedsUpdate(receiverType, mask)) {
mask = receiverType == types.dynamicType
? null
: types.newTypedSelector(receiverType, mask);
- inferrer.updateSelectorInMember(outermostElement, node, selector, mask);
+ inferrer.updateSelectorInMember(
+ outermostElement, callType, node, selector, mask);
}
// If the receiver of the call is a local, we may know more about
@@ -2772,8 +2783,17 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation>
}
}
- return inferrer.registerCalledSelector(node, selector, mask, receiverType,
- outermostElement, arguments, sideEffects, inLoop, isConditional);
+ return inferrer.registerCalledSelector(
+ callType,
+ node,
+ selector,
+ mask,
+ receiverType,
+ outermostElement,
+ arguments,
+ sideEffects,
+ inLoop,
+ isConditional);
}
TypeInformation handleDynamicInvoke(ast.Send node) {
@@ -2816,7 +2836,8 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation>
return types.boolType;
}
}
- return handleDynamicSend(node, selector, mask, receiverType, arguments);
+ return handleDynamicSend(
+ CallType.access, node, selector, mask, receiverType, arguments);
}
void recordReturnType(TypeInformation type) {
@@ -2894,10 +2915,10 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation>
TypeMask currentMask,
Selector moveNextSelector,
TypeMask moveNextMask) {
- handleDynamicSend(node, moveNextSelector, moveNextMask, iteratorType,
- new ArgumentsTypes.empty());
- TypeInformation currentType = handleDynamicSend(node, currentSelector,
- currentMask, iteratorType, new ArgumentsTypes.empty());
+ handleDynamicSend(CallType.forIn, node, moveNextSelector, moveNextMask,
+ iteratorType, new ArgumentsTypes.empty());
+ TypeInformation currentType = handleDynamicSend(CallType.forIn, node,
+ currentSelector, currentMask, iteratorType, new ArgumentsTypes.empty());
if (node.expression.isThis()) {
// Any reasonable implementation of an iterator would expose
@@ -2952,8 +2973,13 @@ class ElementGraphBuilder extends ast.Visitor<TypeInformation>
Selector moveNextSelector = Selectors.moveNext;
TypeMask moveNextMask = memberData.typeOfIteratorMoveNext(node);
- TypeInformation iteratorType = handleDynamicSend(node, iteratorSelector,
- iteratorMask, expressionType, new ArgumentsTypes.empty());
+ TypeInformation iteratorType = handleDynamicSend(
+ CallType.forIn,
+ node,
+ iteratorSelector,
+ iteratorMask,
+ expressionType,
+ new ArgumentsTypes.empty());
return handleForInLoop(node, iteratorType, currentSelector, currentMask,
moveNextSelector, moveNextMask);
« no previous file with comments | « no previous file | pkg/compiler/lib/src/inferrer/inferrer_engine.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698