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

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: No entries in language.status, vm and dartc already implemented 'as'. Created 8 years, 5 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 1123 matching lines...) Expand 10 before | Expand all | Expand 10 after
1134 error(argument, MessageKind.INVALID_ARGUMENT_AFTER_NAMED); 1134 error(argument, MessageKind.INVALID_ARGUMENT_AFTER_NAMED);
1135 } 1135 }
1136 } 1136 }
1137 mapping.setSelector(node, new Selector.invocation(count, namedArguments)); 1137 mapping.setSelector(node, new Selector.invocation(count, namedArguments));
1138 } 1138 }
1139 1139
1140 visitSend(Send node) { 1140 visitSend(Send node) {
1141 Element target = resolveSend(node); 1141 Element target = resolveSend(node);
1142 if (node.isOperator) { 1142 if (node.isOperator) {
1143 Operator op = node.selector.asOperator(); 1143 Operator op = node.selector.asOperator();
1144 if (op.source.stringValue === 'is') { 1144 if (op.source.stringValue === 'is' || op.source.stringValue === 'as') {
1145 resolveTypeTest(node.arguments.head); 1145 resolveTypeTest(node.arguments.head);
1146 assert(node.arguments.tail.isEmpty()); 1146 assert(node.arguments.tail.isEmpty());
1147 mapping.setSelector(node, Selector.BINARY_OPERATOR); 1147 mapping.setSelector(node, Selector.BINARY_OPERATOR);
1148 } else if (node.arguments.isEmpty()) { 1148 } else if (node.arguments.isEmpty()) {
1149 assert(op.token.kind !== PLUS_TOKEN); 1149 assert(op.token.kind !== PLUS_TOKEN);
1150 mapping.setSelector(node, Selector.UNARY_OPERATOR); 1150 mapping.setSelector(node, Selector.UNARY_OPERATOR);
1151 } else { 1151 } else {
1152 visit(node.argumentsNode); 1152 visit(node.argumentsNode);
1153 mapping.setSelector(node, Selector.BINARY_OPERATOR); 1153 mapping.setSelector(node, Selector.BINARY_OPERATOR);
1154 } 1154 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1226 const SourceString('operator'), 1226 const SourceString('operator'),
1227 const SourceString('[]=')); 1227 const SourceString('[]='));
1228 } else if (node.selector.asOperator() != null) { 1228 } else if (node.selector.asOperator() != null) {
1229 switch (name.stringValue) { 1229 switch (name.stringValue) {
1230 case '===': 1230 case '===':
1231 case '!==': 1231 case '!==':
1232 case '!': 1232 case '!':
1233 case '&&': 1233 case '&&':
1234 case '||': 1234 case '||':
1235 case 'is': 1235 case 'is':
1236 case 'as':
1236 case '>>>': 1237 case '>>>':
1237 return null; 1238 return null;
1238 } 1239 }
1239 name = Elements.constructOperatorName( 1240 name = Elements.constructOperatorName(
1240 const SourceString('operator'), 1241 const SourceString('operator'),
1241 name, 1242 name,
1242 node.argumentsNode is Prefix); 1243 node.argumentsNode is Prefix);
1243 } 1244 }
1244 Selector selector = mapping.getSelector(node); 1245 Selector selector = mapping.getSelector(node);
1245 if (Selector.GETTER === selector) { 1246 if (Selector.GETTER === selector) {
(...skipping 938 matching lines...) Expand 10 before | Expand all | Expand 10 after
2184 2185
2185 TopScope(LibraryElement library) : super(null, library); 2186 TopScope(LibraryElement library) : super(null, library);
2186 Element lookup(SourceString name) { 2187 Element lookup(SourceString name) {
2187 return library.find(name); 2188 return library.find(name);
2188 } 2189 }
2189 2190
2190 Element add(Element newElement) { 2191 Element add(Element newElement) {
2191 throw "Cannot add an element in the top scope"; 2192 throw "Cannot add an element in the top scope";
2192 } 2193 }
2193 } 2194 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698