| 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 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 | 129 |
| 130 @override | 130 @override |
| 131 HGraph build(CodegenWorkItem work, ClosedWorld closedWorld) { | 131 HGraph build(CodegenWorkItem work, ClosedWorld closedWorld) { |
| 132 KernelSsaBuilder builder = new KernelSsaBuilder( | 132 KernelSsaBuilder builder = new KernelSsaBuilder( |
| 133 work.element, | 133 work.element, |
| 134 work.element.enclosingClass, | 134 work.element.enclosingClass, |
| 135 _elementMap.getMemberNode(work.element), | 135 _elementMap.getMemberNode(work.element), |
| 136 _compiler, | 136 _compiler, |
| 137 _elementMap, | 137 _elementMap, |
| 138 new KernelToTypeInferenceMapImpl(closedWorld), | 138 new KernelToTypeInferenceMapImpl(closedWorld), |
| 139 null, | 139 new KernelToLocalsMapImpl(work.element), |
| 140 closedWorld, | 140 closedWorld, |
| 141 work.registry, | 141 work.registry, |
| 142 // TODO(johnniwinther): Support these: | 142 // TODO(johnniwinther): Support these: |
| 143 const KernelClosureClassMaps(), | 143 const KernelClosureClassMaps(), |
| 144 const SourceInformationBuilder(), | 144 const SourceInformationBuilder(), |
| 145 null, // Function node used as capture scope id. | 145 null, // Function node used as capture scope id. |
| 146 targetIsConstructorBody: false); | 146 targetIsConstructorBody: false); |
| 147 return builder.build(); | 147 return builder.build(); |
| 148 } | 148 } |
| 149 } | 149 } |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 return _closedWorld.commonMasks.dynamicType; | 222 return _closedWorld.commonMasks.dynamicType; |
| 223 } | 223 } |
| 224 | 224 |
| 225 @override | 225 @override |
| 226 TypeMask getReturnTypeOf(FunctionEntity function) { | 226 TypeMask getReturnTypeOf(FunctionEntity function) { |
| 227 return _closedWorld.commonMasks.dynamicType; | 227 return _closedWorld.commonMasks.dynamicType; |
| 228 } | 228 } |
| 229 } | 229 } |
| 230 | 230 |
| 231 class KernelToLocalsMapImpl implements KernelToLocalsMap { | 231 class KernelToLocalsMapImpl implements KernelToLocalsMap { |
| 232 @override | 232 final List<MemberEntity> _members = <MemberEntity>[]; |
| 233 void enterInlinedMember(MemberEntity member) {} | 233 Map<ir.VariableDeclaration, KLocal> _map = <ir.VariableDeclaration, KLocal>{}; |
| 234 |
| 235 MemberEntity get currentMember => _members.last; |
| 236 |
| 237 KernelToLocalsMapImpl(MemberEntity member) { |
| 238 _members.add(member); |
| 239 } |
| 234 | 240 |
| 235 @override | 241 @override |
| 236 void leaveInlinedMember(MemberEntity member) {} | 242 void enterInlinedMember(MemberEntity member) { |
| 243 _members.add(member); |
| 244 } |
| 245 |
| 246 @override |
| 247 void leaveInlinedMember(MemberEntity member) { |
| 248 assert(member == currentMember); |
| 249 _members.removeLast(); |
| 250 } |
| 237 | 251 |
| 238 @override | 252 @override |
| 239 JumpTarget getJumpTarget(ir.TreeNode node, {bool isContinueTarget: false}) { | 253 JumpTarget getJumpTarget(ir.TreeNode node, {bool isContinueTarget: false}) { |
| 240 throw new UnimplementedError('KernelToLocalsMapImpl.getJumpTarget'); | 254 throw new UnimplementedError('KernelToLocalsMapImpl.getJumpTarget'); |
| 241 } | 255 } |
| 242 | 256 |
| 243 @override | 257 @override |
| 244 Local getLocal(ir.VariableDeclaration node) { | 258 Local getLocal(ir.VariableDeclaration node) { |
| 245 throw new UnimplementedError('KernelToLocalsMapImpl.getLocal'); | 259 return _map.putIfAbsent(node, () { |
| 260 return new KLocal(node.name, currentMember); |
| 261 }); |
| 246 } | 262 } |
| 247 } | 263 } |
| 248 | 264 |
| 265 class KLocal implements Local { |
| 266 final String name; |
| 267 final MemberEntity memberContext; |
| 268 |
| 269 KLocal(this.name, this.memberContext); |
| 270 |
| 271 @override |
| 272 Entity get executableContext => memberContext; |
| 273 } |
| 274 |
| 249 /// TODO(johnniwinther,efortuna): Implement this. | 275 /// TODO(johnniwinther,efortuna): Implement this. |
| 250 class KernelClosureClassMaps implements ClosureClassMaps { | 276 class KernelClosureClassMaps implements ClosureClassMaps { |
| 251 const KernelClosureClassMaps(); | 277 const KernelClosureClassMaps(); |
| 252 | 278 |
| 253 @override | 279 @override |
| 254 ClosureClassMap getLocalFunctionMap(Local localFunction) { | 280 ClosureClassMap getLocalFunctionMap(Local localFunction) { |
| 255 return new ClosureClassMap(null, null, null, null); | 281 return new ClosureClassMap(null, null, null, null); |
| 256 } | 282 } |
| 257 | 283 |
| 258 @override | 284 @override |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 Iterable<ClassEntity> sortClasses(Iterable<ClassEntity> classes) { | 327 Iterable<ClassEntity> sortClasses(Iterable<ClassEntity> classes) { |
| 302 return classes.toList() | 328 return classes.toList() |
| 303 ..sort((ClassEntity a, ClassEntity b) { | 329 ..sort((ClassEntity a, ClassEntity b) { |
| 304 int r = _compareLibraries(a.library, b.library); | 330 int r = _compareLibraries(a.library, b.library); |
| 305 if (r != 0) return r; | 331 if (r != 0) return r; |
| 306 return _compareNodes( | 332 return _compareNodes( |
| 307 a, elementMap.getClassNode(a), b, elementMap.getClassNode(b)); | 333 a, elementMap.getClassNode(a), b, elementMap.getClassNode(b)); |
| 308 }); | 334 }); |
| 309 } | 335 } |
| 310 } | 336 } |
| OLD | NEW |