| OLD | NEW |
| 1 // Copyright (c) 2015, the Fletch project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Fletch 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.md file. | 3 // BSD-style license that can be found in the LICENSE.md file. |
| 4 | 4 |
| 5 library fletchc.fletch_enqueuer; | 5 library fletchc.fletch_enqueuer; |
| 6 | 6 |
| 7 import 'dart:collection' show | 7 import 'dart:collection' show |
| 8 Queue; | 8 Queue; |
| 9 | 9 |
| 10 import 'package:compiler/src/dart2jslib.dart' show | 10 import 'package:compiler/src/dart2jslib.dart' show |
| 11 CodegenEnqueuer, | 11 CodegenEnqueuer, |
| 12 Compiler, | 12 Compiler, |
| 13 CompilerTask, | 13 CompilerTask, |
| 14 EnqueueTask, | 14 EnqueueTask, |
| 15 ItemCompilationContextCreator, | 15 ItemCompilationContextCreator, |
| 16 QueueFilter, | 16 QueueFilter, |
| 17 Registry, | 17 Registry, |
| 18 ResolutionEnqueuer, | 18 ResolutionEnqueuer, |
| 19 WorkItem, | 19 WorkItem, |
| 20 WorldImpact; | 20 WorldImpact; |
| 21 | 21 |
| 22 import 'package:compiler/src/universe/universe.dart' show | 22 import 'package:compiler/src/universe/universe.dart' show |
| 23 CallStructure, | 23 CallStructure, |
| 24 Selector, |
| 24 Universe, | 25 Universe, |
| 25 UniverseSelector; | 26 UniverseSelector; |
| 26 | 27 |
| 27 import 'package:compiler/src/dart_types.dart' show | 28 import 'package:compiler/src/dart_types.dart' show |
| 28 DartType, | 29 DartType, |
| 29 InterfaceType; | 30 InterfaceType; |
| 30 | 31 |
| 31 import 'package:compiler/src/elements/elements.dart' show | 32 import 'package:compiler/src/elements/elements.dart' show |
| 32 ClassElement, | 33 ClassElement, |
| 33 ConstructorElement, | 34 ConstructorElement, |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 // TODO(ahe): Should be typed [FletchEnqueuer]. | 73 // TODO(ahe): Should be typed [FletchEnqueuer]. |
| 73 final CodegenEnqueuer codegen; | 74 final CodegenEnqueuer codegen; |
| 74 | 75 |
| 75 FletchEnqueueTask(FletchCompilerImplementation compiler) | 76 FletchEnqueueTask(FletchCompilerImplementation compiler) |
| 76 : resolution = new ResolutionEnqueuer( | 77 : resolution = new ResolutionEnqueuer( |
| 77 compiler, compiler.backend.createItemCompilationContext), | 78 compiler, compiler.backend.createItemCompilationContext), |
| 78 codegen = makeCodegenEnqueuer(compiler), | 79 codegen = makeCodegenEnqueuer(compiler), |
| 79 super(compiler) { | 80 super(compiler) { |
| 80 codegen.task = this; | 81 codegen.task = this; |
| 81 resolution.task = this; | 82 resolution.task = this; |
| 82 if (codegen is! TransitionalFletchEnqueuer) { | |
| 83 FletchEnqueuer fletchEnqueuer = codegen; | |
| 84 fletchEnqueuer.dynamicCallEnqueuer.task = this; | |
| 85 } | |
| 86 codegen.nativeEnqueuer = compiler.backend.nativeCodegenEnqueuer(codegen); | 83 codegen.nativeEnqueuer = compiler.backend.nativeCodegenEnqueuer(codegen); |
| 87 | 84 |
| 88 resolution.nativeEnqueuer = | 85 resolution.nativeEnqueuer = |
| 89 compiler.backend.nativeResolutionEnqueuer(resolution); | 86 compiler.backend.nativeResolutionEnqueuer(resolution); |
| 90 } | 87 } |
| 91 | 88 |
| 92 String get name => 'Fletch enqueue'; | 89 String get name => 'Fletch enqueue'; |
| 93 | 90 |
| 94 void forgetElement(Element element) { | 91 void forgetElement(Element element) { |
| 95 resolution.forgetElement(element); | 92 resolution.forgetElement(element); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 queue.add(workItem); | 147 queue.add(workItem); |
| 151 return true; | 148 return true; |
| 152 } | 149 } |
| 153 | 150 |
| 154 DynamicCallEnqueuer get dynamicCallEnqueuer => notImplemented; | 151 DynamicCallEnqueuer get dynamicCallEnqueuer => notImplemented; |
| 155 | 152 |
| 156 Set<Element> get _enqueuedElements => notImplemented; | 153 Set<Element> get _enqueuedElements => notImplemented; |
| 157 | 154 |
| 158 Queue<Element> get _pendingEnqueuedElements => notImplemented; | 155 Queue<Element> get _pendingEnqueuedElements => notImplemented; |
| 159 | 156 |
| 160 void _enqueueElement(Element element) => notImplemented; | 157 void _enqueueElement(element, selector) => notImplemented; |
| 161 } | 158 } |
| 162 | 159 |
| 163 class FletchEnqueuer extends EnqueuerMixin implements CodegenEnqueuer { | 160 class FletchEnqueuer extends EnqueuerMixin implements CodegenEnqueuer { |
| 164 final ItemCompilationContextCreator itemCompilationContextCreator; | 161 final ItemCompilationContextCreator itemCompilationContextCreator; |
| 165 | 162 |
| 166 final FletchCompilerImplementation compiler; | 163 final FletchCompilerImplementation compiler; |
| 167 | 164 |
| 168 final Map generatedCode = new Map(); | 165 final Map generatedCode = new Map(); |
| 169 | 166 |
| 170 bool queueIsClosed = false; | 167 bool queueIsClosed = false; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 dynamicCallEnqueuer.forgetElement(element); | 211 dynamicCallEnqueuer.forgetElement(element); |
| 215 } | 212 } |
| 216 | 213 |
| 217 void registerInstantiatedType( | 214 void registerInstantiatedType( |
| 218 InterfaceType type, | 215 InterfaceType type, |
| 219 Registry registry, | 216 Registry registry, |
| 220 {bool mirrorUsage: false}) { | 217 {bool mirrorUsage: false}) { |
| 221 dynamicCallEnqueuer.registerInstantiatedType(type); | 218 dynamicCallEnqueuer.registerInstantiatedType(type); |
| 222 } | 219 } |
| 223 | 220 |
| 221 // TODO(ahe): Remove this method. |
| 224 void registerStaticUse(Element element) { | 222 void registerStaticUse(Element element) { |
| 225 _enqueueElement(element); | 223 _enqueueElement( |
| 224 element, |
| 225 new UniverseSelector(new Selector.fromElement(element), null)); |
| 226 } | 226 } |
| 227 | 227 |
| 228 // TODO(ahe): Remove this method. |
| 228 void addToWorkList(Element element) { | 229 void addToWorkList(Element element) { |
| 229 _enqueueElement(element); | 230 _enqueueElement( |
| 231 element, new UniverseSelector(new Selector.fromElement(element), null)); |
| 230 } | 232 } |
| 231 | 233 |
| 232 void forEach(void f(WorkItem work)) { | 234 void forEach(void f(WorkItem work)) { |
| 233 do { | 235 do { |
| 234 do { | 236 do { |
| 235 while (!queueIsEmpty) { | 237 while (!queueIsEmpty) { |
| 236 Element element = _pendingEnqueuedElements.removeFirst(); | 238 Element element = _pendingEnqueuedElements.removeFirst(); |
| 237 if (element.isField) continue; | 239 if (element.isField) continue; |
| 238 FletchCodegenWorkItem workItem = new FletchCodegenWorkItem( | 240 FletchCodegenWorkItem workItem = new FletchCodegenWorkItem( |
| 239 compiler, element, itemCompilationContextCreator()); | 241 compiler, element, itemCompilationContextCreator()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 268 } | 270 } |
| 269 | 271 |
| 270 void registerDynamicGetter(UniverseSelector selector) { | 272 void registerDynamicGetter(UniverseSelector selector) { |
| 271 dynamicCallEnqueuer.enqueueSelector(selector); | 273 dynamicCallEnqueuer.enqueueSelector(selector); |
| 272 } | 274 } |
| 273 | 275 |
| 274 void registerDynamicSetter(UniverseSelector selector) { | 276 void registerDynamicSetter(UniverseSelector selector) { |
| 275 dynamicCallEnqueuer.enqueueSelector(selector); | 277 dynamicCallEnqueuer.enqueueSelector(selector); |
| 276 } | 278 } |
| 277 | 279 |
| 278 void _enqueueElement(Element element) { | 280 void _enqueueElement(Element element, UniverseSelector selector) { |
| 279 if (_enqueuedElements.add(element)) { | 281 if (_enqueuedElements.add(element)) { |
| 280 _pendingEnqueuedElements.addLast(element); | 282 _pendingEnqueuedElements.addLast(element); |
| 281 newlyEnqueuedElements.add(element); | 283 newlyEnqueuedElements.add(element); |
| 282 compiler.reportVerboseInfo(element, "enqueued this", forceVerbose: true); | 284 compiler.reportVerboseInfo(element, "enqueued this", forceVerbose: true); |
| 283 } | 285 } |
| 284 } | 286 } |
| 285 } | 287 } |
| OLD | NEW |