OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |