Chromium Code Reviews| 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 ast.Node position; | |
| 245 for (ast.Node child in node.labelsAndCases) { | |
| 246 if (child.asCaseMatch() != null) { | |
| 247 ast.CaseMatch caseMatch = child; | |
| 248 position = caseMatch.expression; | |
| 249 break; | |
| 250 } | |
| 251 } | |
| 252 computeForNode(node, computeDefaultNodeId(position)); | |
|
Siggi Cherem (dart-lang)
2017/08/30 20:17:29
use computeSwitchCaseNodeId here?
Johnni Winther
2017/08/31 11:03:36
Done.
| |
| 253 visitNode(node); | |
| 254 } | |
| 226 } | 255 } |
| 227 | 256 |
| 228 /// Abstract IR visitor for computing data corresponding to a node or element, | 257 /// Abstract IR visitor for computing data corresponding to a node or element, |
| 229 /// and record it with a generic [Id] | 258 /// and record it with a generic [Id] |
| 230 abstract class IrDataExtractor extends ir.Visitor { | 259 abstract class IrDataExtractor extends ir.Visitor { |
| 231 final Map<Id, ActualData> actualMap; | 260 final Map<Id, ActualData> actualMap; |
| 232 | 261 |
| 233 void registerValue( | 262 void registerValue( |
| 234 SourceSpan sourceSpan, Id id, String value, Object object) { | 263 SourceSpan sourceSpan, Id id, String value, Object object) { |
| 235 if (value != null) { | 264 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); | 307 Uri.parse(node.location.file), node.fileOffset, node.fileOffset + 1); |
| 279 } | 308 } |
| 280 | 309 |
| 281 NodeId computeDefaultNodeId(ir.TreeNode node) { | 310 NodeId computeDefaultNodeId(ir.TreeNode node) { |
| 282 assert(node.fileOffset != ir.TreeNode.noOffset); | 311 assert(node.fileOffset != ir.TreeNode.noOffset); |
| 283 return new NodeId(node.fileOffset); | 312 return new NodeId(node.fileOffset); |
| 284 } | 313 } |
| 285 | 314 |
| 286 NodeId computeLoopNodeId(ir.TreeNode node) => computeDefaultNodeId(node); | 315 NodeId computeLoopNodeId(ir.TreeNode node) => computeDefaultNodeId(node); |
| 287 NodeId computeGotoNodeId(ir.TreeNode node) => computeDefaultNodeId(node); | 316 NodeId computeGotoNodeId(ir.TreeNode node) => computeDefaultNodeId(node); |
| 317 NodeId computeSwitchNodeId(ir.SwitchStatement node) => | |
| 318 computeDefaultNodeId(node); | |
| 319 NodeId computeSwitchCaseNodeId(ir.SwitchCase node) => | |
| 320 new NodeId(node.expressionOffsets.first); | |
| 288 | 321 |
| 289 void run(ir.Node root) { | 322 void run(ir.Node root) { |
| 290 root.accept(this); | 323 root.accept(this); |
| 291 } | 324 } |
| 292 | 325 |
| 293 defaultNode(ir.Node node) { | 326 defaultNode(ir.Node node) { |
| 294 node.visitChildren(this); | 327 node.visitChildren(this); |
| 295 } | 328 } |
| 296 | 329 |
| 297 defaultMember(ir.Member node) { | 330 defaultMember(ir.Member node) { |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 346 | 379 |
| 347 visitWhileStatement(ir.WhileStatement node) { | 380 visitWhileStatement(ir.WhileStatement node) { |
| 348 computeForNode(node, computeLoopNodeId(node)); | 381 computeForNode(node, computeLoopNodeId(node)); |
| 349 super.visitWhileStatement(node); | 382 super.visitWhileStatement(node); |
| 350 } | 383 } |
| 351 | 384 |
| 352 visitBreakStatement(ir.BreakStatement node) { | 385 visitBreakStatement(ir.BreakStatement node) { |
| 353 computeForNode(node, computeGotoNodeId(node)); | 386 computeForNode(node, computeGotoNodeId(node)); |
| 354 super.visitBreakStatement(node); | 387 super.visitBreakStatement(node); |
| 355 } | 388 } |
| 389 | |
| 390 visitSwitchStatement(ir.SwitchStatement node) { | |
| 391 computeForNode(node, computeSwitchNodeId(node)); | |
| 392 super.visitSwitchStatement(node); | |
| 393 } | |
| 394 | |
| 395 visitSwitchCase(ir.SwitchCase node) { | |
| 396 computeForNode(node, computeSwitchCaseNodeId(node)); | |
| 397 super.visitSwitchCase(node); | |
| 398 } | |
| 399 | |
| 400 visitContinueSwitchStatement(ir.ContinueSwitchStatement node) { | |
| 401 computeForNode(node, computeGotoNodeId(node)); | |
| 402 super.visitContinueSwitchStatement(node); | |
| 403 } | |
| 356 } | 404 } |
| OLD | NEW |