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

Side by Side Diff: pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart

Issue 1308803002: Make InferrerVisitor implement SemanticSendVisitor directly and delete ResolvedVisitor. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library simple_types_inferrer; 5 library simple_types_inferrer;
6 6
7 import '../closure.dart' show 7 import '../closure.dart' show
8 ClosureClassMap, 8 ClosureClassMap,
9 ClosureScope; 9 ClosureScope;
10 import '../common/names.dart' show 10 import '../common/names.dart' show
(...skipping 832 matching lines...) Expand 10 before | Expand all | Expand 10 after
843 bool isIncrementOrDecrement = op == '++' || op == '--'; 843 bool isIncrementOrDecrement = op == '++' || op == '--';
844 844
845 T receiverType; 845 T receiverType;
846 bool isCallOnThis = false; 846 bool isCallOnThis = false;
847 if (node.receiver == null) { 847 if (node.receiver == null) {
848 if (treatAsInstanceMember(element)) { 848 if (treatAsInstanceMember(element)) {
849 receiverType = thisType; 849 receiverType = thisType;
850 isCallOnThis = true; 850 isCallOnThis = true;
851 } 851 }
852 } else { 852 } else {
853 receiverType = visit(node.receiver); 853 if (node.receiver != null && elements[node.receiver] is! PrefixElement) {
854 // TODO(johnniwinther): Avoid blindly recursing on the receiver.
855 receiverType = visit(node.receiver);
856 }
854 isCallOnThis = isThisOrSuper(node.receiver); 857 isCallOnThis = isThisOrSuper(node.receiver);
855 } 858 }
856 859
857 T rhsType; 860 T rhsType;
858 861
859 if (isIncrementOrDecrement) { 862 if (isIncrementOrDecrement) {
860 rhsType = types.uint31Type; 863 rhsType = types.uint31Type;
861 if (node.isIndex) visit(node.arguments.head); 864 if (node.isIndex) visit(node.arguments.head);
862 } else if (node.isIndex) { 865 } else if (node.isIndex) {
863 visit(node.arguments.head); 866 visit(node.arguments.head);
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
1350 Element element) { 1353 Element element) {
1351 // TODO(herhut): We could do better here if we knew what we 1354 // TODO(herhut): We could do better here if we knew what we
1352 // are calling does not expose this. 1355 // are calling does not expose this.
1353 isThisExposed = true; 1356 isThisExposed = true;
1354 Selector selector = elements.getSelector(node); 1357 Selector selector = elements.getSelector(node);
1355 TypeMask mask = elements.getTypeMask(node); 1358 TypeMask mask = elements.getTypeMask(node);
1356 return handleStaticSend( 1359 return handleStaticSend(
1357 node, selector, mask, element, null); 1360 node, selector, mask, element, null);
1358 } 1361 }
1359 1362
1360 /// Handle super constructor invocation.
1361 @override
1362 T handleSuperConstructorInvoke(ast.Send node) {
1363 Element element = elements[node];
1364 ArgumentsTypes arguments = analyzeArguments(node.arguments);
1365 assert(visitingInitializers);
1366 seenSuperConstructorCall = true;
1367 analyzeSuperConstructorCall(element, arguments);
1368 Selector selector = elements.getSelector(node);
1369 TypeMask mask = elements.getTypeMask(node);
1370 return handleStaticSend(
1371 node, selector, mask, element, arguments);
1372 }
1373
1374 @override 1363 @override
1375 T visitUnresolvedSuperIndex( 1364 T visitUnresolvedSuperIndex(
1376 ast.Send node, 1365 ast.Send node,
1377 Element element, 1366 Element element,
1378 ast.Node index, 1367 ast.Node index,
1379 _) { 1368 _) {
1380 return handleErroneousSuperSend(node); 1369 return handleErroneousSuperSend(node);
1381 } 1370 }
1382 1371
1383 @override 1372 @override
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
1474 ast.Send node, 1463 ast.Send node,
1475 MethodElement method, 1464 MethodElement method,
1476 ast.NodeList arguments, 1465 ast.NodeList arguments,
1477 CallStructure callStructure, 1466 CallStructure callStructure,
1478 _) { 1467 _) {
1479 return handleSuperMethodInvoke( 1468 return handleSuperMethodInvoke(
1480 node, method, analyzeArguments(arguments.nodes)); 1469 node, method, analyzeArguments(arguments.nodes));
1481 } 1470 }
1482 1471
1483 @override 1472 @override
1473 T visitSuperSetterInvoke(
1474 ast.Send node,
1475 FunctionElement setter,
1476 ast.NodeList arguments,
1477 CallStructure callStructure,
1478 _) {
1479 return handleErroneousSuperSend(node);
1480 }
1481
1482 @override
1484 T visitSuperIndex( 1483 T visitSuperIndex(
1485 ast.Send node, 1484 ast.Send node,
1486 MethodElement method, 1485 MethodElement method,
1487 ast.Node index, 1486 ast.Node index,
1488 _) { 1487 _) {
1489 return handleSuperMethodInvoke( 1488 return handleSuperMethodInvoke(
1490 node, method, analyzeArguments(node.arguments)); 1489 node, method, analyzeArguments(node.arguments));
1491 } 1490 }
1492 1491
1493 @override 1492 @override
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
1656 constructor.enclosingClass.lookupMember('[]')); 1655 constructor.enclosingClass.lookupMember('[]'));
1657 return inferrer.concreteTypes.putIfAbsent( 1656 return inferrer.concreteTypes.putIfAbsent(
1658 node, () => types.allocateList( 1657 node, () => types.allocateList(
1659 types.nonNullExact(constructor.enclosingClass), node, 1658 types.nonNullExact(constructor.enclosingClass), node,
1660 outermostElement, elementType, length)); 1659 outermostElement, elementType, length));
1661 } else { 1660 } else {
1662 return returnType; 1661 return returnType;
1663 } 1662 }
1664 } 1663 }
1665 1664
1666 T handleNewExpression(ast.NewExpression node) { 1665 @override
1666 T bulkHandleNew(ast.NewExpression node, _) {
1667 Element element = elements[node.send]; 1667 Element element = elements[node.send];
1668 return handleConstructorSend(node.send, element); 1668 return handleConstructorSend(node.send, element);
1669 } 1669 }
1670 1670
1671 /// Handle invocation of a top level or static field or getter [element]. 1671 /// Handle invocation of a top level or static field or getter [element].
1672 T handleStaticFieldOrGetterInvoke(ast.Send node, Element element) { 1672 T handleStaticFieldOrGetterInvoke(ast.Send node, Element element) {
1673 ArgumentsTypes arguments = analyzeArguments(node.arguments); 1673 ArgumentsTypes arguments = analyzeArguments(node.arguments);
1674 Selector selector = elements.getSelector(node); 1674 Selector selector = elements.getSelector(node);
1675 TypeMask mask = elements.getTypeMask(node); 1675 TypeMask mask = elements.getTypeMask(node);
1676 handleStaticSend(node, selector, mask, element, arguments); 1676 handleStaticSend(node, selector, mask, element, arguments);
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
1838 } else { 1838 } else {
1839 positional.add(argument.accept(this)); 1839 positional.add(argument.accept(this));
1840 } 1840 }
1841 // TODO(ngeoffray): We could do better here if we knew what we 1841 // TODO(ngeoffray): We could do better here if we knew what we
1842 // are calling does not expose this. 1842 // are calling does not expose this.
1843 isThisExposed = isThisExposed || argument.isThis(); 1843 isThisExposed = isThisExposed || argument.isThis();
1844 } 1844 }
1845 return new ArgumentsTypes<T>(positional, named); 1845 return new ArgumentsTypes<T>(positional, named);
1846 } 1846 }
1847 1847
1848 T visitGetterSend(ast.Send node) {
1849 if (elements[node] is! PrefixElement) {
1850 // TODO(johnniwinther): Remove this when no longer called from
1851 // [handleSendSet].
1852 internalError(node, "Unexpected visitGetterSend");
1853 }
1854 return null;
1855 }
1856
1857 /// Read a local variable, function or parameter. 1848 /// Read a local variable, function or parameter.
1858 T handleLocalGet(ast.Send node, LocalElement local) { 1849 T handleLocalGet(ast.Send node, LocalElement local) {
1859 assert(locals.use(local) != null); 1850 assert(locals.use(local) != null);
1860 return locals.use(local); 1851 return locals.use(local);
1861 } 1852 }
1862 1853
1863 /// Read a static or top level field. 1854 /// Read a static or top level field.
1864 T handleStaticFieldGet(ast.Send node, FieldElement field) { 1855 T handleStaticFieldGet(ast.Send node, FieldElement field) {
1865 Selector selector = elements.getSelector(node); 1856 Selector selector = elements.getSelector(node);
1866 TypeMask mask = elements.getTypeMask(node); 1857 TypeMask mask = elements.getTypeMask(node);
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
2313 TypeMask moveNextMask = elements.getMoveNextTypeMask(node); 2304 TypeMask moveNextMask = elements.getMoveNextTypeMask(node);
2314 2305
2315 T iteratorType = handleDynamicSend( 2306 T iteratorType = handleDynamicSend(
2316 node, iteratorSelector, iteratorMask, expressionType, 2307 node, iteratorSelector, iteratorMask, expressionType,
2317 new ArgumentsTypes<T>.empty()); 2308 new ArgumentsTypes<T>.empty());
2318 2309
2319 return handleForInLoop(node, iteratorType, currentSelector, currentMask, 2310 return handleForInLoop(node, iteratorType, currentSelector, currentMask,
2320 moveNextSelector, moveNextMask); 2311 moveNextSelector, moveNextMask);
2321 } 2312 }
2322 } 2313 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698