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

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

Issue 2965223002: Change inference element invariants (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/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/closure_tracer.dart
diff --git a/pkg/compiler/lib/src/inferrer/closure_tracer.dart b/pkg/compiler/lib/src/inferrer/closure_tracer.dart
index 3901f8c46976f064e4876509c1f6b833d389fc9d..b758ecea3ab57be99929274afcd58a829225059c 100644
--- a/pkg/compiler/lib/src/inferrer/closure_tracer.dart
+++ b/pkg/compiler/lib/src/inferrer/closure_tracer.dart
@@ -6,6 +6,7 @@ library compiler.src.inferrer.closure_tracer;
import '../common/names.dart' show Names;
import '../elements/elements.dart';
+import '../elements/entities.dart';
import '../js_backend/backend.dart' show JavaScriptBackend;
import '../types/types.dart' show TypeMask;
import '../universe/selector.dart' show Selector;
@@ -15,7 +16,7 @@ import 'node_tracer.dart';
import 'type_graph_nodes.dart';
class ClosureTracerVisitor extends TracerVisitor {
- final Iterable<MethodElement> tracedElements;
+ final Iterable<FunctionEntity> tracedElements;
final List<CallSiteTypeInformation> _callsToAnalyze =
new List<CallSiteTypeInformation>();
@@ -29,8 +30,9 @@ class ClosureTracerVisitor extends TracerVisitor {
analyze();
if (!continueAnalyzing) return;
_callsToAnalyze.forEach(_analyzeCall);
- for (MethodElement e in tracedElements) {
- e.functionSignature.forEachParameter((Element parameter) {
+ for (MethodElement element in tracedElements) {
+ MethodElement implementation = element.implementation;
+ implementation.functionSignature.forEachParameter((Element parameter) {
ElementTypeInformation info =
inferrer.types.getInferredTypeOfParameter(parameter);
info.disableInferenceForClosures = false;
@@ -52,7 +54,7 @@ class ClosureTracerVisitor extends TracerVisitor {
void _analyzeCall(CallSiteTypeInformation info) {
Selector selector = info.selector;
TypeMask mask = info.mask;
- tracedElements.forEach((MethodElement functionElement) {
+ tracedElements.forEach((FunctionEntity functionElement) {
if (!selector.callStructure
.signatureApplies(functionElement.parameterStructure)) {
return;
@@ -76,9 +78,8 @@ class ClosureTracerVisitor extends TracerVisitor {
@override
visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) {
super.visitStaticCallSiteTypeInformation(info);
- Element called = info.calledElement;
- if (compiler.backend
- .isForeign(inferrer.closedWorld.commonElements, called)) {
+ MemberEntity called = info.calledElement;
+ if (inferrer.closedWorld.commonElements.isForeign(called)) {
String name = called.name;
if (name == JavaScriptBackend.JS || name == 'DART_CLOSURE_TO_JS') {
bailout('Used in JS ${info.call}');
@@ -92,18 +93,17 @@ class ClosureTracerVisitor extends TracerVisitor {
// where `foo` is a getter.
_registerCallForLaterAnalysis(info);
}
- if (called is MemberElement &&
- _checkIfFunctionApply(called) &&
+ if (_checkIfFunctionApply(called) &&
info.arguments != null &&
info.arguments.contains(currentUser)) {
_tagAsFunctionApplyTarget("static call");
}
}
- bool _checkIfCurrentUser(MemberElement element) =>
+ bool _checkIfCurrentUser(MemberEntity element) =>
inferrer.types.getInferredTypeOfMember(element) == currentUser;
- bool _checkIfFunctionApply(MemberElement element) {
+ bool _checkIfFunctionApply(MemberEntity element) {
return inferrer.closedWorld.commonElements.isFunctionApplyMethod(element);
}
« no previous file with comments | « pkg/compiler/lib/src/inferrer/builder.dart ('k') | pkg/compiler/lib/src/inferrer/inferrer_engine.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698