| 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 'package:compiler/src/common.dart'; | 5 import 'package:compiler/src/common.dart'; |
| 6 import 'package:compiler/src/elements/elements.dart'; | 6 import 'package:compiler/src/elements/elements.dart'; |
| 7 import 'package:compiler/src/resolution/access_semantics.dart'; | 7 import 'package:compiler/src/resolution/access_semantics.dart'; |
| 8 import 'package:compiler/src/resolution/send_structure.dart'; | 8 import 'package:compiler/src/resolution/send_structure.dart'; |
| 9 import 'package:compiler/src/resolution/tree_elements.dart'; | 9 import 'package:compiler/src/resolution/tree_elements.dart'; |
| 10 import 'package:compiler/src/tree/nodes.dart' as ast; | 10 import 'package:compiler/src/tree/nodes.dart' as ast; |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 | 150 |
| 151 SourceSpan computeSourceSpan(ast.Node node) { | 151 SourceSpan computeSourceSpan(ast.Node node) { |
| 152 return new SourceSpan(resolvedAst.sourceUri, | 152 return new SourceSpan(resolvedAst.sourceUri, |
| 153 node.getBeginToken().charOffset, node.getEndToken().charEnd); | 153 node.getBeginToken().charOffset, node.getEndToken().charEnd); |
| 154 } | 154 } |
| 155 | 155 |
| 156 NodeId computeDefaultNodeId(ast.Node node) { | 156 NodeId computeDefaultNodeId(ast.Node node) { |
| 157 return new NodeId(node.getBeginToken().charOffset); | 157 return new NodeId(node.getBeginToken().charOffset); |
| 158 } | 158 } |
| 159 | 159 |
| 160 NodeId computeLoopNodeId(ast.Node node) { | 160 NodeId computeLoopNodeId(ast.Node node) => computeDefaultNodeId(node); |
| 161 return new NodeId(node.getBeginToken().charOffset); | |
| 162 } | |
| 163 | 161 |
| 164 NodeId computeGotoNodeId(ast.Node node) { | 162 NodeId computeGotoNodeId(ast.Node node) => computeDefaultNodeId(node); |
| 165 return new NodeId(node.getBeginToken().charOffset); | 163 |
| 164 NodeId computeSwitchNodeId(ast.SwitchStatement node) => |
| 165 computeDefaultNodeId(node); |
| 166 |
| 167 NodeId computeSwitchCaseNodeId(ast.SwitchCase node) { |
| 168 ast.Node position; |
| 169 for (ast.Node child in node.labelsAndCases) { |
| 170 if (child.asCaseMatch() != null) { |
| 171 ast.CaseMatch caseMatch = child; |
| 172 position = caseMatch.expression; |
| 173 break; |
| 174 } |
| 175 } |
| 176 return computeDefaultNodeId(position); |
| 166 } | 177 } |
| 167 | 178 |
| 168 void run() { | 179 void run() { |
| 169 resolvedAst.node.accept(this); | 180 resolvedAst.node.accept(this); |
| 170 } | 181 } |
| 171 | 182 |
| 172 visitNode(ast.Node node) { | 183 visitNode(ast.Node node) { |
| 173 node.visitChildren(this); | 184 node.visitChildren(this); |
| 174 } | 185 } |
| 175 | 186 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 | 227 |
| 217 visitLoop(ast.Loop node) { | 228 visitLoop(ast.Loop node) { |
| 218 computeForNode(node, computeLoopNodeId(node)); | 229 computeForNode(node, computeLoopNodeId(node)); |
| 219 visitNode(node); | 230 visitNode(node); |
| 220 } | 231 } |
| 221 | 232 |
| 222 visitGotoStatement(ast.GotoStatement node) { | 233 visitGotoStatement(ast.GotoStatement node) { |
| 223 computeForNode(node, computeGotoNodeId(node)); | 234 computeForNode(node, computeGotoNodeId(node)); |
| 224 visitNode(node); | 235 visitNode(node); |
| 225 } | 236 } |
| 237 |
| 238 visitSwitchStatement(ast.SwitchStatement node) { |
| 239 computeForNode(node, computeSwitchNodeId(node)); |
| 240 visitNode(node); |
| 241 } |
| 242 |
| 243 visitSwitchCase(ast.SwitchCase node) { |
| 244 computeForNode(node, computeSwitchCaseNodeId(node)); |
| 245 visitNode(node); |
| 246 } |
| 226 } | 247 } |
| 227 | 248 |
| 228 /// Abstract IR visitor for computing data corresponding to a node or element, | 249 /// Abstract IR visitor for computing data corresponding to a node or element, |
| 229 /// and record it with a generic [Id] | 250 /// and record it with a generic [Id] |
| 230 abstract class IrDataExtractor extends ir.Visitor { | 251 abstract class IrDataExtractor extends ir.Visitor { |
| 231 final Map<Id, ActualData> actualMap; | 252 final Map<Id, ActualData> actualMap; |
| 232 | 253 |
| 233 void registerValue( | 254 void registerValue( |
| 234 SourceSpan sourceSpan, Id id, String value, Object object) { | 255 SourceSpan sourceSpan, Id id, String value, Object object) { |
| 235 if (value != null) { | 256 if (value != null) { |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 Uri.parse(node.location.file), node.fileOffset, node.fileOffset + 1); | 299 Uri.parse(node.location.file), node.fileOffset, node.fileOffset + 1); |
| 279 } | 300 } |
| 280 | 301 |
| 281 NodeId computeDefaultNodeId(ir.TreeNode node) { | 302 NodeId computeDefaultNodeId(ir.TreeNode node) { |
| 282 assert(node.fileOffset != ir.TreeNode.noOffset); | 303 assert(node.fileOffset != ir.TreeNode.noOffset); |
| 283 return new NodeId(node.fileOffset); | 304 return new NodeId(node.fileOffset); |
| 284 } | 305 } |
| 285 | 306 |
| 286 NodeId computeLoopNodeId(ir.TreeNode node) => computeDefaultNodeId(node); | 307 NodeId computeLoopNodeId(ir.TreeNode node) => computeDefaultNodeId(node); |
| 287 NodeId computeGotoNodeId(ir.TreeNode node) => computeDefaultNodeId(node); | 308 NodeId computeGotoNodeId(ir.TreeNode node) => computeDefaultNodeId(node); |
| 309 NodeId computeSwitchNodeId(ir.SwitchStatement node) => |
| 310 computeDefaultNodeId(node); |
| 311 NodeId computeSwitchCaseNodeId(ir.SwitchCase node) => |
| 312 new NodeId(node.expressionOffsets.first); |
| 288 | 313 |
| 289 void run(ir.Node root) { | 314 void run(ir.Node root) { |
| 290 root.accept(this); | 315 root.accept(this); |
| 291 } | 316 } |
| 292 | 317 |
| 293 defaultNode(ir.Node node) { | 318 defaultNode(ir.Node node) { |
| 294 node.visitChildren(this); | 319 node.visitChildren(this); |
| 295 } | 320 } |
| 296 | 321 |
| 297 defaultMember(ir.Member node) { | 322 defaultMember(ir.Member node) { |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 | 371 |
| 347 visitWhileStatement(ir.WhileStatement node) { | 372 visitWhileStatement(ir.WhileStatement node) { |
| 348 computeForNode(node, computeLoopNodeId(node)); | 373 computeForNode(node, computeLoopNodeId(node)); |
| 349 super.visitWhileStatement(node); | 374 super.visitWhileStatement(node); |
| 350 } | 375 } |
| 351 | 376 |
| 352 visitBreakStatement(ir.BreakStatement node) { | 377 visitBreakStatement(ir.BreakStatement node) { |
| 353 computeForNode(node, computeGotoNodeId(node)); | 378 computeForNode(node, computeGotoNodeId(node)); |
| 354 super.visitBreakStatement(node); | 379 super.visitBreakStatement(node); |
| 355 } | 380 } |
| 381 |
| 382 visitSwitchStatement(ir.SwitchStatement node) { |
| 383 computeForNode(node, computeSwitchNodeId(node)); |
| 384 super.visitSwitchStatement(node); |
| 385 } |
| 386 |
| 387 visitSwitchCase(ir.SwitchCase node) { |
| 388 computeForNode(node, computeSwitchCaseNodeId(node)); |
| 389 super.visitSwitchCase(node); |
| 390 } |
| 391 |
| 392 visitContinueSwitchStatement(ir.ContinueSwitchStatement node) { |
| 393 computeForNode(node, computeGotoNodeId(node)); |
| 394 super.visitContinueSwitchStatement(node); |
| 395 } |
| 356 } | 396 } |
| OLD | NEW |