Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Side by Side Diff: pkg/compiler/lib/src/kernel/element_map_impl.dart

Issue 2974663002: Compute source spans for IR nodes and J/K-elements (Closed)
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 library dart2js.kernel.element_map; 5 library dart2js.kernel.element_map;
6 6
7 import 'package:kernel/ast.dart' as ir; 7 import 'package:kernel/ast.dart' as ir;
8 8
9 import '../common.dart'; 9 import '../common.dart';
10 import '../common/names.dart' show Identifiers; 10 import '../common/names.dart' show Identifiers;
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 } 118 }
119 119
120 LibraryEntity get _mainLibrary { 120 LibraryEntity get _mainLibrary {
121 return _env.mainMethod != null 121 return _env.mainMethod != null
122 ? _getLibrary(_env.mainMethod.enclosingLibrary) 122 ? _getLibrary(_env.mainMethod.enclosingLibrary)
123 : null; 123 : null;
124 } 124 }
125 125
126 Iterable<LibraryEntity> get _libraries; 126 Iterable<LibraryEntity> get _libraries;
127 127
128 SourceSpan _getSourceSpanFromTreeNode(ir.TreeNode node) {
129 ir.Location location;
Siggi Cherem (dart-lang) 2017/07/07 19:25:02 Let's store here just the Uri, and only use locati
Johnni Winther 2017/07/11 08:06:59 Done.
Siggi Cherem (dart-lang) 2017/07/11 19:04:55 I'd like to use package:source_span for this (mayb
130 int offset;
131 while (node != null) {
132 if (node.fileOffset != ir.TreeNode.noOffset) {
133 offset = node.fileOffset;
134 location = node.location;
135 break;
136 }
137 node = node.parent;
138 }
139 if (location != null) {
140 return new SourceSpan(Uri.parse(location.file), offset, offset + 1);
141 }
142 return null;
143 }
144
145 SourceSpan getSourceSpan(Spannable spannable, Entity currentElement) {
146 SourceSpan fromSpannable(Spannable spannable) {
147 if (spannable is IndexedLibrary &&
148 spannable.libraryIndex < _libraryEnvs.length) {
149 LibraryEnv env = _libraryEnvs[spannable.libraryIndex];
150 return _getSourceSpanFromTreeNode(env.library);
151 } else if (spannable is IndexedClass &&
152 spannable.classIndex < _classEnvs.length) {
153 ClassEnv env = _classEnvs[spannable.classIndex];
154 return _getSourceSpanFromTreeNode(env.cls);
155 } else if (spannable is IndexedMember &&
156 spannable.memberIndex < _memberData.length) {
157 MemberData data = _memberData[spannable.memberIndex];
158 return _getSourceSpanFromTreeNode(data.node);
Siggi Cherem (dart-lang) 2017/07/07 19:25:02 there is not a common interface for these in kerne
Johnni Winther 2017/07/11 08:06:59 They might, but MemberData.node might be a functio
159 }
160 return null;
161 }
162
163 SourceSpan sourceSpan = fromSpannable(spannable);
164 sourceSpan ??= fromSpannable(currentElement);
165 return sourceSpan;
166 }
167
128 LibraryEntity lookupLibrary(Uri uri) { 168 LibraryEntity lookupLibrary(Uri uri) {
129 LibraryEnv libraryEnv = _env.lookupLibrary(uri); 169 LibraryEnv libraryEnv = _env.lookupLibrary(uri);
130 if (libraryEnv == null) return null; 170 if (libraryEnv == null) return null;
131 return _getLibrary(libraryEnv.library, libraryEnv); 171 return _getLibrary(libraryEnv.library, libraryEnv);
132 } 172 }
133 173
134 String _getLibraryName(IndexedLibrary library) { 174 String _getLibraryName(IndexedLibrary library) {
135 assert(checkFamily(library)); 175 assert(checkFamily(library));
136 LibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex]; 176 LibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex];
137 return libraryEnv.library.name ?? ''; 177 return libraryEnv.library.name ?? '';
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 } 569 }
530 570
531 Iterable<InterfaceType> _getInterfaces(IndexedClass cls) { 571 Iterable<InterfaceType> _getInterfaces(IndexedClass cls) {
532 assert(checkFamily(cls)); 572 assert(checkFamily(cls));
533 ClassData data = _classData[cls.classIndex]; 573 ClassData data = _classData[cls.classIndex];
534 _ensureSupertypes(cls, data); 574 _ensureSupertypes(cls, data);
535 return data.interfaces; 575 return data.interfaces;
536 } 576 }
537 577
538 Spannable _getSpannable(MemberEntity member, ir.Node node) { 578 Spannable _getSpannable(MemberEntity member, ir.Node node) {
539 return member; 579 SourceSpan sourceSpan;
580 if (node is ir.TreeNode) {
581 sourceSpan = _getSourceSpanFromTreeNode(node);
582 }
583 sourceSpan ??= getSourceSpan(member, null);
584 return sourceSpan;
540 } 585 }
541 586
542 ir.Member _getMemberNode(covariant IndexedMember member) { 587 ir.Member _getMemberNode(covariant IndexedMember member) {
543 assert(checkFamily(member)); 588 assert(checkFamily(member));
544 return _memberData[member.memberIndex].node; 589 return _memberData[member.memberIndex].node;
545 } 590 }
546 591
547 ir.Class _getClassNode(covariant IndexedClass cls) { 592 ir.Class _getClassNode(covariant IndexedClass cls) {
548 assert(checkFamily(cls)); 593 assert(checkFamily(cls));
549 return _classEnvs[cls.classIndex].cls; 594 return _classEnvs[cls.classIndex].cls;
(...skipping 1375 matching lines...) Expand 10 before | Expand all | Expand 10 after
1925 @override 1970 @override
1926 ir.Member getMemberNode(MemberEntity member) { 1971 ir.Member getMemberNode(MemberEntity member) {
1927 return _getMemberNode(member); 1972 return _getMemberNode(member);
1928 } 1973 }
1929 1974
1930 @override 1975 @override
1931 ir.Class getClassNode(ClassEntity cls) { 1976 ir.Class getClassNode(ClassEntity cls) {
1932 return _getClassNode(cls); 1977 return _getClassNode(cls);
1933 } 1978 }
1934 } 1979 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_model/js_strategy.dart ('k') | pkg/compiler/lib/src/kernel/kernel_backend_strategy.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698