Chromium Code Reviews| 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 ssa; | 5 part of ssa; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * A special element for the extra parameter taken by intercepted | 8 * A special element for the extra parameter taken by intercepted |
| 9 * methods. We need to override [Element.computeType] because our | 9 * methods. We need to override [Element.computeType] because our |
| 10 * optimizers may look at its declared type. | 10 * optimizers may look at its declared type. |
| (...skipping 3425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3436 existingArguments.add(parameter.name.slowToString()); | 3436 existingArguments.add(parameter.name.slowToString()); |
| 3437 }); | 3437 }); |
| 3438 generateThrowNoSuchMethod(diagnosticNode, | 3438 generateThrowNoSuchMethod(diagnosticNode, |
| 3439 function.name.slowToString(), | 3439 function.name.slowToString(), |
| 3440 argumentNodes: argumentNodes, | 3440 argumentNodes: argumentNodes, |
| 3441 existingArguments: existingArguments); | 3441 existingArguments: existingArguments); |
| 3442 } | 3442 } |
| 3443 | 3443 |
| 3444 visitNewExpression(NewExpression node) { | 3444 visitNewExpression(NewExpression node) { |
| 3445 Element element = elements[node.send]; | 3445 Element element = elements[node.send]; |
| 3446 if (!Elements.isErroneousElement(element)) { | 3446 if (!Elements.isErroneousElement(element) && |
| 3447 !Elements.isMalformedElement(element)) { | |
|
ngeoffray
2012/11/27 09:37:35
!Elements.isUnresolved ?
aam-me
2012/11/28 01:49:47
Yes, agree. Good idea.
| |
| 3447 FunctionElement function = element; | 3448 FunctionElement function = element; |
| 3448 element = function.redirectionTarget; | 3449 element = function.redirectionTarget; |
| 3449 } | 3450 } |
| 3450 if (Elements.isErroneousElement(element)) { | 3451 if (Elements.isErroneousElement(element)) { |
| 3451 ErroneousElement error = element; | 3452 ErroneousElement error = element; |
| 3452 if (error.messageKind == MessageKind.CANNOT_FIND_CONSTRUCTOR) { | 3453 if (error.messageKind == MessageKind.CANNOT_FIND_CONSTRUCTOR) { |
| 3453 generateThrowNoSuchMethod(node.send, | 3454 generateThrowNoSuchMethod(node.send, |
| 3454 getTargetName(error, 'constructor'), | 3455 getTargetName(error, 'constructor'), |
| 3455 argumentNodes: node.send.arguments); | 3456 argumentNodes: node.send.arguments); |
| 3456 } else if (error.messageKind == MessageKind.CANNOT_RESOLVE) { | 3457 } else if (error.messageKind == MessageKind.CANNOT_RESOLVE) { |
| 3457 Message message = error.messageKind.message(error.messageArguments); | 3458 Message message = error.messageKind.message(error.messageArguments); |
| 3458 generateRuntimeError(node.send, message.toString()); | 3459 generateRuntimeError(node.send, message.toString()); |
| 3459 } else { | 3460 } else { |
| 3460 compiler.internalError('unexpected unresolved constructor call', | 3461 compiler.internalError('unexpected unresolved constructor call', |
| 3461 node: node); | 3462 node: node); |
| 3462 } | 3463 } |
| 3463 } else if (node.isConst()) { | 3464 } else if (node.isConst()) { |
| 3464 // TODO(karlklose): add type representation | 3465 // TODO(karlklose): add type representation |
| 3465 ConstantHandler handler = compiler.constantHandler; | 3466 ConstantHandler handler = compiler.constantHandler; |
| 3466 Constant constant = handler.compileNodeWithDefinitions(node, elements); | 3467 Constant constant = handler.compileNodeWithDefinitions(node, elements); |
| 3467 stack.add(graph.addConstant(constant)); | 3468 stack.add(graph.addConstant(constant)); |
| 3469 } else if (Elements.isMalformedElement(element)) { | |
| 3470 Message message = | |
| 3471 MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER.message([element]); | |
| 3472 generateRuntimeError(node.send, message.toString()); | |
| 3468 } else { | 3473 } else { |
| 3469 visitNewSend(node.send, elements.getType(node)); | 3474 visitNewSend(node.send, elements.getType(node)); |
| 3470 } | 3475 } |
| 3471 } | 3476 } |
| 3472 | 3477 |
| 3473 visitSendSet(SendSet node) { | 3478 visitSendSet(SendSet node) { |
| 3474 Element element = elements[node]; | 3479 Element element = elements[node]; |
| 3475 if (!Elements.isUnresolved(element) && element.impliesType()) { | 3480 if (!Elements.isUnresolved(element) && element.impliesType()) { |
| 3476 Identifier selector = node.selector; | 3481 Identifier selector = node.selector; |
| 3477 generateThrowNoSuchMethod(node, selector.source.slowToString(), | 3482 generateThrowNoSuchMethod(node, selector.source.slowToString(), |
| (...skipping 1432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4910 new HSubGraphBlockInformation(elseBranch.graph)); | 4915 new HSubGraphBlockInformation(elseBranch.graph)); |
| 4911 | 4916 |
| 4912 HBasicBlock conditionStartBlock = conditionBranch.block; | 4917 HBasicBlock conditionStartBlock = conditionBranch.block; |
| 4913 conditionStartBlock.setBlockFlow(info, joinBlock); | 4918 conditionStartBlock.setBlockFlow(info, joinBlock); |
| 4914 SubGraph conditionGraph = conditionBranch.graph; | 4919 SubGraph conditionGraph = conditionBranch.graph; |
| 4915 HIf branch = conditionGraph.end.last; | 4920 HIf branch = conditionGraph.end.last; |
| 4916 assert(branch is HIf); | 4921 assert(branch is HIf); |
| 4917 branch.blockInformation = conditionStartBlock.blockFlow; | 4922 branch.blockInformation = conditionStartBlock.blockFlow; |
| 4918 } | 4923 } |
| 4919 } | 4924 } |
| OLD | NEW |