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

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

Issue 25235002: When visiting arguments in the resolver, always set the [sendIsPropertyAccess] to false. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 2 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
« no previous file with comments | « no previous file | tests/language/issue13673_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 2323 matching lines...) Expand 10 before | Expand all | Expand 10 after
2334 2334
2335 Selector resolveSelector(Send node, Element element) { 2335 Selector resolveSelector(Send node, Element element) {
2336 LibraryElement library = enclosingElement.getLibrary(); 2336 LibraryElement library = enclosingElement.getLibrary();
2337 Selector selector = computeSendSelector(node, library, element); 2337 Selector selector = computeSendSelector(node, library, element);
2338 if (selector != null) mapping.setSelector(node, selector); 2338 if (selector != null) mapping.setSelector(node, selector);
2339 return selector; 2339 return selector;
2340 } 2340 }
2341 2341
2342 void resolveArguments(NodeList list) { 2342 void resolveArguments(NodeList list) {
2343 if (list == null) return; 2343 if (list == null) return;
2344 bool oldSendIsMemberAccess = sendIsMemberAccess;
2345 sendIsMemberAccess = false;
2344 Map<SourceString, Node> seenNamedArguments = new Map<SourceString, Node>(); 2346 Map<SourceString, Node> seenNamedArguments = new Map<SourceString, Node>();
2345 for (Link<Node> link = list.nodes; !link.isEmpty; link = link.tail) { 2347 for (Link<Node> link = list.nodes; !link.isEmpty; link = link.tail) {
2346 Expression argument = link.head; 2348 Expression argument = link.head;
2347 visit(argument); 2349 visit(argument);
2348 NamedArgument namedArgument = argument.asNamedArgument(); 2350 NamedArgument namedArgument = argument.asNamedArgument();
2349 if (namedArgument != null) { 2351 if (namedArgument != null) {
2350 SourceString source = namedArgument.name.source; 2352 SourceString source = namedArgument.name.source;
2351 if (seenNamedArguments.containsKey(source)) { 2353 if (seenNamedArguments.containsKey(source)) {
2352 reportDuplicateDefinition( 2354 reportDuplicateDefinition(
2353 source, 2355 source,
2354 argument, 2356 argument,
2355 seenNamedArguments[source]); 2357 seenNamedArguments[source]);
2356 } else { 2358 } else {
2357 seenNamedArguments[source] = namedArgument; 2359 seenNamedArguments[source] = namedArgument;
2358 } 2360 }
2359 } else if (!seenNamedArguments.isEmpty) { 2361 } else if (!seenNamedArguments.isEmpty) {
2360 error(argument, MessageKind.INVALID_ARGUMENT_AFTER_NAMED); 2362 error(argument, MessageKind.INVALID_ARGUMENT_AFTER_NAMED);
2361 } 2363 }
2362 } 2364 }
2365 sendIsMemberAccess = oldSendIsMemberAccess;
2363 } 2366 }
2364 2367
2365 visitSend(Send node) { 2368 visitSend(Send node) {
2366 bool oldSendIsMemberAccess = sendIsMemberAccess; 2369 bool oldSendIsMemberAccess = sendIsMemberAccess;
2367 sendIsMemberAccess = node.isPropertyAccess || node.isCall; 2370 sendIsMemberAccess = node.isPropertyAccess || node.isCall;
2368 Element target = resolveSend(node); 2371 Element target = resolveSend(node);
2369 sendIsMemberAccess = oldSendIsMemberAccess; 2372 sendIsMemberAccess = oldSendIsMemberAccess;
2370 2373
2371 if (target != null 2374 if (target != null
2372 && target == compiler.mirrorSystemGetNameFunction 2375 && target == compiler.mirrorSystemGetNameFunction
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2417 } else if (identical(operatorString, 'as')) { 2420 } else if (identical(operatorString, 'as')) {
2418 DartType type = resolveTypeExpression(node.arguments.head); 2421 DartType type = resolveTypeExpression(node.arguments.head);
2419 if (type != null) { 2422 if (type != null) {
2420 compiler.enqueuer.resolution.registerAsCheck(type, mapping); 2423 compiler.enqueuer.resolution.registerAsCheck(type, mapping);
2421 } 2424 }
2422 resolvedArguments = true; 2425 resolvedArguments = true;
2423 } 2426 }
2424 } 2427 }
2425 2428
2426 if (!resolvedArguments) { 2429 if (!resolvedArguments) {
2427 oldSendIsMemberAccess = sendIsMemberAccess;
2428 sendIsMemberAccess = false;
2429 resolveArguments(node.argumentsNode); 2430 resolveArguments(node.argumentsNode);
2430 sendIsMemberAccess = oldSendIsMemberAccess;
2431 } 2431 }
2432 2432
2433 // If the selector is null, it means that we will not be generating 2433 // If the selector is null, it means that we will not be generating
2434 // code for this as a send. 2434 // code for this as a send.
2435 Selector selector = mapping.getSelector(node); 2435 Selector selector = mapping.getSelector(node);
2436 if (selector == null) return; 2436 if (selector == null) return;
2437 2437
2438 if (node.isCall) { 2438 if (node.isCall) {
2439 if (Elements.isUnresolved(target) || 2439 if (Elements.isUnresolved(target) ||
2440 target.isGetter() || 2440 target.isGetter() ||
(...skipping 1970 matching lines...) Expand 10 before | Expand all | Expand 10 after
4411 return e; 4411 return e;
4412 } 4412 }
4413 4413
4414 /// Assumed to be called by [resolveRedirectingFactory]. 4414 /// Assumed to be called by [resolveRedirectingFactory].
4415 Element visitReturn(Return node) { 4415 Element visitReturn(Return node) {
4416 Node expression = node.expression; 4416 Node expression = node.expression;
4417 return finishConstructorReference(visit(expression), 4417 return finishConstructorReference(visit(expression),
4418 expression, expression); 4418 expression, expression);
4419 } 4419 }
4420 } 4420 }
OLDNEW
« no previous file with comments | « no previous file | tests/language/issue13673_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698