OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 library code_generator; | 5 library code_generator; |
6 | 6 |
7 import 'glue.dart'; | 7 import 'glue.dart'; |
8 | 8 |
9 import '../../closure.dart' show | 9 import '../../closure.dart' show |
10 ClosureClassElement; | 10 ClosureClassElement; |
11 import '../../common.dart'; | 11 import '../../common.dart'; |
12 import '../../common/codegen.dart' show | 12 import '../../common/codegen.dart' show |
13 CodegenRegistry; | 13 CodegenRegistry; |
14 import '../../constants/values.dart'; | 14 import '../../constants/values.dart'; |
15 import '../../dart_types.dart'; | 15 import '../../dart_types.dart'; |
16 import '../../elements/elements.dart'; | 16 import '../../elements/elements.dart'; |
17 import '../../io/source_information.dart' show | 17 import '../../io/source_information.dart' show |
18 SourceInformation; | 18 SourceInformation; |
19 import '../../js/js.dart' as js; | 19 import '../../js/js.dart' as js; |
20 import '../../tree_ir/tree_ir_nodes.dart' as tree_ir; | 20 import '../../tree_ir/tree_ir_nodes.dart' as tree_ir; |
21 import '../../tree_ir/tree_ir_nodes.dart' show | 21 import '../../tree_ir/tree_ir_nodes.dart' show |
22 BuiltinMethod, | 22 BuiltinMethod, |
23 BuiltinOperator; | 23 BuiltinOperator; |
24 import '../../types/types.dart' show | 24 import '../../types/types.dart' show |
25 TypeMask; | 25 TypeMask; |
26 import '../../universe/call_structure.dart' show | 26 import '../../universe/call_structure.dart' show |
27 CallStructure; | 27 CallStructure; |
28 import '../../universe/selector.dart' show | 28 import '../../universe/selector.dart' show |
29 Selector; | 29 Selector; |
30 import '../../universe/universe.dart' show | |
31 UniverseSelector; | |
32 import '../../universe/use.dart' show | 30 import '../../universe/use.dart' show |
| 31 DynamicUse, |
33 StaticUse; | 32 StaticUse; |
34 import '../../util/maplet.dart'; | 33 import '../../util/maplet.dart'; |
35 | 34 |
36 class CodegenBailout { | 35 class CodegenBailout { |
37 final tree_ir.Node node; | 36 final tree_ir.Node node; |
38 final String reason; | 37 final String reason; |
39 CodegenBailout(this.node, this.reason); | 38 CodegenBailout(this.node, this.reason); |
40 String get message { | 39 String get message { |
41 return 'bailout${node != null ? " on $node" : ""}: $reason'; | 40 return 'bailout${node != null ? " on $node" : ""}: $reason'; |
42 } | 41 } |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 return buildStaticInvoke( | 265 return buildStaticInvoke( |
267 target, | 266 target, |
268 arguments, | 267 arguments, |
269 sourceInformation: node.sourceInformation); | 268 sourceInformation: node.sourceInformation); |
270 } | 269 } |
271 | 270 |
272 void registerMethodInvoke(tree_ir.InvokeMethod node) { | 271 void registerMethodInvoke(tree_ir.InvokeMethod node) { |
273 Selector selector = node.selector; | 272 Selector selector = node.selector; |
274 TypeMask mask = node.mask; | 273 TypeMask mask = node.mask; |
275 if (selector.isGetter) { | 274 if (selector.isGetter) { |
276 registry.registerDynamicUse(new UniverseSelector(selector, mask)); | 275 registry.registerDynamicUse(new DynamicUse(selector, mask)); |
277 } else if (selector.isSetter) { | 276 } else if (selector.isSetter) { |
278 registry.registerDynamicUse(new UniverseSelector(selector, mask)); | 277 registry.registerDynamicUse(new DynamicUse(selector, mask)); |
279 } else { | 278 } else { |
280 assert(invariant(CURRENT_ELEMENT_SPANNABLE, | 279 assert(invariant(CURRENT_ELEMENT_SPANNABLE, |
281 selector.isCall || selector.isOperator || | 280 selector.isCall || selector.isOperator || |
282 selector.isIndex || selector.isIndexSet, | 281 selector.isIndex || selector.isIndexSet, |
283 message: 'unexpected kind ${selector.kind}')); | 282 message: 'unexpected kind ${selector.kind}')); |
284 // TODO(sigurdm): We should find a better place to register the call. | 283 // TODO(sigurdm): We should find a better place to register the call. |
285 Selector call = new Selector.callClosureFrom(selector); | 284 Selector call = new Selector.callClosureFrom(selector); |
286 registry.registerDynamicUse(new UniverseSelector(call, null)); | 285 registry.registerDynamicUse(new DynamicUse(call, null)); |
287 registry.registerDynamicUse(new UniverseSelector(selector, mask)); | 286 registry.registerDynamicUse(new DynamicUse(selector, mask)); |
288 } | 287 } |
289 } | 288 } |
290 | 289 |
291 @override | 290 @override |
292 js.Expression visitInvokeMethod(tree_ir.InvokeMethod node) { | 291 js.Expression visitInvokeMethod(tree_ir.InvokeMethod node) { |
293 registerMethodInvoke(node); | 292 registerMethodInvoke(node); |
294 return js.propertyCall(visitExpression(node.receiver), | 293 return js.propertyCall(visitExpression(node.receiver), |
295 glue.invocationName(node.selector), | 294 glue.invocationName(node.selector), |
296 visitExpressionList(node.arguments)) | 295 visitExpressionList(node.arguments)) |
297 .withSourceInformation(node.sourceInformation); | 296 .withSourceInformation(node.sourceInformation); |
(...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1080 void registerDefaultParameterValues(ExecutableElement element) { | 1079 void registerDefaultParameterValues(ExecutableElement element) { |
1081 if (element is! FunctionElement) return; | 1080 if (element is! FunctionElement) return; |
1082 FunctionElement function = element; | 1081 FunctionElement function = element; |
1083 if (function.isStatic) return; // Defaults are inlined at call sites. | 1082 if (function.isStatic) return; // Defaults are inlined at call sites. |
1084 function.functionSignature.forEachOptionalParameter((param) { | 1083 function.functionSignature.forEachOptionalParameter((param) { |
1085 ConstantValue constant = glue.getDefaultParameterValue(param); | 1084 ConstantValue constant = glue.getDefaultParameterValue(param); |
1086 registry.registerCompileTimeConstant(constant); | 1085 registry.registerCompileTimeConstant(constant); |
1087 }); | 1086 }); |
1088 } | 1087 } |
1089 } | 1088 } |
OLD | NEW |