| 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.kernel.backend_strategy; | 5 library dart2js.kernel.backend_strategy; |
| 6 | 6 |
| 7 import 'package:kernel/ast.dart' as ir; | 7 import 'package:kernel/ast.dart' as ir; |
| 8 | 8 |
| 9 import '../backend_strategy.dart'; | 9 import '../backend_strategy.dart'; |
| 10 import '../closure.dart'; | 10 import '../closure.dart'; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 import 'element_map_impl.dart'; | 37 import 'element_map_impl.dart'; |
| 38 import 'kernel_strategy.dart'; | 38 import 'kernel_strategy.dart'; |
| 39 | 39 |
| 40 /// A backend strategy based on Kernel IR nodes. | 40 /// A backend strategy based on Kernel IR nodes. |
| 41 abstract class KernelBackendStrategy implements BackendStrategy { | 41 abstract class KernelBackendStrategy implements BackendStrategy { |
| 42 KernelToElementMap get elementMap; | 42 KernelToElementMap get elementMap; |
| 43 GlobalLocalsMap get globalLocalsMapForTesting; | 43 GlobalLocalsMap get globalLocalsMapForTesting; |
| 44 } | 44 } |
| 45 | 45 |
| 46 /// Backend strategy that uses the kernel elements as the backend model. | 46 /// Backend strategy that uses the kernel elements as the backend model. |
| 47 // TODO(johnniwinther): Replace this with a strategy based on the J-element | 47 // TODO(redemption): Replace this with a strategy based on the J-element |
| 48 // model. | 48 // model. |
| 49 class KernelBackendStrategyImpl implements KernelBackendStrategy { | 49 class KernelBackendStrategyImpl implements KernelBackendStrategy { |
| 50 final Compiler _compiler; | 50 final Compiler _compiler; |
| 51 Sorter _sorter; | 51 Sorter _sorter; |
| 52 ClosureConversionTask _closureDataLookup; | 52 ClosureConversionTask _closureDataLookup; |
| 53 final GlobalLocalsMap _globalLocalsMap = new GlobalLocalsMap(); | 53 final GlobalLocalsMap _globalLocalsMap = new GlobalLocalsMap(); |
| 54 | 54 |
| 55 KernelBackendStrategyImpl(this._compiler); | 55 KernelBackendStrategyImpl(this._compiler); |
| 56 | 56 |
| 57 KernelToElementMap get elementMap { | 57 KernelToElementMap get elementMap { |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 work.element.enclosingClass, | 166 work.element.enclosingClass, |
| 167 _elementMap.getMemberNode(work.element), | 167 _elementMap.getMemberNode(work.element), |
| 168 _compiler, | 168 _compiler, |
| 169 _elementMap, | 169 _elementMap, |
| 170 new KernelToTypeInferenceMapImpl(closedWorld), | 170 new KernelToTypeInferenceMapImpl(closedWorld), |
| 171 localsMap, | 171 localsMap, |
| 172 closedWorld, | 172 closedWorld, |
| 173 _compiler.codegenWorldBuilder, | 173 _compiler.codegenWorldBuilder, |
| 174 work.registry, | 174 work.registry, |
| 175 _compiler.backendStrategy.closureDataLookup, | 175 _compiler.backendStrategy.closureDataLookup, |
| 176 // TODO(johnniwinther): Support these: | 176 // TODO(redemption): Support these: |
| 177 const SourceInformationBuilder(), | 177 const SourceInformationBuilder(), |
| 178 null, // Function node used as capture scope id. | 178 null, // Function node used as capture scope id. |
| 179 targetIsConstructorBody: false); | 179 targetIsConstructorBody: false); |
| 180 return builder.build(); | 180 return builder.build(); |
| 181 } | 181 } |
| 182 } | 182 } |
| 183 | 183 |
| 184 class KernelToTypeInferenceMapImpl implements KernelToTypeInferenceMap { | 184 class KernelToTypeInferenceMapImpl implements KernelToTypeInferenceMap { |
| 185 final ClosedWorld _closedWorld; | 185 final ClosedWorld _closedWorld; |
| 186 | 186 |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 _members.add(member); | 291 _members.add(member); |
| 292 } | 292 } |
| 293 | 293 |
| 294 @override | 294 @override |
| 295 void leaveInlinedMember(MemberEntity member) { | 295 void leaveInlinedMember(MemberEntity member) { |
| 296 assert(member == currentMember); | 296 assert(member == currentMember); |
| 297 _members.removeLast(); | 297 _members.removeLast(); |
| 298 } | 298 } |
| 299 | 299 |
| 300 @override | 300 @override |
| 301 JumpTarget getJumpTarget(ir.TreeNode node, {bool isContinueTarget: false}) { | 301 JumpTarget getJumpTargetForBreak(ir.BreakStatement node) { |
| 302 // TODO(johnniwinther): Support jump targets. | 302 throw new UnimplementedError('KernelToLocalsMapImpl.getJumpTargetForBreak'); |
| 303 } |
| 304 |
| 305 @override |
| 306 JumpTarget getJumpTargetForContinueSwitch(ir.ContinueSwitchStatement node) { |
| 307 throw new UnimplementedError( |
| 308 'KernelToLocalsMapImpl.getJumpTargetForContinueSwitch'); |
| 309 } |
| 310 |
| 311 @override |
| 312 JumpTarget getJumpTargetForSwitchCase(ir.SwitchCase node) { |
| 313 throw new UnimplementedError( |
| 314 'KernelToLocalsMapImpl.getJumpTargetForSwitchCase'); |
| 315 } |
| 316 |
| 317 @override |
| 318 JumpTarget getJumpTargetForDo(ir.DoStatement node) { |
| 319 // TODO(redemption): Support do statement as jump target. |
| 303 return null; | 320 return null; |
| 304 } | 321 } |
| 305 | 322 |
| 323 @override |
| 324 JumpTarget getJumpTargetForLabel(ir.LabeledStatement node) { |
| 325 throw new UnimplementedError('KernelToLocalsMapImpl.getJumpTargetForLabel'); |
| 326 } |
| 327 |
| 328 @override |
| 329 JumpTarget getJumpTargetForSwitch(ir.SwitchStatement node) { |
| 330 throw new UnimplementedError( |
| 331 'KernelToLocalsMapImpl.getJumpTargetForSwitch'); |
| 332 } |
| 333 |
| 334 @override |
| 335 JumpTarget getJumpTargetForFor(ir.ForStatement node) { |
| 336 // TODO(redemption): Support for statement as jump target. |
| 337 return null; |
| 338 } |
| 339 |
| 340 @override |
| 341 JumpTarget getJumpTargetForForIn(ir.ForInStatement node) { |
| 342 // TODO(redemption): Support for-in statement as jump target. |
| 343 return null; |
| 344 } |
| 345 |
| 346 @override |
| 347 JumpTarget getJumpTargetForWhile(ir.WhileStatement node) { |
| 348 // TODO(redemption): Support while statement as jump target. |
| 349 return null; |
| 350 } |
| 351 |
| 306 @override | 352 @override |
| 307 Local getLocal(ir.VariableDeclaration node) { | 353 Local getLocal(ir.VariableDeclaration node) { |
| 308 return _map.putIfAbsent(node, () { | 354 return _map.putIfAbsent(node, () { |
| 309 return new KLocal(node.name, currentMember); | 355 return new KLocal(node.name, currentMember); |
| 310 }); | 356 }); |
| 311 } | 357 } |
| 312 | 358 |
| 313 @override | 359 @override |
| 314 LoopClosureRepresentationInfo getClosureRepresentationInfoForLoop( | 360 LoopClosureRepresentationInfo getClosureRepresentationInfoForLoop( |
| 315 ClosureDataLookup closureLookup, ir.TreeNode node) { | 361 ClosureDataLookup closureLookup, ir.TreeNode node) { |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 Iterable<ClassEntity> sortClasses(Iterable<ClassEntity> classes) { | 427 Iterable<ClassEntity> sortClasses(Iterable<ClassEntity> classes) { |
| 382 return classes.toList() | 428 return classes.toList() |
| 383 ..sort((ClassEntity a, ClassEntity b) { | 429 ..sort((ClassEntity a, ClassEntity b) { |
| 384 int r = _compareLibraries(a.library, b.library); | 430 int r = _compareLibraries(a.library, b.library); |
| 385 if (r != 0) return r; | 431 if (r != 0) return r; |
| 386 return _compareNodes( | 432 return _compareNodes( |
| 387 a, elementMap.getClassNode(a), b, elementMap.getClassNode(b)); | 433 a, elementMap.getClassNode(a), b, elementMap.getClassNode(b)); |
| 388 }); | 434 }); |
| 389 } | 435 } |
| 390 } | 436 } |
| OLD | NEW |