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:kernel/ast.dart' as ir; | 5 import 'package:kernel/ast.dart' as ir; |
6 | 6 |
7 import '../closure.dart'; | 7 import '../closure.dart'; |
8 import '../common.dart'; | 8 import '../common.dart'; |
9 import '../constants/values.dart'; | 9 import '../constants/values.dart'; |
10 import '../common_elements.dart'; | 10 import '../common_elements.dart'; |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 ir.Node get node; | 237 ir.Node get node; |
238 | 238 |
239 /// The canonical location of [member]. This is used for sorting the members | 239 /// The canonical location of [member]. This is used for sorting the members |
240 /// in the emitted code. | 240 /// in the emitted code. |
241 SourceSpan get location; | 241 SourceSpan get location; |
242 } | 242 } |
243 | 243 |
244 enum ClassKind { | 244 enum ClassKind { |
245 regular, | 245 regular, |
246 closure, | 246 closure, |
| 247 // TODO(efortuna, johnniwinther): Container is not a class, but is |
| 248 // masquerading as one currently for consistency with the old element model. |
| 249 container, |
247 } | 250 } |
248 | 251 |
249 /// A member directly defined by its [ir.Member] node. | 252 /// A member directly defined by its [ir.Member] node. |
250 class RegularMemberDefinition implements MemberDefinition { | 253 class RegularMemberDefinition implements MemberDefinition { |
251 final MemberEntity member; | 254 final MemberEntity member; |
252 final ir.Member node; | 255 final ir.Member node; |
253 | 256 |
254 RegularMemberDefinition(this.member, this.node); | 257 RegularMemberDefinition(this.member, this.node); |
255 | 258 |
256 SourceSpan get location => computeSourceSpanFromTreeNode(node); | 259 SourceSpan get location => computeSourceSpanFromTreeNode(node); |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
376 MemberEntity get currentMember; | 379 MemberEntity get currentMember; |
377 | 380 |
378 // TODO(johnniwinther): Make these return the [KernelToLocalsMap] to use from | 381 // TODO(johnniwinther): Make these return the [KernelToLocalsMap] to use from |
379 // now on. | 382 // now on. |
380 /// Call to notify that [member] is currently being inlined. | 383 /// Call to notify that [member] is currently being inlined. |
381 void enterInlinedMember(covariant MemberEntity member); | 384 void enterInlinedMember(covariant MemberEntity member); |
382 | 385 |
383 /// Call to notify that [member] is no longer being inlined. | 386 /// Call to notify that [member] is no longer being inlined. |
384 void leaveInlinedMember(covariant MemberEntity member); | 387 void leaveInlinedMember(covariant MemberEntity member); |
385 | 388 |
386 /// Returns the [Local] for [node]. | 389 /// Returns the [Local] for [node]. If [isClosureCallMethod] is true, this |
387 Local getLocalVariable(ir.VariableDeclaration node); | 390 /// gives the locals map permission to also look one scope higher within the |
| 391 /// class for the corresponding local. This can happen in the case of free |
| 392 /// variables involved with a closure class. |
| 393 Local getLocalVariable(ir.VariableDeclaration node, |
| 394 {bool isClosureCallMethod = false}); |
388 | 395 |
389 /// Returns the [Local] corresponding to the [node]. The node must be either | 396 /// Returns the [Local] corresponding to the [node]. The node must be either |
390 /// a [ir.FunctionDeclaration] or [ir.FunctionExpression]. | 397 /// a [ir.FunctionDeclaration] or [ir.FunctionExpression]. |
391 Local getLocalFunction(ir.TreeNode node); | 398 Local getLocalFunction(ir.TreeNode node); |
392 | 399 |
393 /// Returns the [JumpTarget] for the break statement [node]. | 400 /// Returns the [JumpTarget] for the break statement [node]. |
394 JumpTarget getJumpTargetForBreak(ir.BreakStatement node); | 401 JumpTarget getJumpTargetForBreak(ir.BreakStatement node); |
395 | 402 |
396 /// Returns `true` if [node] should generate a `continue` to its [JumpTarget]. | 403 /// Returns `true` if [node] should generate a `continue` to its [JumpTarget]. |
397 bool generateContinueForBreak(ir.BreakStatement node); | 404 bool generateContinueForBreak(ir.BreakStatement node); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 uri = Uri.parse(node.location.file); | 456 uri = Uri.parse(node.location.file); |
450 break; | 457 break; |
451 } | 458 } |
452 node = node.parent; | 459 node = node.parent; |
453 } | 460 } |
454 if (uri != null) { | 461 if (uri != null) { |
455 return new SourceSpan(uri, offset, offset + 1); | 462 return new SourceSpan(uri, offset, offset + 1); |
456 } | 463 } |
457 return null; | 464 return null; |
458 } | 465 } |
OLD | NEW |