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

Side by Side Diff: pkg/compiler/lib/src/resolution/members.dart

Issue 1062913003: Extract CallStructure from Selector. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 part of resolution; 5 part of resolution;
6 6
7 abstract class TreeElements { 7 abstract class TreeElements {
8 AnalyzableElement get analyzedElement; 8 AnalyzableElement get analyzedElement;
9 Iterable<Node> get superUses; 9 Iterable<Node> get superUses;
10 10
(...skipping 1482 matching lines...) Expand 10 before | Expand all | Expand 10 after
1493 call); 1493 call);
1494 Selector constructorSelector = 1494 Selector constructorSelector =
1495 visitor.getRedirectingThisOrSuperConstructorSelector(call); 1495 visitor.getRedirectingThisOrSuperConstructorSelector(call);
1496 FunctionElement calledConstructor = 1496 FunctionElement calledConstructor =
1497 lookupTarget.lookupConstructor(constructorSelector.name); 1497 lookupTarget.lookupConstructor(constructorSelector.name);
1498 1498
1499 final bool isImplicitSuperCall = false; 1499 final bool isImplicitSuperCall = false;
1500 final String className = lookupTarget.name; 1500 final String className = lookupTarget.name;
1501 verifyThatConstructorMatchesCall(constructor, 1501 verifyThatConstructorMatchesCall(constructor,
1502 calledConstructor, 1502 calledConstructor,
1503 selector, 1503 selector.callStructure,
1504 isImplicitSuperCall, 1504 isImplicitSuperCall,
1505 call, 1505 call,
1506 className, 1506 className,
1507 constructorSelector); 1507 constructorSelector);
1508 1508
1509 registry.useElement(call, calledConstructor); 1509 registry.useElement(call, calledConstructor);
1510 registry.registerStaticUse(calledConstructor); 1510 registry.registerStaticUse(calledConstructor);
1511 return calledConstructor; 1511 return calledConstructor;
1512 } 1512 }
1513 1513
1514 void resolveImplicitSuperConstructorSend(FunctionElement constructor, 1514 void resolveImplicitSuperConstructorSend(FunctionElement constructor,
1515 FunctionExpression functionNode) { 1515 FunctionExpression functionNode) {
1516 // If the class has a super resolve the implicit super call. 1516 // If the class has a super resolve the implicit super call.
1517 ClassElement classElement = constructor.enclosingClass; 1517 ClassElement classElement = constructor.enclosingClass;
1518 ClassElement superClass = classElement.superclass; 1518 ClassElement superClass = classElement.superclass;
1519 if (classElement != visitor.compiler.objectClass) { 1519 if (classElement != visitor.compiler.objectClass) {
1520 assert(superClass != null); 1520 assert(superClass != null);
1521 assert(superClass.resolutionState == STATE_DONE); 1521 assert(superClass.resolutionState == STATE_DONE);
1522 String constructorName = '';
1523 Selector callToMatch = new Selector.call(
1524 constructorName,
1525 classElement.library,
1526 0);
1527 1522
1528 final bool isSuperCall = true; 1523 final bool isSuperCall = true;
1529 ClassElement lookupTarget = getSuperOrThisLookupTarget(constructor, 1524 ClassElement lookupTarget = getSuperOrThisLookupTarget(constructor,
1530 isSuperCall, 1525 isSuperCall,
1531 functionNode); 1526 functionNode);
1532 Selector constructorSelector = new Selector.callDefaultConstructor(); 1527 Selector constructorSelector = new Selector.callDefaultConstructor();
1533 Element calledConstructor = lookupTarget.lookupConstructor( 1528 Element calledConstructor = lookupTarget.lookupConstructor(
1534 constructorSelector.name); 1529 constructorSelector.name);
1535 1530
1536 final String className = lookupTarget.name; 1531 final String className = lookupTarget.name;
1537 final bool isImplicitSuperCall = true; 1532 final bool isImplicitSuperCall = true;
1538 verifyThatConstructorMatchesCall(constructor, 1533 verifyThatConstructorMatchesCall(constructor,
1539 calledConstructor, 1534 calledConstructor,
1540 callToMatch, 1535 CallStructure.NO_ARGS,
1541 isImplicitSuperCall, 1536 isImplicitSuperCall,
1542 functionNode, 1537 functionNode,
1543 className, 1538 className,
1544 constructorSelector); 1539 constructorSelector);
1545 registry.registerImplicitSuperCall(calledConstructor); 1540 registry.registerImplicitSuperCall(calledConstructor);
1546 registry.registerStaticUse(calledConstructor); 1541 registry.registerStaticUse(calledConstructor);
1547 } 1542 }
1548 } 1543 }
1549 1544
1550 void verifyThatConstructorMatchesCall( 1545 void verifyThatConstructorMatchesCall(
1551 FunctionElement caller, 1546 FunctionElement caller,
1552 ConstructorElementX lookedupConstructor, 1547 ConstructorElementX lookedupConstructor,
1553 Selector call, 1548 CallStructure call,
1554 bool isImplicitSuperCall, 1549 bool isImplicitSuperCall,
1555 Node diagnosticNode, 1550 Node diagnosticNode,
1556 String className, 1551 String className,
1557 Selector constructorSelector) { 1552 Selector constructorSelector) {
1558 if (lookedupConstructor == null 1553 if (lookedupConstructor == null
1559 || !lookedupConstructor.isGenerativeConstructor) { 1554 || !lookedupConstructor.isGenerativeConstructor) {
1560 String fullConstructorName = Elements.constructorNameForDiagnostics( 1555 String fullConstructorName = Elements.constructorNameForDiagnostics(
1561 className, 1556 className,
1562 constructorSelector.name); 1557 constructorSelector.name);
1563 MessageKind kind = isImplicitSuperCall 1558 MessageKind kind = isImplicitSuperCall
1564 ? MessageKind.CANNOT_RESOLVE_CONSTRUCTOR_FOR_IMPLICIT 1559 ? MessageKind.CANNOT_RESOLVE_CONSTRUCTOR_FOR_IMPLICIT
1565 : MessageKind.CANNOT_RESOLVE_CONSTRUCTOR; 1560 : MessageKind.CANNOT_RESOLVE_CONSTRUCTOR;
1566 visitor.compiler.reportError( 1561 visitor.compiler.reportError(
1567 diagnosticNode, kind, {'constructorName': fullConstructorName}); 1562 diagnosticNode, kind, {'constructorName': fullConstructorName});
1568 } else { 1563 } else {
1569 lookedupConstructor.computeSignature(visitor.compiler); 1564 lookedupConstructor.computeSignature(visitor.compiler);
1570 if (!call.applies(lookedupConstructor, visitor.compiler.world)) { 1565 if (!call.signatureApplies(lookedupConstructor)) {
1571 MessageKind kind = isImplicitSuperCall 1566 MessageKind kind = isImplicitSuperCall
1572 ? MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT 1567 ? MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT
1573 : MessageKind.NO_MATCHING_CONSTRUCTOR; 1568 : MessageKind.NO_MATCHING_CONSTRUCTOR;
1574 visitor.compiler.reportError(diagnosticNode, kind); 1569 visitor.compiler.reportError(diagnosticNode, kind);
1575 } else if (caller.isConst 1570 } else if (caller.isConst
1576 && !lookedupConstructor.isConst) { 1571 && !lookedupConstructor.isConst) {
1577 visitor.compiler.reportError( 1572 visitor.compiler.reportError(
1578 diagnosticNode, MessageKind.CONST_CALLS_NON_CONST); 1573 diagnosticNode, MessageKind.CONST_CALLS_NON_CONST);
1579 } 1574 }
1580 } 1575 }
(...skipping 3496 matching lines...) Expand 10 before | Expand all | Expand 10 after
5077 } 5072 }
5078 5073
5079 /// The result for the resolution of the `assert` method. 5074 /// The result for the resolution of the `assert` method.
5080 class AssertResult implements ResolutionResult { 5075 class AssertResult implements ResolutionResult {
5081 const AssertResult(); 5076 const AssertResult();
5082 5077
5083 Element get element => null; 5078 Element get element => null;
5084 5079
5085 String toString() => 'AssertResult()'; 5080 String toString() => 'AssertResult()';
5086 } 5081 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698