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

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

Issue 1068233002: Revert "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.callStructure, 1503 selector,
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);
1522 1527
1523 final bool isSuperCall = true; 1528 final bool isSuperCall = true;
1524 ClassElement lookupTarget = getSuperOrThisLookupTarget(constructor, 1529 ClassElement lookupTarget = getSuperOrThisLookupTarget(constructor,
1525 isSuperCall, 1530 isSuperCall,
1526 functionNode); 1531 functionNode);
1527 Selector constructorSelector = new Selector.callDefaultConstructor(); 1532 Selector constructorSelector = new Selector.callDefaultConstructor();
1528 Element calledConstructor = lookupTarget.lookupConstructor( 1533 Element calledConstructor = lookupTarget.lookupConstructor(
1529 constructorSelector.name); 1534 constructorSelector.name);
1530 1535
1531 final String className = lookupTarget.name; 1536 final String className = lookupTarget.name;
1532 final bool isImplicitSuperCall = true; 1537 final bool isImplicitSuperCall = true;
1533 verifyThatConstructorMatchesCall(constructor, 1538 verifyThatConstructorMatchesCall(constructor,
1534 calledConstructor, 1539 calledConstructor,
1535 CallStructure.NO_ARGS, 1540 callToMatch,
1536 isImplicitSuperCall, 1541 isImplicitSuperCall,
1537 functionNode, 1542 functionNode,
1538 className, 1543 className,
1539 constructorSelector); 1544 constructorSelector);
1540 registry.registerImplicitSuperCall(calledConstructor); 1545 registry.registerImplicitSuperCall(calledConstructor);
1541 registry.registerStaticUse(calledConstructor); 1546 registry.registerStaticUse(calledConstructor);
1542 } 1547 }
1543 } 1548 }
1544 1549
1545 void verifyThatConstructorMatchesCall( 1550 void verifyThatConstructorMatchesCall(
1546 FunctionElement caller, 1551 FunctionElement caller,
1547 ConstructorElementX lookedupConstructor, 1552 ConstructorElementX lookedupConstructor,
1548 CallStructure call, 1553 Selector call,
1549 bool isImplicitSuperCall, 1554 bool isImplicitSuperCall,
1550 Node diagnosticNode, 1555 Node diagnosticNode,
1551 String className, 1556 String className,
1552 Selector constructorSelector) { 1557 Selector constructorSelector) {
1553 if (lookedupConstructor == null 1558 if (lookedupConstructor == null
1554 || !lookedupConstructor.isGenerativeConstructor) { 1559 || !lookedupConstructor.isGenerativeConstructor) {
1555 String fullConstructorName = Elements.constructorNameForDiagnostics( 1560 String fullConstructorName = Elements.constructorNameForDiagnostics(
1556 className, 1561 className,
1557 constructorSelector.name); 1562 constructorSelector.name);
1558 MessageKind kind = isImplicitSuperCall 1563 MessageKind kind = isImplicitSuperCall
1559 ? MessageKind.CANNOT_RESOLVE_CONSTRUCTOR_FOR_IMPLICIT 1564 ? MessageKind.CANNOT_RESOLVE_CONSTRUCTOR_FOR_IMPLICIT
1560 : MessageKind.CANNOT_RESOLVE_CONSTRUCTOR; 1565 : MessageKind.CANNOT_RESOLVE_CONSTRUCTOR;
1561 visitor.compiler.reportError( 1566 visitor.compiler.reportError(
1562 diagnosticNode, kind, {'constructorName': fullConstructorName}); 1567 diagnosticNode, kind, {'constructorName': fullConstructorName});
1563 } else { 1568 } else {
1564 lookedupConstructor.computeSignature(visitor.compiler); 1569 lookedupConstructor.computeSignature(visitor.compiler);
1565 if (!call.signatureApplies(lookedupConstructor)) { 1570 if (!call.applies(lookedupConstructor, visitor.compiler.world)) {
1566 MessageKind kind = isImplicitSuperCall 1571 MessageKind kind = isImplicitSuperCall
1567 ? MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT 1572 ? MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT
1568 : MessageKind.NO_MATCHING_CONSTRUCTOR; 1573 : MessageKind.NO_MATCHING_CONSTRUCTOR;
1569 visitor.compiler.reportError(diagnosticNode, kind); 1574 visitor.compiler.reportError(diagnosticNode, kind);
1570 } else if (caller.isConst 1575 } else if (caller.isConst
1571 && !lookedupConstructor.isConst) { 1576 && !lookedupConstructor.isConst) {
1572 visitor.compiler.reportError( 1577 visitor.compiler.reportError(
1573 diagnosticNode, MessageKind.CONST_CALLS_NON_CONST); 1578 diagnosticNode, MessageKind.CONST_CALLS_NON_CONST);
1574 } 1579 }
1575 } 1580 }
(...skipping 3496 matching lines...) Expand 10 before | Expand all | Expand 10 after
5072 } 5077 }
5073 5078
5074 /// The result for the resolution of the `assert` method. 5079 /// The result for the resolution of the `assert` method.
5075 class AssertResult implements ResolutionResult { 5080 class AssertResult implements ResolutionResult {
5076 const AssertResult(); 5081 const AssertResult();
5077 5082
5078 Element get element => null; 5083 Element get element => null;
5079 5084
5080 String toString() => 'AssertResult()'; 5085 String toString() => 'AssertResult()';
5081 } 5086 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/program_builder.dart ('k') | pkg/compiler/lib/src/resolution/resolution.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698