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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/full_emitter/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) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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.full_emitter; 5 library dart2js.js_emitter.full_emitter;
6 6
7 import 'dart:collection' show HashMap; 7 import 'dart:collection' show HashMap;
8 import 'dart:convert'; 8 import 'dart:convert';
9 9
10 import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames; 10 import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames;
(...skipping 15 matching lines...) Expand all
26 FieldElement, 26 FieldElement,
27 FunctionElement, 27 FunctionElement,
28 FunctionSignature, 28 FunctionSignature,
29 LibraryElement, 29 LibraryElement,
30 MethodElement, 30 MethodElement,
31 TypedefElement, 31 TypedefElement,
32 VariableElement; 32 VariableElement;
33 import '../../elements/entities.dart'; 33 import '../../elements/entities.dart';
34 import '../../hash/sha1.dart' show Hasher; 34 import '../../hash/sha1.dart' show Hasher;
35 import '../../io/code_output.dart'; 35 import '../../io/code_output.dart';
36 import '../../io/line_column_provider.dart' show LineColumnCollector; 36 import '../../io/location_provider.dart' show LocationCollector;
37 import '../../io/source_map_builder.dart' show SourceMapBuilder; 37 import '../../io/source_map_builder.dart' show SourceMapBuilder;
38 import '../../js/js.dart' as jsAst; 38 import '../../js/js.dart' as jsAst;
39 import '../../js/js.dart' show js; 39 import '../../js/js.dart' show js;
40 import '../../js_backend/backend_helpers.dart' show BackendHelpers; 40 import '../../js_backend/backend_helpers.dart' show BackendHelpers;
41 import '../../js_backend/js_backend.dart' 41 import '../../js_backend/js_backend.dart'
42 show 42 show
43 ConstantEmitter, 43 ConstantEmitter,
44 JavaScriptBackend, 44 JavaScriptBackend,
45 JavaScriptConstantCompiler, 45 JavaScriptConstantCompiler,
46 Namer, 46 Namer,
(...skipping 1469 matching lines...) Expand 10 before | Expand all | Expand 10 after
1516 buildConvertGlobalObjectToFastObjects(), 1516 buildConvertGlobalObjectToFastObjects(),
1517 "debugFastObjects": buildDebugFastObjectCode(), 1517 "debugFastObjects": buildDebugFastObjectCode(),
1518 "init": buildInitFunction(program.outputContainsConstantList), 1518 "init": buildInitFunction(program.outputContainsConstantList),
1519 "main": buildMain(mainFragment.invokeMain) 1519 "main": buildMain(mainFragment.invokeMain)
1520 })); 1520 }));
1521 1521
1522 return new jsAst.Program(statements); 1522 return new jsAst.Program(statements);
1523 } 1523 }
1524 1524
1525 void emitMainOutputUnit(OutputUnit mainOutputUnit, jsAst.Program program) { 1525 void emitMainOutputUnit(OutputUnit mainOutputUnit, jsAst.Program program) {
1526 LineColumnCollector lineColumnCollector; 1526 LocationCollector locationCollector;
1527 List<CodeOutputListener> codeOutputListeners; 1527 List<CodeOutputListener> codeOutputListeners;
1528 if (generateSourceMap) { 1528 if (generateSourceMap) {
1529 lineColumnCollector = new LineColumnCollector(); 1529 locationCollector = new LocationCollector();
1530 codeOutputListeners = <CodeOutputListener>[lineColumnCollector]; 1530 codeOutputListeners = <CodeOutputListener>[locationCollector];
1531 } 1531 }
1532 1532
1533 CodeOutput mainOutput = new StreamCodeOutput( 1533 CodeOutput mainOutput = new StreamCodeOutput(
1534 compiler.outputProvider('', 'js', OutputType.js), codeOutputListeners); 1534 compiler.outputProvider('', 'js', OutputType.js), codeOutputListeners);
1535 outputBuffers[mainOutputUnit] = mainOutput; 1535 outputBuffers[mainOutputUnit] = mainOutput;
1536 1536
1537 mainOutput.addBuffer(jsAst.createCodeBuffer(program, compiler, 1537 mainOutput.addBuffer(jsAst.createCodeBuffer(program, compiler,
1538 monitor: compiler.dumpInfoTask)); 1538 monitor: compiler.dumpInfoTask));
1539 1539
1540 if (compiler.options.deferredMapUri != null) { 1540 if (compiler.options.deferredMapUri != null) {
1541 outputDeferredMap(); 1541 outputDeferredMap();
1542 } 1542 }
1543 1543
1544 if (generateSourceMap) { 1544 if (generateSourceMap) {
1545 mainOutput.add(SourceMapBuilder.generateSourceMapTag( 1545 mainOutput.add(SourceMapBuilder.generateSourceMapTag(
1546 compiler.options.sourceMapUri, compiler.options.outputUri)); 1546 compiler.options.sourceMapUri, compiler.options.outputUri));
1547 } 1547 }
1548 1548
1549 mainOutput.close(); 1549 mainOutput.close();
1550 1550
1551 if (generateSourceMap) { 1551 if (generateSourceMap) {
1552 SourceMapBuilder.outputSourceMap( 1552 SourceMapBuilder.outputSourceMap(
1553 mainOutput, 1553 mainOutput,
1554 lineColumnCollector, 1554 locationCollector,
1555 '', 1555 '',
1556 compiler.options.sourceMapUri, 1556 compiler.options.sourceMapUri,
1557 compiler.options.outputUri, 1557 compiler.options.outputUri,
1558 compiler.outputProvider); 1558 compiler.outputProvider);
1559 } 1559 }
1560 } 1560 }
1561 1561
1562 Map<OutputUnit, jsAst.Expression> buildDescriptorsForOutputUnits( 1562 Map<OutputUnit, jsAst.Expression> buildDescriptorsForOutputUnits(
1563 Program program) { 1563 Program program) {
1564 Map<OutputUnit, jsAst.Expression> outputs = 1564 Map<OutputUnit, jsAst.Expression> outputs =
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
1847 /// itself. 1847 /// itself.
1848 Map<OutputUnit, String> emitDeferredOutputUnits( 1848 Map<OutputUnit, String> emitDeferredOutputUnits(
1849 Map<OutputUnit, jsAst.Program> outputAsts) { 1849 Map<OutputUnit, jsAst.Program> outputAsts) {
1850 Map<OutputUnit, String> hunkHashes = new Map<OutputUnit, String>(); 1850 Map<OutputUnit, String> hunkHashes = new Map<OutputUnit, String>();
1851 1851
1852 for (OutputUnit outputUnit in outputAsts.keys) { 1852 for (OutputUnit outputUnit in outputAsts.keys) {
1853 List<CodeOutputListener> outputListeners = <CodeOutputListener>[]; 1853 List<CodeOutputListener> outputListeners = <CodeOutputListener>[];
1854 Hasher hasher = new Hasher(); 1854 Hasher hasher = new Hasher();
1855 outputListeners.add(hasher); 1855 outputListeners.add(hasher);
1856 1856
1857 LineColumnCollector lineColumnCollector; 1857 LocationCollector locationCollector;
1858 if (generateSourceMap) { 1858 if (generateSourceMap) {
1859 lineColumnCollector = new LineColumnCollector(); 1859 locationCollector = new LocationCollector();
1860 outputListeners.add(lineColumnCollector); 1860 outputListeners.add(locationCollector);
1861 } 1861 }
1862 1862
1863 String partPrefix = 1863 String partPrefix =
1864 backend.deferredPartFileName(outputUnit.name, addExtension: false); 1864 backend.deferredPartFileName(outputUnit.name, addExtension: false);
1865 CodeOutput output = new StreamCodeOutput( 1865 CodeOutput output = new StreamCodeOutput(
1866 compiler.outputProvider(partPrefix, 'part.js', OutputType.jsPart), 1866 compiler.outputProvider(partPrefix, 'part.js', OutputType.jsPart),
1867 outputListeners); 1867 outputListeners);
1868 1868
1869 outputBuffers[outputUnit] = output; 1869 outputBuffers[outputUnit] = output;
1870 1870
(...skipping 26 matching lines...) Expand all
1897 if (outputUri != null) { 1897 if (outputUri != null) {
1898 String partFileName = partName + ".js"; 1898 String partFileName = partName + ".js";
1899 List<String> partSegments = outputUri.pathSegments.toList(); 1899 List<String> partSegments = outputUri.pathSegments.toList();
1900 partSegments[partSegments.length - 1] = partFileName; 1900 partSegments[partSegments.length - 1] = partFileName;
1901 partUri = 1901 partUri =
1902 compiler.options.outputUri.replace(pathSegments: partSegments); 1902 compiler.options.outputUri.replace(pathSegments: partSegments);
1903 } 1903 }
1904 1904
1905 output.add(SourceMapBuilder.generateSourceMapTag(mapUri, partUri)); 1905 output.add(SourceMapBuilder.generateSourceMapTag(mapUri, partUri));
1906 output.close(); 1906 output.close();
1907 SourceMapBuilder.outputSourceMap(output, lineColumnCollector, partName, 1907 SourceMapBuilder.outputSourceMap(output, locationCollector, partName,
1908 mapUri, partUri, compiler.outputProvider); 1908 mapUri, partUri, compiler.outputProvider);
1909 } else { 1909 } else {
1910 output.close(); 1910 output.close();
1911 } 1911 }
1912 1912
1913 hunkHashes[outputUnit] = hash; 1913 hunkHashes[outputUnit] = hash;
1914 } 1914 }
1915 return hunkHashes; 1915 return hunkHashes;
1916 } 1916 }
1917 1917
(...skipping 10 matching lines...) Expand all
1928 // data. 1928 // data.
1929 mapping["_comment"] = "This mapping shows which compiled `.js` files are " 1929 mapping["_comment"] = "This mapping shows which compiled `.js` files are "
1930 "needed for a given deferred library import."; 1930 "needed for a given deferred library import.";
1931 mapping.addAll(compiler.deferredLoadTask.computeDeferredMap()); 1931 mapping.addAll(compiler.deferredLoadTask.computeDeferredMap());
1932 compiler.outputProvider( 1932 compiler.outputProvider(
1933 compiler.options.deferredMapUri.path, '', OutputType.info) 1933 compiler.options.deferredMapUri.path, '', OutputType.info)
1934 ..add(const JsonEncoder.withIndent(" ").convert(mapping)) 1934 ..add(const JsonEncoder.withIndent(" ").convert(mapping))
1935 ..close(); 1935 ..close();
1936 } 1936 }
1937 } 1937 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698