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

Side by Side Diff: pkg/compiler/lib/src/io/position_information.dart

Issue 1935933002: Fix source information positions for deserialized patched elements. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fixes Created 4 years, 7 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 /// Source information system mapping that attempts a semantic mapping between 5 /// Source information system mapping that attempts a semantic mapping between
6 /// offsets of JavaScript code points to offsets of Dart code points. 6 /// offsets of JavaScript code points to offsets of Dart code points.
7 7
8 library dart2js.source_information.position; 8 library dart2js.source_information.position;
9 9
10 import '../common.dart'; 10 import '../common.dart';
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 return _computeText('${closingPosition.sourceUri}'); 94 return _computeText('${closingPosition.sourceUri}');
95 } 95 }
96 } 96 }
97 } 97 }
98 98
99 class PositionSourceInformationStrategy 99 class PositionSourceInformationStrategy
100 implements JavaScriptSourceInformationStrategy { 100 implements JavaScriptSourceInformationStrategy {
101 const PositionSourceInformationStrategy(); 101 const PositionSourceInformationStrategy();
102 102
103 @override 103 @override
104 SourceInformationBuilder createBuilderForContext(AstElement element) { 104 SourceInformationBuilder createBuilderForContext(ResolvedAst resolvedAst) {
105 return new PositionSourceInformationBuilder(element); 105 return new PositionSourceInformationBuilder(resolvedAst);
106 } 106 }
107 107
108 @override 108 @override
109 SourceInformationProcessor createProcessor(SourceMapper mapper) { 109 SourceInformationProcessor createProcessor(SourceMapper mapper) {
110 return new PositionSourceInformationProcessor(mapper); 110 return new PositionSourceInformationProcessor(mapper);
111 } 111 }
112 112
113 @override 113 @override
114 void onComplete() {} 114 void onComplete() {}
115 115
(...skipping 18 matching lines...) Expand all
134 List<SourceLocation> get sourceLocations => const <SourceLocation>[]; 134 List<SourceLocation> get sourceLocations => const <SourceLocation>[];
135 135
136 @override 136 @override
137 SourceSpan get sourceSpan => new SourceSpan(null, null, null); 137 SourceSpan get sourceSpan => new SourceSpan(null, null, null);
138 } 138 }
139 139
140 /// [SourceInformationBuilder] that generates [PositionSourceInformation]. 140 /// [SourceInformationBuilder] that generates [PositionSourceInformation].
141 class PositionSourceInformationBuilder implements SourceInformationBuilder { 141 class PositionSourceInformationBuilder implements SourceInformationBuilder {
142 final SourceFile sourceFile; 142 final SourceFile sourceFile;
143 final String name; 143 final String name;
144 final AstElement element; 144 final ResolvedAst resolvedAst;
145 145
146 PositionSourceInformationBuilder(AstElement element) 146 PositionSourceInformationBuilder(ResolvedAst resolvedAst)
147 : this.element = element, 147 : this.resolvedAst = resolvedAst,
148 sourceFile = element.implementation.compilationUnit.script.file, 148 sourceFile = computeSourceFile(resolvedAst),
149 name = computeElementNameForSourceMaps(element); 149 name = computeElementNameForSourceMaps(resolvedAst.element);
150 150
151 SourceInformation buildDeclaration(ResolvedAst resolvedAst) { 151 SourceInformation buildDeclaration(ResolvedAst resolvedAst) {
152 if (resolvedAst.kind != ResolvedAstKind.PARSED) { 152 if (resolvedAst.kind != ResolvedAstKind.PARSED) {
153 SourceSpan span = resolvedAst.element.sourcePosition; 153 SourceSpan span = resolvedAst.element.sourcePosition;
154 return new PositionSourceInformation( 154 return new PositionSourceInformation(
155 new OffsetSourceLocation(sourceFile, span.begin, name)); 155 new OffsetSourceLocation(sourceFile, span.begin, name));
156 } else { 156 } else {
157 return new PositionSourceInformation( 157 return new PositionSourceInformation(
158 new OffsetSourceLocation( 158 new OffsetSourceLocation(
159 sourceFile, resolvedAst.node.getBeginToken().charOffset, name), 159 sourceFile, resolvedAst.node.getBeginToken().charOffset, name),
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 SourceInformation buildIf(Node node) => buildBegin(node); 231 SourceInformation buildIf(Node node) => buildBegin(node);
232 232
233 @override 233 @override
234 SourceInformation buildThrow(Node node) => buildBegin(node); 234 SourceInformation buildThrow(Node node) => buildBegin(node);
235 235
236 @override 236 @override
237 SourceInformation buildAssignment(Node node) => buildBegin(node); 237 SourceInformation buildAssignment(Node node) => buildBegin(node);
238 238
239 @override 239 @override
240 SourceInformation buildVariableDeclaration() { 240 SourceInformation buildVariableDeclaration() {
241 if (element.hasNode) { 241 if (resolvedAst.kind == ResolvedAstKind.PARSED) {
242 Node node = element.node; 242 Node body = resolvedAst.body;
243 if (node is FunctionExpression) { 243 if (body != null) {
244 return buildBegin(node.body); 244 return buildBegin(body);
245 } else if (element.isField) {
246 FieldElement field = element;
247 if (field.initializer != null) {
248 return buildBegin(field.initializer);
249 }
250 } 245 }
251 // TODO(johnniwinther): Are there other cases? 246 // TODO(johnniwinther): Are there other cases?
252 } 247 }
253 return null; 248 return null;
254 } 249 }
255 250
256 @override 251 @override
257 SourceInformationBuilder forContext(AstElement element) { 252 SourceInformationBuilder forContext(ResolvedAst resolvedAst) {
258 return new PositionSourceInformationBuilder(element); 253 return new PositionSourceInformationBuilder(resolvedAst);
259 } 254 }
260 255
261 @override 256 @override
262 SourceInformation buildForeignCode(Node node) => buildBegin(node); 257 SourceInformation buildForeignCode(Node node) => buildBegin(node);
263 258
264 @override 259 @override
265 SourceInformation buildStringInterpolation(Node node) => buildBegin(node); 260 SourceInformation buildStringInterpolation(Node node) => buildBegin(node);
266 261
267 @override 262 @override
268 SourceInformation buildForInIterator(Node node) => buildBegin(node); 263 SourceInformation buildForInIterator(Node node) => buildBegin(node);
(...skipping 1013 matching lines...) Expand 10 before | Expand all | Expand 10 after
1282 1277
1283 @override 1278 @override
1284 CodePosition operator [](js.Node node) { 1279 CodePosition operator [](js.Node node) {
1285 CodePosition codePosition = codePositions[node]; 1280 CodePosition codePosition = codePositions[node];
1286 if (codePosition == null) { 1281 if (codePosition == null) {
1287 coverage.registerNodesWithoutOffset(node); 1282 coverage.registerNodesWithoutOffset(node);
1288 } 1283 }
1289 return codePosition; 1284 return codePosition;
1290 } 1285 }
1291 } 1286 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/elements/modelx.dart ('k') | pkg/compiler/lib/src/io/source_information.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698