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

Side by Side Diff: dart/sdk/lib/_internal/compiler/implementation/resolution/members.dart

Issue 21242002: Retain elements a finer granularity than library. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Variable initialized too early. Created 7 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 | 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 Element get currentElement; 8 Element get currentElement;
9 Set<Node> get superUses; 9 Set<Node> get superUses;
10 10
(...skipping 956 matching lines...) Expand 10 before | Expand all | Expand 10 after
967 annotation.resolutionState = STATE_DONE; 967 annotation.resolutionState = STATE_DONE;
968 })); 968 }));
969 } 969 }
970 970
971 error(Node node, MessageKind kind, [arguments = const {}]) { 971 error(Node node, MessageKind kind, [arguments = const {}]) {
972 // TODO(ahe): Make non-fatal. 972 // TODO(ahe): Make non-fatal.
973 compiler.reportFatalError(node, kind, arguments); 973 compiler.reportFatalError(node, kind, arguments);
974 } 974 }
975 } 975 }
976 976
977 class ConstantMapper extends Visitor {
978 final Map<Constant, Node> constantToNodeMap = new Map<Constant, Node>();
979 final CompileTimeConstantEvaluator evaluator;
980
981 ConstantMapper(ConstantHandler handler,
982 TreeElements elements,
983 Compiler compiler)
984 : evaluator = new CompileTimeConstantEvaluator(
985 handler, elements, compiler, isConst: false);
986
987 visitNode(Node node) {
988 Constant constant = evaluator.evaluate(node);
989 if (constant != null) constantToNodeMap[constant] = node;
990 node.visitChildren(this);
991 }
992 }
993
977 class InitializerResolver { 994 class InitializerResolver {
978 final ResolverVisitor visitor; 995 final ResolverVisitor visitor;
979 final Map<Element, Node> initialized; 996 final Map<Element, Node> initialized;
980 Link<Node> initializers; 997 Link<Node> initializers;
981 bool hasSuper; 998 bool hasSuper;
982 999
983 InitializerResolver(this.visitor) 1000 InitializerResolver(this.visitor)
984 : initialized = new Map<Element, Node>(), hasSuper = false; 1001 : initialized = new Map<Element, Node>(), hasSuper = false;
985 1002
986 error(Node node, MessageKind kind, [arguments = const {}]) { 1003 error(Node node, MessageKind kind, [arguments = const {}]) {
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
1267 1284
1268 void error(Node node, MessageKind kind, [Map arguments = const {}]) { 1285 void error(Node node, MessageKind kind, [Map arguments = const {}]) {
1269 compiler.reportFatalError(node, kind, arguments); 1286 compiler.reportFatalError(node, kind, arguments);
1270 } 1287 }
1271 1288
1272 void dualError(Node node, DualKind kind, [Map arguments = const {}]) { 1289 void dualError(Node node, DualKind kind, [Map arguments = const {}]) {
1273 error(node, kind.error, arguments); 1290 error(node, kind.error, arguments);
1274 } 1291 }
1275 1292
1276 void warning(Node node, MessageKind kind, [Map arguments = const {}]) { 1293 void warning(Node node, MessageKind kind, [Map arguments = const {}]) {
1277 ResolutionWarning message = new ResolutionWarning(kind, arguments); 1294 ResolutionWarning message =
1295 new ResolutionWarning(kind, arguments, compiler.terseDiagnostics);
1278 compiler.reportWarning(node, message); 1296 compiler.reportWarning(node, message);
1279 } 1297 }
1280 1298
1281 void dualWarning(Node node, DualKind kind, [Map arguments = const {}]) { 1299 void dualWarning(Node node, DualKind kind, [Map arguments = const {}]) {
1282 warning(node, kind.warning, arguments); 1300 warning(node, kind.warning, arguments);
1283 } 1301 }
1284 1302
1285 void cancel(Node node, String message) { 1303 void cancel(Node node, String message) {
1286 compiler.cancel(message, node: node); 1304 compiler.cancel(message, node: node);
1287 } 1305 }
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
1743 } 1761 }
1744 1762
1745 visitInStaticContext(Node node) { 1763 visitInStaticContext(Node node) {
1746 inStaticContext(() => visit(node)); 1764 inStaticContext(() => visit(node));
1747 } 1765 }
1748 1766
1749 ErroneousElement warnAndCreateErroneousElement(Node node, 1767 ErroneousElement warnAndCreateErroneousElement(Node node,
1750 SourceString name, 1768 SourceString name,
1751 DualKind kind, 1769 DualKind kind,
1752 [Map arguments = const {}]) { 1770 [Map arguments = const {}]) {
1753 ResolutionWarning warning = new ResolutionWarning(kind.warning, arguments); 1771 ResolutionWarning warning = new ResolutionWarning(
1772 kind.warning, arguments, compiler.terseDiagnostics);
1754 compiler.reportWarning(node, warning); 1773 compiler.reportWarning(node, warning);
1755 return new ErroneousElementX(kind.error, arguments, name, enclosingElement); 1774 return new ErroneousElementX(kind.error, arguments, name, enclosingElement);
1756 } 1775 }
1757 1776
1758 Element visitIdentifier(Identifier node) { 1777 Element visitIdentifier(Identifier node) {
1759 if (node.isThis()) { 1778 if (node.isThis()) {
1760 if (!inInstanceContext) { 1779 if (!inInstanceContext) {
1761 error(node, MessageKind.NO_INSTANCE_AVAILABLE, {'name': node}); 1780 error(node, MessageKind.NO_INSTANCE_AVAILABLE, {'name': node});
1762 } 1781 }
1763 return null; 1782 return null;
(...skipping 822 matching lines...) Expand 10 before | Expand all | Expand 10 after
2586 bool oldSendIsMemberAccess = sendIsMemberAccess; 2605 bool oldSendIsMemberAccess = sendIsMemberAccess;
2587 sendIsMemberAccess = false; 2606 sendIsMemberAccess = false;
2588 visit(node.expression); 2607 visit(node.expression);
2589 sendIsMemberAccess = oldSendIsMemberAccess; 2608 sendIsMemberAccess = oldSendIsMemberAccess;
2590 } 2609 }
2591 2610
2592 visitNewExpression(NewExpression node) { 2611 visitNewExpression(NewExpression node) {
2593 Node selector = node.send.selector; 2612 Node selector = node.send.selector;
2594 FunctionElement constructor = resolveConstructor(node); 2613 FunctionElement constructor = resolveConstructor(node);
2595 final bool isSymbolConstructor = constructor == compiler.symbolConstructor; 2614 final bool isSymbolConstructor = constructor == compiler.symbolConstructor;
2615 final bool isMirrorsUsedConstant =
2616 node.isConst() && (constructor == compiler.mirrorsUsedConstructor);
2596 resolveSelector(node.send, constructor); 2617 resolveSelector(node.send, constructor);
2597 resolveArguments(node.send.argumentsNode); 2618 resolveArguments(node.send.argumentsNode);
2598 useElement(node.send, constructor); 2619 useElement(node.send, constructor);
2599 if (Elements.isUnresolved(constructor)) return constructor; 2620 if (Elements.isUnresolved(constructor)) return constructor;
2600 Selector callSelector = mapping.getSelector(node.send); 2621 Selector callSelector = mapping.getSelector(node.send);
2601 if (!callSelector.applies(constructor, compiler)) { 2622 if (!callSelector.applies(constructor, compiler)) {
2602 warnArgumentMismatch(node.send, constructor); 2623 warnArgumentMismatch(node.send, constructor);
2603 compiler.backend.registerThrowNoSuchMethod(mapping); 2624 compiler.backend.registerThrowNoSuchMethod(mapping);
2604 } 2625 }
2605 2626
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2638 } 2659 }
2639 } else { 2660 } else {
2640 if (!compiler.mirrorUsageAnalyzerTask.hasMirrorUsage( 2661 if (!compiler.mirrorUsageAnalyzerTask.hasMirrorUsage(
2641 enclosingElement)) { 2662 enclosingElement)) {
2642 compiler.reportHint( 2663 compiler.reportHint(
2643 node.newToken, MessageKind.NON_CONST_BLOAT, 2664 node.newToken, MessageKind.NON_CONST_BLOAT,
2644 {'name': compiler.symbolClass.name}); 2665 {'name': compiler.symbolClass.name});
2645 } 2666 }
2646 world.registerNewSymbol(mapping); 2667 world.registerNewSymbol(mapping);
2647 } 2668 }
2669 } else if (isMirrorsUsedConstant) {
2670 compiler.mirrorUsageAnalyzerTask.validate(node, mapping);
2648 } 2671 }
2649 2672
2650 return null; 2673 return null;
2651 } 2674 }
2652 2675
2653 bool validateSymbol(Node node, String name) { 2676 bool validateSymbol(Node node, String name) {
2654 if (name.isEmpty) return true; 2677 if (name.isEmpty) return true;
2655 if (name.startsWith('_')) { 2678 if (name.startsWith('_')) {
2656 compiler.reportError(node, MessageKind.PRIVATE_IDENTIFIER, 2679 compiler.reportError(node, MessageKind.PRIVATE_IDENTIFIER,
2657 {'value': name}); 2680 {'value': name});
(...skipping 1274 matching lines...) Expand 10 before | Expand all | Expand 10 after
3932 Map arguments) { 3955 Map arguments) {
3933 if (kind == MessageKind.CANNOT_FIND_CONSTRUCTOR) { 3956 if (kind == MessageKind.CANNOT_FIND_CONSTRUCTOR) {
3934 compiler.backend.registerThrowNoSuchMethod(resolver.mapping); 3957 compiler.backend.registerThrowNoSuchMethod(resolver.mapping);
3935 } else { 3958 } else {
3936 compiler.backend.registerThrowRuntimeError(resolver.mapping); 3959 compiler.backend.registerThrowRuntimeError(resolver.mapping);
3937 } 3960 }
3938 if (inConstContext) { 3961 if (inConstContext) {
3939 error(diagnosticNode, kind.error, arguments); 3962 error(diagnosticNode, kind.error, arguments);
3940 } else { 3963 } else {
3941 ResolutionWarning warning = 3964 ResolutionWarning warning =
3942 new ResolutionWarning(kind.warning, arguments); 3965 new ResolutionWarning(
3966 kind.warning, arguments, compiler.terseDiagnostics);
3943 compiler.reportWarning(diagnosticNode, warning); 3967 compiler.reportWarning(diagnosticNode, warning);
3944 return new ErroneousElementX( 3968 return new ErroneousElementX(
3945 kind.error, arguments, targetName, enclosing); 3969 kind.error, arguments, targetName, enclosing);
3946 } 3970 }
3947 } 3971 }
3948 3972
3949 Selector createConstructorSelector(SourceString constructorName) { 3973 Selector createConstructorSelector(SourceString constructorName) {
3950 return constructorName == const SourceString('') 3974 return constructorName == const SourceString('')
3951 ? new Selector.callDefaultConstructor( 3975 ? new Selector.callDefaultConstructor(
3952 resolver.enclosingElement.getLibrary()) 3976 resolver.enclosingElement.getLibrary())
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
4068 return e; 4092 return e;
4069 } 4093 }
4070 4094
4071 /// Assumed to be called by [resolveRedirectingFactory]. 4095 /// Assumed to be called by [resolveRedirectingFactory].
4072 Element visitReturn(Return node) { 4096 Element visitReturn(Return node) {
4073 Node expression = node.expression; 4097 Node expression = node.expression;
4074 return finishConstructorReference(visit(expression), 4098 return finishConstructorReference(visit(expression),
4075 expression, expression); 4099 expression, expression);
4076 } 4100 }
4077 } 4101 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698