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: lib/compiler/implementation/resolver.dart

Issue 10540048: Implement 'as' operator. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address review comments. Created 8 years, 6 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 interface TreeElements { 5 interface TreeElements {
6 Element operator[](Node node); 6 Element operator[](Node node);
7 Selector getSelector(Send send); 7 Selector getSelector(Send send);
8 Type getType(TypeAnnotation annotation); 8 Type getType(TypeAnnotation annotation);
9 } 9 }
10 10
(...skipping 1032 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 error(argument, MessageKind.INVALID_ARGUMENT_AFTER_NAMED); 1043 error(argument, MessageKind.INVALID_ARGUMENT_AFTER_NAMED);
1044 } 1044 }
1045 } 1045 }
1046 mapping.setSelector(node, new Selector.invocation(count, namedArguments)); 1046 mapping.setSelector(node, new Selector.invocation(count, namedArguments));
1047 } 1047 }
1048 1048
1049 visitSend(Send node) { 1049 visitSend(Send node) {
1050 Element target = resolveSend(node); 1050 Element target = resolveSend(node);
1051 if (node.isOperator) { 1051 if (node.isOperator) {
1052 Operator op = node.selector.asOperator(); 1052 Operator op = node.selector.asOperator();
1053 if (op.source.stringValue === 'is') { 1053 if (op.source.stringValue === 'is' || op.source.stringValue === 'as') {
1054 resolveTypeTest(node.arguments.head); 1054 resolveTypeTest(node.arguments.head);
1055 assert(node.arguments.tail.isEmpty()); 1055 assert(node.arguments.tail.isEmpty());
1056 mapping.setSelector(node, Selector.BINARY_OPERATOR); 1056 mapping.setSelector(node, Selector.BINARY_OPERATOR);
1057 } else if (node.arguments.isEmpty()) { 1057 } else if (node.arguments.isEmpty()) {
1058 assert(op.token.kind !== PLUS_TOKEN); 1058 assert(op.token.kind !== PLUS_TOKEN);
1059 mapping.setSelector(node, Selector.UNARY_OPERATOR); 1059 mapping.setSelector(node, Selector.UNARY_OPERATOR);
1060 } else { 1060 } else {
1061 visit(node.argumentsNode); 1061 visit(node.argumentsNode);
1062 mapping.setSelector(node, Selector.BINARY_OPERATOR); 1062 mapping.setSelector(node, Selector.BINARY_OPERATOR);
1063 } 1063 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 const SourceString('operator'), 1135 const SourceString('operator'),
1136 const SourceString('[]=')); 1136 const SourceString('[]='));
1137 } else if (node.selector.asOperator() != null) { 1137 } else if (node.selector.asOperator() != null) {
1138 switch (name.stringValue) { 1138 switch (name.stringValue) {
1139 case '===': 1139 case '===':
1140 case '!==': 1140 case '!==':
1141 case '!': 1141 case '!':
1142 case '&&': 1142 case '&&':
1143 case '||': 1143 case '||':
1144 case 'is': 1144 case 'is':
1145 case 'as':
1145 case '>>>': 1146 case '>>>':
1146 return null; 1147 return null;
1147 } 1148 }
1148 name = Elements.constructOperatorName( 1149 name = Elements.constructOperatorName(
1149 const SourceString('operator'), 1150 const SourceString('operator'),
1150 name, 1151 name,
1151 node.argumentsNode is Prefix); 1152 node.argumentsNode is Prefix);
1152 } 1153 }
1153 Selector selector = mapping.getSelector(node); 1154 Selector selector = mapping.getSelector(node);
1154 if (Selector.GETTER === selector) { 1155 if (Selector.GETTER === selector) {
(...skipping 938 matching lines...) Expand 10 before | Expand all | Expand 10 after
2093 2094
2094 TopScope(LibraryElement library) : super(null, library); 2095 TopScope(LibraryElement library) : super(null, library);
2095 Element lookup(SourceString name) { 2096 Element lookup(SourceString name) {
2096 return library.find(name); 2097 return library.find(name);
2097 } 2098 }
2098 2099
2099 Element add(Element newElement) { 2100 Element add(Element newElement) {
2100 throw "Cannot add an element in the top scope"; 2101 throw "Cannot add an element in the top scope";
2101 } 2102 }
2102 } 2103 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698