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

Side by Side Diff: pkg/compiler/lib/src/io/start_end_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 that maps spans of Dart AST nodes to spans of 5 /// Source information system that maps spans of Dart AST nodes to spans of
6 /// JavaScript nodes. 6 /// JavaScript nodes.
7 7
8 library dart2js.source_information.start_end; 8 library dart2js.source_information.start_end;
9 9
10 import '../common.dart'; 10 import '../common.dart';
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 if (other is! StartEndSourceInformation) return false; 56 if (other is! StartEndSourceInformation) return false;
57 return startPosition == other.startPosition && 57 return startPosition == other.startPosition &&
58 endPosition == other.endPosition; 58 endPosition == other.endPosition;
59 } 59 }
60 60
61 // TODO(johnniwinther): Inline this in 61 // TODO(johnniwinther): Inline this in
62 // [StartEndSourceInformationBuilder.buildDeclaration]. 62 // [StartEndSourceInformationBuilder.buildDeclaration].
63 static StartEndSourceInformation _computeSourceInformation( 63 static StartEndSourceInformation _computeSourceInformation(
64 ResolvedAst resolvedAst) { 64 ResolvedAst resolvedAst) {
65 String name = computeElementNameForSourceMaps(resolvedAst.element); 65 String name = computeElementNameForSourceMaps(resolvedAst.element);
66 SourceFile sourceFile; 66 SourceFile sourceFile = computeSourceFile(resolvedAst);
67 int begin; 67 int begin;
68 int end; 68 int end;
69 if (resolvedAst.kind != ResolvedAstKind.PARSED) { 69 if (resolvedAst.kind != ResolvedAstKind.PARSED) {
70 // Synthesized node. Use the enclosing element for the location. 70 // Synthesized node. Use the enclosing element for the location.
71 sourceFile = resolvedAst.element.compilationUnit.script.file;
72 begin = end = resolvedAst.element.sourcePosition.begin; 71 begin = end = resolvedAst.element.sourcePosition.begin;
73 } else { 72 } else {
74 AstElement implementation = resolvedAst.element.implementation;
75 sourceFile = implementation.compilationUnit.script.file;
76 Node node = resolvedAst.node; 73 Node node = resolvedAst.node;
77 begin = node.getBeginToken().charOffset; 74 begin = node.getBeginToken().charOffset;
78 end = node.getEndToken().charOffset; 75 end = node.getEndToken().charOffset;
79 } 76 }
80 // TODO(johnniwinther): find the right sourceFile here and remove offset 77 // TODO(johnniwinther): find the right sourceFile here and remove offset
81 // checks below. 78 // checks below.
82 SourceLocation sourcePosition, endSourcePosition; 79 SourceLocation sourcePosition, endSourcePosition;
83 if (begin < sourceFile.length) { 80 if (begin < sourceFile.length) {
84 sourcePosition = new OffsetSourceLocation(sourceFile, begin, name); 81 sourcePosition = new OffsetSourceLocation(sourceFile, begin, name);
85 } 82 }
(...skipping 23 matching lines...) Expand all
109 String toString() { 106 String toString() {
110 return _computeText('${startPosition.sourceUri}'); 107 return _computeText('${startPosition.sourceUri}');
111 } 108 }
112 } 109 }
113 110
114 class StartEndSourceInformationStrategy 111 class StartEndSourceInformationStrategy
115 extends JavaScriptSourceInformationStrategy { 112 extends JavaScriptSourceInformationStrategy {
116 const StartEndSourceInformationStrategy(); 113 const StartEndSourceInformationStrategy();
117 114
118 @override 115 @override
119 SourceInformationBuilder createBuilderForContext(AstElement element) { 116 SourceInformationBuilder createBuilderForContext(ResolvedAst resolvedAst) {
120 return new StartEndSourceInformationBuilder(element); 117 return new StartEndSourceInformationBuilder(resolvedAst);
121 } 118 }
122 119
123 @override 120 @override
124 SourceInformationProcessor createProcessor(SourceMapper sourceMapper) { 121 SourceInformationProcessor createProcessor(SourceMapper sourceMapper) {
125 return new StartEndSourceInformationProcessor(sourceMapper); 122 return new StartEndSourceInformationProcessor(sourceMapper);
126 } 123 }
127 } 124 }
128 125
129 class StartEndSourceInformationProcessor extends SourceInformationProcessor { 126 class StartEndSourceInformationProcessor extends SourceInformationProcessor {
130 final SourceMapper sourceMapper; 127 final SourceMapper sourceMapper;
(...skipping 20 matching lines...) Expand all
151 } 148 }
152 } 149 }
153 } 150 }
154 } 151 }
155 152
156 /// [SourceInformationBuilder] that generates [PositionSourceInformation]. 153 /// [SourceInformationBuilder] that generates [PositionSourceInformation].
157 class StartEndSourceInformationBuilder extends SourceInformationBuilder { 154 class StartEndSourceInformationBuilder extends SourceInformationBuilder {
158 final SourceFile sourceFile; 155 final SourceFile sourceFile;
159 final String name; 156 final String name;
160 157
161 StartEndSourceInformationBuilder(AstElement element) 158 StartEndSourceInformationBuilder(ResolvedAst resolvedAst)
162 : sourceFile = element.compilationUnit.script.file, 159 : sourceFile = computeSourceFile(resolvedAst),
163 name = computeElementNameForSourceMaps(element); 160 name = computeElementNameForSourceMaps(resolvedAst.element);
164 161
165 SourceInformation buildDeclaration(ResolvedAst resolvedAst) { 162 SourceInformation buildDeclaration(ResolvedAst resolvedAst) {
166 return StartEndSourceInformation._computeSourceInformation(resolvedAst); 163 return StartEndSourceInformation._computeSourceInformation(resolvedAst);
167 } 164 }
168 165
169 SourceLocation sourceFileLocationForToken(Token token) { 166 SourceLocation sourceFileLocationForToken(Token token) {
170 SourceLocation location = 167 SourceLocation location =
171 new OffsetSourceLocation(sourceFile, token.charOffset, name); 168 new OffsetSourceLocation(sourceFile, token.charOffset, name);
172 checkValidSourceFileLocation(location, sourceFile, token.charOffset); 169 checkValidSourceFileLocation(location, sourceFile, token.charOffset);
173 return location; 170 return location;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 209
213 @override 210 @override
214 SourceInformation buildCall(Node receiver, Node call) { 211 SourceInformation buildCall(Node receiver, Node call) {
215 return buildGeneric(receiver); 212 return buildGeneric(receiver);
216 } 213 }
217 214
218 @override 215 @override
219 SourceInformation buildIf(Node node) => buildGeneric(node); 216 SourceInformation buildIf(Node node) => buildGeneric(node);
220 217
221 @override 218 @override
222 SourceInformationBuilder forContext(AstElement element, 219 SourceInformationBuilder forContext(ResolvedAst resolvedAst,
223 {SourceInformation sourceInformation}) { 220 {SourceInformation sourceInformation}) {
224 return new StartEndSourceInformationBuilder(element); 221 return new StartEndSourceInformationBuilder(resolvedAst);
225 } 222 }
226 } 223 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/io/source_information.dart ('k') | pkg/compiler/lib/src/js_backend/codegen/task.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698