| Index: pkg/compiler/lib/src/kernel/element_map.dart
|
| diff --git a/pkg/compiler/lib/src/kernel/element_map.dart b/pkg/compiler/lib/src/kernel/element_map.dart
|
| index dfa6ae18ec7d54f3d1aecd30be165109367538d8..bf1dd2787cdc7cf1cbd139944f1ae8b22f4e6078 100644
|
| --- a/pkg/compiler/lib/src/kernel/element_map.dart
|
| +++ b/pkg/compiler/lib/src/kernel/element_map.dart
|
| @@ -231,7 +231,7 @@ abstract class MemberDefinition {
|
|
|
| /// The canonical location of [member]. This is used for sorting the members
|
| /// in the emitted code.
|
| - ir.Location get location;
|
| + SourceSpan get location;
|
| }
|
|
|
| enum ClassKind {
|
| @@ -246,7 +246,7 @@ class RegularMemberDefinition implements MemberDefinition {
|
|
|
| RegularMemberDefinition(this.member, this.node);
|
|
|
| - ir.Location get location => node.location;
|
| + SourceSpan get location => computeSourceSpanFromTreeNode(node);
|
|
|
| MemberKind get kind => MemberKind.regular;
|
|
|
| @@ -262,7 +262,7 @@ class SpecialMemberDefinition implements MemberDefinition {
|
|
|
| SpecialMemberDefinition(this.member, this.node, this.kind);
|
|
|
| - ir.Location get location => node.location;
|
| + SourceSpan get location => computeSourceSpanFromTreeNode(node);
|
|
|
| String toString() => 'SpecialMemberDefinition(kind:$kind,member:$member,'
|
| 'node:$node,location:$location)';
|
| @@ -281,7 +281,7 @@ abstract class ClassDefinition {
|
|
|
| /// The canonical location of [cls]. This is used for sorting the classes
|
| /// in the emitted code.
|
| - ir.Location get location;
|
| + SourceSpan get location;
|
| }
|
|
|
| /// A class directly defined by its [ir.Class] node.
|
| @@ -291,7 +291,7 @@ class RegularClassDefinition implements ClassDefinition {
|
|
|
| RegularClassDefinition(this.cls, this.node);
|
|
|
| - ir.Location get location => node.location;
|
| + SourceSpan get location => computeSourceSpanFromTreeNode(node);
|
|
|
| ClassKind get kind => ClassKind.regular;
|
|
|
| @@ -431,3 +431,21 @@ abstract class KernelToLocalsMap {
|
| int namedOrdering(ir.VariableDeclaration a, ir.VariableDeclaration b) {
|
| return a.name.compareTo(b.name);
|
| }
|
| +
|
| +SourceSpan computeSourceSpanFromTreeNode(ir.TreeNode node) {
|
| + // TODO(johnniwinther): Use [ir.Location] directly as a [SourceSpan].
|
| + Uri uri;
|
| + int offset;
|
| + while (node != null) {
|
| + if (node.fileOffset != ir.TreeNode.noOffset) {
|
| + offset = node.fileOffset;
|
| + uri = Uri.parse(node.location.file);
|
| + break;
|
| + }
|
| + node = node.parent;
|
| + }
|
| + if (uri != null) {
|
| + return new SourceSpan(uri, offset, offset + 1);
|
| + }
|
| + return null;
|
| +}
|
|
|