| 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 import 'dart:io'; | 5 import 'dart:io'; |
| 6 import 'package:async_helper/async_helper.dart'; | 6 import 'package:async_helper/async_helper.dart'; |
| 7 import 'package:compiler/src/common.dart'; | 7 import 'package:compiler/src/common.dart'; |
| 8 import 'package:compiler/src/compiler.dart'; | 8 import 'package:compiler/src/compiler.dart'; |
| 9 import 'package:compiler/src/diagnostics/diagnostic_listener.dart'; | 9 import 'package:compiler/src/diagnostics/diagnostic_listener.dart'; |
| 10 import 'package:compiler/src/elements/elements.dart'; | 10 import 'package:compiler/src/elements/elements.dart'; |
| 11 import 'package:compiler/src/elements/entities.dart'; | 11 import 'package:compiler/src/elements/entities.dart'; |
| 12 import 'package:compiler/src/elements/jumps.dart'; | 12 import 'package:compiler/src/elements/jumps.dart'; |
| 13 import 'package:compiler/src/js_model/locals.dart'; | 13 import 'package:compiler/src/js_model/locals.dart'; |
| 14 import 'package:compiler/src/kernel/element_map.dart'; | 14 import 'package:compiler/src/kernel/element_map.dart'; |
| 15 import 'package:compiler/src/kernel/kernel_backend_strategy.dart'; | 15 import 'package:compiler/src/kernel/kernel_backend_strategy.dart'; |
| 16 import 'package:compiler/src/tree/nodes.dart' as ast; | 16 import 'package:compiler/src/tree/nodes.dart' as ast; |
| 17 import '../equivalence/id_equivalence.dart'; | 17 import '../equivalence/id_equivalence.dart'; |
| 18 import '../equivalence/id_equivalence_helper.dart'; | 18 import '../equivalence/id_equivalence_helper.dart'; |
| 19 import 'package:kernel/ast.dart' as ir; | 19 import 'package:kernel/ast.dart' as ir; |
| 20 | 20 |
| 21 main() { | 21 main() { |
| 22 asyncTest(() async { | 22 asyncTest(() async { |
| 23 Directory dataDir = new Directory.fromUri(Platform.script.resolve('data')); | 23 Directory dataDir = new Directory.fromUri(Platform.script.resolve('data')); |
| 24 await for (FileSystemEntity entity in dataDir.list()) { | 24 await checkTests(dataDir, computeJumpsData, computeKernelJumpsData); |
| 25 print('----------------------------------------------------------------'); | |
| 26 print('Checking ${entity.uri}'); | |
| 27 print('----------------------------------------------------------------'); | |
| 28 String annotatedCode = await new File.fromUri(entity.uri).readAsString(); | |
| 29 print('--from source---------------------------------------------------'); | |
| 30 await checkCode(annotatedCode, computeJumpsData, compileFromSource); | |
| 31 print('--from dill-----------------------------------------------------'); | |
| 32 await checkCode(annotatedCode, computeKernelJumpsData, compileFromDill); | |
| 33 } | |
| 34 }); | 25 }); |
| 35 } | 26 } |
| 36 | 27 |
| 37 /// Compute closure data mapping for [_member] as a [MemberElement]. | 28 /// Compute closure data mapping for [_member] as a [MemberElement]. |
| 38 /// | 29 /// |
| 39 /// Fills [actualMap] with the data and [sourceSpanMap] with the source spans | 30 /// Fills [actualMap] with the data and [sourceSpanMap] with the source spans |
| 40 /// for the data origin. | 31 /// for the data origin. |
| 41 void computeJumpsData( | 32 void computeJumpsData( |
| 42 Compiler compiler, MemberEntity _member, Map<Id, ActualData> actualMap, | 33 Compiler compiler, MemberEntity _member, Map<Id, ActualData> actualMap, |
| 43 {bool verbose: false}) { | 34 {bool verbose: false}) { |
| 44 MemberElement member = _member; | 35 MemberElement member = _member; |
| 45 new JumpsAstComputer(compiler.reporter, actualMap, member.resolvedAst).run(); | 36 new JumpsAstComputer(compiler.reporter, actualMap, member.resolvedAst).run(); |
| 46 } | 37 } |
| 47 | 38 |
| 48 /// Compute closure data mapping for [member] as a kernel based element. | 39 /// Compute closure data mapping for [member] as a kernel based element. |
| 49 /// | 40 /// |
| 50 /// Fills [actualMap] with the data and [sourceSpanMap] with the source spans | 41 /// Fills [actualMap] with the data and [sourceSpanMap] with the source spans |
| 51 /// for the data origin. | 42 /// for the data origin. |
| 52 void computeKernelJumpsData( | 43 void computeKernelJumpsData( |
| 53 Compiler compiler, MemberEntity member, Map<Id, ActualData> actualMap, | 44 Compiler compiler, MemberEntity member, Map<Id, ActualData> actualMap, |
| 54 {bool verbose: false}) { | 45 {bool verbose: false}) { |
| 55 KernelBackendStrategy backendStrategy = compiler.backendStrategy; | 46 KernelBackendStrategy backendStrategy = compiler.backendStrategy; |
| 56 KernelToElementMapForBuilding elementMap = backendStrategy.elementMap; | 47 KernelToElementMapForBuilding elementMap = backendStrategy.elementMap; |
| 57 GlobalLocalsMap localsMap = backendStrategy.globalLocalsMapForTesting; | 48 GlobalLocalsMap localsMap = backendStrategy.globalLocalsMapForTesting; |
| 58 MemberDefinition definition = elementMap.getMemberDefinition(member); | 49 MemberDefinition definition = elementMap.getMemberDefinition(member); |
| 59 new JumpsIrChecker( | 50 new JumpsIrChecker(actualMap, localsMap.getLocalsMap(member)) |
| 60 actualMap, elementMap, member, localsMap.getLocalsMap(member)) | |
| 61 .run(definition.node); | 51 .run(definition.node); |
| 62 } | 52 } |
| 63 | 53 |
| 64 class TargetData { | 54 class TargetData { |
| 65 final int index; | 55 final int index; |
| 66 final NodeId id; | 56 final NodeId id; |
| 67 final SourceSpan sourceSpan; | 57 final SourceSpan sourceSpan; |
| 68 final JumpTarget target; | 58 final JumpTarget target; |
| 69 | 59 |
| 70 TargetData(this.index, this.id, this.sourceSpan, this.target); | 60 TargetData(this.index, this.id, this.sourceSpan, this.target); |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 SourceSpan sourceSpan = computeSourceSpan(node); | 147 SourceSpan sourceSpan = computeSourceSpan(node); |
| 158 gotos.add(new GotoData(id, sourceSpan, target)); | 148 gotos.add(new GotoData(id, sourceSpan, target)); |
| 159 super.visitGotoStatement(node); | 149 super.visitGotoStatement(node); |
| 160 } | 150 } |
| 161 } | 151 } |
| 162 | 152 |
| 163 /// Kernel IR visitor for computing jump data. | 153 /// Kernel IR visitor for computing jump data. |
| 164 class JumpsIrChecker extends IrDataExtractor with JumpsMixin { | 154 class JumpsIrChecker extends IrDataExtractor with JumpsMixin { |
| 165 final KernelToLocalsMap _localsMap; | 155 final KernelToLocalsMap _localsMap; |
| 166 | 156 |
| 167 JumpsIrChecker(Map<Id, ActualData> actualMap, KernelToElementMap elementMap, | 157 JumpsIrChecker(Map<Id, ActualData> actualMap, this._localsMap) |
| 168 MemberEntity member, this._localsMap) | |
| 169 : super(actualMap); | 158 : super(actualMap); |
| 170 | 159 |
| 171 void run(ir.Node root) { | 160 void run(ir.Node root) { |
| 172 super.run(root); | 161 super.run(root); |
| 173 processData(); | 162 processData(); |
| 174 } | 163 } |
| 175 | 164 |
| 176 @override | 165 @override |
| 177 String computeNodeValue(ir.Node node) { | 166 String computeNodeValue(ir.Node node) { |
| 178 // Node values are computed post-visit in [processData]. | 167 // Node values are computed post-visit in [processData]. |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 | 203 |
| 215 visitBreakStatement(ir.BreakStatement node) { | 204 visitBreakStatement(ir.BreakStatement node) { |
| 216 JumpTarget target = _localsMap.getJumpTargetForBreak(node); | 205 JumpTarget target = _localsMap.getJumpTargetForBreak(node); |
| 217 assert(target != null, 'No target for $node.'); | 206 assert(target != null, 'No target for $node.'); |
| 218 NodeId id = computeGotoNodeId(node); | 207 NodeId id = computeGotoNodeId(node); |
| 219 SourceSpan sourceSpan = computeSourceSpan(node); | 208 SourceSpan sourceSpan = computeSourceSpan(node); |
| 220 gotos.add(new GotoData(id, sourceSpan, target)); | 209 gotos.add(new GotoData(id, sourceSpan, target)); |
| 221 super.visitBreakStatement(node); | 210 super.visitBreakStatement(node); |
| 222 } | 211 } |
| 223 } | 212 } |
| OLD | NEW |