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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart

Issue 2788373002: Add Source.getTextLine and use it to display source snippets in error messages. (Closed)
Patch Set: dartfmt Created 3 years, 8 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 library dart2js.js_emitter.startup_emitter.model_emitter; 5 library dart2js.js_emitter.startup_emitter.model_emitter;
6 6
7 import 'dart:convert' show JsonEncoder; 7 import 'dart:convert' show JsonEncoder;
8 8
9 import 'package:js_runtime/shared/embedded_names.dart' 9 import 'package:js_runtime/shared/embedded_names.dart'
10 show 10 show
(...skipping 20 matching lines...) Expand all
31 TYPES; 31 TYPES;
32 32
33 import '../../../compiler_new.dart'; 33 import '../../../compiler_new.dart';
34 import '../../common.dart'; 34 import '../../common.dart';
35 import '../../compiler.dart' show Compiler; 35 import '../../compiler.dart' show Compiler;
36 import '../../constants/values.dart' show ConstantValue, FunctionConstantValue; 36 import '../../constants/values.dart' show ConstantValue, FunctionConstantValue;
37 import '../../common_elements.dart' show CommonElements; 37 import '../../common_elements.dart' show CommonElements;
38 import '../../elements/elements.dart' show ClassElement, MethodElement; 38 import '../../elements/elements.dart' show ClassElement, MethodElement;
39 import '../../hash/sha1.dart' show Hasher; 39 import '../../hash/sha1.dart' show Hasher;
40 import '../../io/code_output.dart'; 40 import '../../io/code_output.dart';
41 import '../../io/line_column_provider.dart' show LineColumnCollector; 41 import '../../io/location_provider.dart' show LocationCollector;
42 import '../../io/source_map_builder.dart' show SourceMapBuilder; 42 import '../../io/source_map_builder.dart' show SourceMapBuilder;
43 import '../../js/js.dart' as js; 43 import '../../js/js.dart' as js;
44 import '../../js_backend/js_backend.dart' 44 import '../../js_backend/js_backend.dart'
45 show JavaScriptBackend, Namer, ConstantEmitter; 45 show JavaScriptBackend, Namer, ConstantEmitter;
46 import '../constant_ordering.dart' show deepCompareConstants; 46 import '../constant_ordering.dart' show deepCompareConstants;
47 import '../headers.dart'; 47 import '../headers.dart';
48 import '../js_emitter.dart' show NativeEmitter; 48 import '../js_emitter.dart' show NativeEmitter;
49 import '../js_emitter.dart' show buildTearOffCode, NativeGenerator; 49 import '../js_emitter.dart' show buildTearOffCode, NativeGenerator;
50 import '../model.dart'; 50 import '../model.dart';
51 51
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 'self.#deferredInitializers = ' 235 'self.#deferredInitializers = '
236 'self.#deferredInitializers || Object.create(null);', 236 'self.#deferredInitializers || Object.create(null);',
237 {'deferredInitializers': deferredInitializersGlobal}); 237 {'deferredInitializers': deferredInitializersGlobal});
238 } 238 }
239 239
240 // Writes the given [fragment]'s [code] into a file. 240 // Writes the given [fragment]'s [code] into a file.
241 // 241 //
242 // Updates the shared [outputBuffers] field with the output. 242 // Updates the shared [outputBuffers] field with the output.
243 void writeMainFragment(MainFragment fragment, js.Statement code, 243 void writeMainFragment(MainFragment fragment, js.Statement code,
244 {bool isSplit}) { 244 {bool isSplit}) {
245 LineColumnCollector lineColumnCollector; 245 LocationCollector locationCollector;
246 List<CodeOutputListener> codeOutputListeners; 246 List<CodeOutputListener> codeOutputListeners;
247 if (shouldGenerateSourceMap) { 247 if (shouldGenerateSourceMap) {
248 lineColumnCollector = new LineColumnCollector(); 248 locationCollector = new LocationCollector();
249 codeOutputListeners = <CodeOutputListener>[lineColumnCollector]; 249 codeOutputListeners = <CodeOutputListener>[locationCollector];
250 } 250 }
251 251
252 CodeOutput mainOutput = new StreamCodeOutput( 252 CodeOutput mainOutput = new StreamCodeOutput(
253 compiler.outputProvider('', 'js', OutputType.js), codeOutputListeners); 253 compiler.outputProvider('', 'js', OutputType.js), codeOutputListeners);
254 outputBuffers[fragment] = mainOutput; 254 outputBuffers[fragment] = mainOutput;
255 255
256 js.Program program = new js.Program([ 256 js.Program program = new js.Program([
257 buildGeneratedBy(), 257 buildGeneratedBy(),
258 new js.Comment(HOOKS_API_USAGE), 258 new js.Comment(HOOKS_API_USAGE),
259 isSplit ? buildDeferredInitializerGlobal() : new js.Block.empty(), 259 isSplit ? buildDeferredInitializerGlobal() : new js.Block.empty(),
260 code 260 code
261 ]); 261 ]);
262 262
263 mainOutput.addBuffer( 263 mainOutput.addBuffer(
264 js.createCodeBuffer(program, compiler, monitor: compiler.dumpInfoTask)); 264 js.createCodeBuffer(program, compiler, monitor: compiler.dumpInfoTask));
265 265
266 if (shouldGenerateSourceMap) { 266 if (shouldGenerateSourceMap) {
267 mainOutput.add(SourceMapBuilder.generateSourceMapTag( 267 mainOutput.add(SourceMapBuilder.generateSourceMapTag(
268 compiler.options.sourceMapUri, compiler.options.outputUri)); 268 compiler.options.sourceMapUri, compiler.options.outputUri));
269 } 269 }
270 270
271 mainOutput.close(); 271 mainOutput.close();
272 272
273 if (shouldGenerateSourceMap) { 273 if (shouldGenerateSourceMap) {
274 SourceMapBuilder.outputSourceMap( 274 SourceMapBuilder.outputSourceMap(
275 mainOutput, 275 mainOutput,
276 lineColumnCollector, 276 locationCollector,
277 '', 277 '',
278 compiler.options.sourceMapUri, 278 compiler.options.sourceMapUri,
279 compiler.options.outputUri, 279 compiler.options.outputUri,
280 compiler.outputProvider); 280 compiler.outputProvider);
281 } 281 }
282 } 282 }
283 283
284 // Writes the given [fragment]'s [code] into a file. 284 // Writes the given [fragment]'s [code] into a file.
285 // 285 //
286 // Returns the deferred fragment's hash. 286 // Returns the deferred fragment's hash.
287 // 287 //
288 // Updates the shared [outputBuffers] field with the output. 288 // Updates the shared [outputBuffers] field with the output.
289 String writeDeferredFragment(DeferredFragment fragment, js.Expression code) { 289 String writeDeferredFragment(DeferredFragment fragment, js.Expression code) {
290 List<CodeOutputListener> outputListeners = <CodeOutputListener>[]; 290 List<CodeOutputListener> outputListeners = <CodeOutputListener>[];
291 Hasher hasher = new Hasher(); 291 Hasher hasher = new Hasher();
292 outputListeners.add(hasher); 292 outputListeners.add(hasher);
293 293
294 LineColumnCollector lineColumnCollector; 294 LocationCollector locationCollector;
295 if (shouldGenerateSourceMap) { 295 if (shouldGenerateSourceMap) {
296 lineColumnCollector = new LineColumnCollector(); 296 locationCollector = new LocationCollector();
297 outputListeners.add(lineColumnCollector); 297 outputListeners.add(locationCollector);
298 } 298 }
299 299
300 String hunkPrefix = fragment.outputFileName; 300 String hunkPrefix = fragment.outputFileName;
301 301
302 CodeOutput output = new StreamCodeOutput( 302 CodeOutput output = new StreamCodeOutput(
303 compiler.outputProvider( 303 compiler.outputProvider(
304 hunkPrefix, deferredExtension, OutputType.jsPart), 304 hunkPrefix, deferredExtension, OutputType.jsPart),
305 outputListeners); 305 outputListeners);
306 306
307 outputBuffers[fragment] = output; 307 outputBuffers[fragment] = output;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 350
351 if (outputUri != null) { 351 if (outputUri != null) {
352 List<String> partSegments = outputUri.pathSegments.toList(); 352 List<String> partSegments = outputUri.pathSegments.toList();
353 partSegments[partSegments.length - 1] = hunkFileName; 353 partSegments[partSegments.length - 1] = hunkFileName;
354 partUri = 354 partUri =
355 compiler.options.outputUri.replace(pathSegments: partSegments); 355 compiler.options.outputUri.replace(pathSegments: partSegments);
356 } 356 }
357 357
358 output.add(SourceMapBuilder.generateSourceMapTag(mapUri, partUri)); 358 output.add(SourceMapBuilder.generateSourceMapTag(mapUri, partUri));
359 output.close(); 359 output.close();
360 SourceMapBuilder.outputSourceMap(output, lineColumnCollector, partName, 360 SourceMapBuilder.outputSourceMap(output, locationCollector, partName,
361 mapUri, partUri, compiler.outputProvider); 361 mapUri, partUri, compiler.outputProvider);
362 } else { 362 } else {
363 output.close(); 363 output.close();
364 } 364 }
365 365
366 return hash; 366 return hash;
367 } 367 }
368 368
369 /// Writes a mapping from library-name to hunk files. 369 /// Writes a mapping from library-name to hunk files.
370 /// 370 ///
371 /// The output is written into a separate file that can be used by outside 371 /// The output is written into a separate file that can be used by outside
372 /// tools. 372 /// tools.
373 void writeDeferredMap() { 373 void writeDeferredMap() {
374 Map<String, dynamic> mapping = new Map<String, dynamic>(); 374 Map<String, dynamic> mapping = new Map<String, dynamic>();
375 // Json does not support comments, so we embed the explanation in the 375 // Json does not support comments, so we embed the explanation in the
376 // data. 376 // data.
377 mapping["_comment"] = "This mapping shows which compiled `.js` files are " 377 mapping["_comment"] = "This mapping shows which compiled `.js` files are "
378 "needed for a given deferred library import."; 378 "needed for a given deferred library import.";
379 mapping.addAll(compiler.deferredLoadTask.computeDeferredMap()); 379 mapping.addAll(compiler.deferredLoadTask.computeDeferredMap());
380 compiler.outputProvider( 380 compiler.outputProvider(
381 compiler.options.deferredMapUri.path, '', OutputType.info) 381 compiler.options.deferredMapUri.path, '', OutputType.info)
382 ..add(const JsonEncoder.withIndent(" ").convert(mapping)) 382 ..add(const JsonEncoder.withIndent(" ").convert(mapping))
383 ..close(); 383 ..close();
384 } 384 }
385 } 385 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698