| OLD | NEW |
| 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 dart2js.js_backend.element_strategy; | 5 library dart2js.js_backend.element_strategy; |
| 6 | 6 |
| 7 import '../backend_strategy.dart'; | 7 import '../backend_strategy.dart'; |
| 8 import '../common.dart'; | 8 import '../common.dart'; |
| 9 import '../common/codegen.dart'; | 9 import '../common/codegen.dart'; |
| 10 import '../common/work.dart'; | 10 import '../common/work.dart'; |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 class ElementCodegenWorkItemBuilder extends WorkItemBuilder { | 72 class ElementCodegenWorkItemBuilder extends WorkItemBuilder { |
| 73 final JavaScriptBackend _backend; | 73 final JavaScriptBackend _backend; |
| 74 final ClosedWorld _closedWorld; | 74 final ClosedWorld _closedWorld; |
| 75 final CompilerOptions _options; | 75 final CompilerOptions _options; |
| 76 | 76 |
| 77 ElementCodegenWorkItemBuilder( | 77 ElementCodegenWorkItemBuilder( |
| 78 this._backend, this._closedWorld, this._options); | 78 this._backend, this._closedWorld, this._options); |
| 79 | 79 |
| 80 @override | 80 @override |
| 81 WorkItem createWorkItem(MemberElement element) { | 81 WorkItem createWorkItem(MemberElement element) { |
| 82 assert(invariant(element, element.isDeclaration)); | 82 assert(element.isDeclaration, failedAt(element)); |
| 83 // Don't generate code for foreign elements. | 83 // Don't generate code for foreign elements. |
| 84 if (_backend.isForeign(element)) return null; | 84 if (_backend.isForeign(element)) return null; |
| 85 if (element.isAbstract) return null; | 85 if (element.isAbstract) return null; |
| 86 | 86 |
| 87 // Codegen inlines field initializers. It only needs to generate | 87 // Codegen inlines field initializers. It only needs to generate |
| 88 // code for checked setters. | 88 // code for checked setters. |
| 89 if (element.isField && element.isInstanceMember) { | 89 if (element.isField && element.isInstanceMember) { |
| 90 if (!_options.enableTypeAssertions || | 90 if (!_options.enableTypeAssertions || |
| 91 element.enclosingElement.isClosure) { | 91 element.enclosingElement.isClosure) { |
| 92 return null; | 92 return null; |
| 93 } | 93 } |
| 94 } | 94 } |
| 95 return new ElementCodegenWorkItem(_backend, _closedWorld, element); | 95 return new ElementCodegenWorkItem(_backend, _closedWorld, element); |
| 96 } | 96 } |
| 97 } | 97 } |
| 98 | 98 |
| 99 class ElementCodegenWorkItem extends CodegenWorkItem { | 99 class ElementCodegenWorkItem extends CodegenWorkItem { |
| 100 CodegenRegistry registry; | 100 CodegenRegistry registry; |
| 101 final ResolvedAst resolvedAst; | 101 final ResolvedAst resolvedAst; |
| 102 final JavaScriptBackend _backend; | 102 final JavaScriptBackend _backend; |
| 103 final ClosedWorld _closedWorld; | 103 final ClosedWorld _closedWorld; |
| 104 | 104 |
| 105 factory ElementCodegenWorkItem(JavaScriptBackend backend, | 105 factory ElementCodegenWorkItem(JavaScriptBackend backend, |
| 106 ClosedWorld closedWorld, MemberElement element) { | 106 ClosedWorld closedWorld, MemberElement element) { |
| 107 // If this assertion fails, the resolution callbacks of the backend may be | 107 // If this assertion fails, the resolution callbacks of the backend may be |
| 108 // missing call of form registry.registerXXX. Alternatively, the code | 108 // missing call of form registry.registerXXX. Alternatively, the code |
| 109 // generation could spuriously be adding dependencies on things we know we | 109 // generation could spuriously be adding dependencies on things we know we |
| 110 // don't need. | 110 // don't need. |
| 111 assert(invariant(element, element.hasResolvedAst, | 111 assert(element.hasResolvedAst, |
| 112 message: "$element has no resolved ast.")); | 112 failedAt(element, "$element has no resolved ast.")); |
| 113 ResolvedAst resolvedAst = element.resolvedAst; | 113 ResolvedAst resolvedAst = element.resolvedAst; |
| 114 return new ElementCodegenWorkItem.internal( | 114 return new ElementCodegenWorkItem.internal( |
| 115 resolvedAst, backend, closedWorld); | 115 resolvedAst, backend, closedWorld); |
| 116 } | 116 } |
| 117 | 117 |
| 118 ElementCodegenWorkItem.internal( | 118 ElementCodegenWorkItem.internal( |
| 119 this.resolvedAst, this._backend, this._closedWorld); | 119 this.resolvedAst, this._backend, this._closedWorld); |
| 120 | 120 |
| 121 MemberElement get element => resolvedAst.element; | 121 MemberElement get element => resolvedAst.element; |
| 122 | 122 |
| 123 WorldImpact run() { | 123 WorldImpact run() { |
| 124 registry = new CodegenRegistry(element); | 124 registry = new CodegenRegistry(element); |
| 125 return _backend.codegen(this, _closedWorld); | 125 return _backend.codegen(this, _closedWorld); |
| 126 } | 126 } |
| 127 | 127 |
| 128 String toString() => 'CodegenWorkItem(${resolvedAst.element})'; | 128 String toString() => 'CodegenWorkItem(${resolvedAst.element})'; |
| 129 } | 129 } |
| OLD | NEW |