OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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.source_map_builder; | 5 library dart2js.source_map_builder; |
6 | 6 |
7 import '../util/uri_extras.dart' show relativize; | 7 import '../util/uri_extras.dart' show relativize; |
8 import '../util/util.dart'; | 8 import '../util/util.dart'; |
9 import 'line_column_provider.dart'; | 9 import 'line_column_provider.dart'; |
10 import 'source_information.dart' show SourceLocation; | 10 import 'source_information.dart' show SourceLocation; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 Map<Uri, LineColumnMap<SourceMapEntry>> sourceLocationMap = | 45 Map<Uri, LineColumnMap<SourceMapEntry>> sourceLocationMap = |
46 <Uri, LineColumnMap<SourceMapEntry>>{}; | 46 <Uri, LineColumnMap<SourceMapEntry>>{}; |
47 entries.forEach((SourceMapEntry sourceMapEntry) { | 47 entries.forEach((SourceMapEntry sourceMapEntry) { |
48 int line = lineColumnProvider.getLine(sourceMapEntry.targetOffset); | 48 int line = lineColumnProvider.getLine(sourceMapEntry.targetOffset); |
49 int column = | 49 int column = |
50 lineColumnProvider.getColumn(line, sourceMapEntry.targetOffset); | 50 lineColumnProvider.getColumn(line, sourceMapEntry.targetOffset); |
51 lineColumnMap.add(line, column, sourceMapEntry); | 51 lineColumnMap.add(line, column, sourceMapEntry); |
52 | 52 |
53 SourceLocation location = sourceMapEntry.sourceLocation; | 53 SourceLocation location = sourceMapEntry.sourceLocation; |
54 if (location != null) { | 54 if (location != null) { |
55 LineColumnMap<SourceMapEntry> sourceLineColumnMap = | 55 if (location.sourceUri != null) { |
56 sourceLocationMap.putIfAbsent( | 56 LineColumnMap<SourceMapEntry> sourceLineColumnMap = |
57 location.sourceUri, () => new LineColumnMap<SourceMapEntry>()); | 57 sourceLocationMap.putIfAbsent(location.sourceUri, |
58 sourceLineColumnMap.add(location.line, location.column, sourceMapEntry); | 58 () => new LineColumnMap<SourceMapEntry>()); |
| 59 sourceLineColumnMap.add( |
| 60 location.line, location.column, sourceMapEntry); |
| 61 } |
59 } | 62 } |
60 }); | 63 }); |
61 | 64 |
62 return _build(lineColumnMap); | 65 return _build(lineColumnMap); |
63 } | 66 } |
64 | 67 |
65 String _build(LineColumnMap<SourceMapEntry> lineColumnMap) { | 68 String _build(LineColumnMap<SourceMapEntry> lineColumnMap) { |
66 IndexMap<Uri> uriMap = new IndexMap<Uri>(); | 69 IndexMap<Uri> uriMap = new IndexMap<Uri>(); |
67 IndexMap<String> nameMap = new IndexMap<String>(); | 70 IndexMap<String> nameMap = new IndexMap<String>(); |
68 | 71 |
69 lineColumnMap.forEachElement((SourceMapEntry entry) { | 72 lineColumnMap.forEachElement((SourceMapEntry entry) { |
70 SourceLocation sourceLocation = entry.sourceLocation; | 73 SourceLocation sourceLocation = entry.sourceLocation; |
71 if (sourceLocation != null) { | 74 if (sourceLocation != null) { |
72 uriMap.register(sourceLocation.sourceUri); | 75 if (sourceLocation.sourceUri != null) { |
73 if (sourceLocation.sourceName != null) { | 76 uriMap.register(sourceLocation.sourceUri); |
74 nameMap.register(sourceLocation.sourceName); | 77 if (sourceLocation.sourceName != null) { |
| 78 nameMap.register(sourceLocation.sourceName); |
| 79 } |
75 } | 80 } |
76 } | 81 } |
77 }); | 82 }); |
78 | 83 |
79 StringBuffer mappingsBuffer = new StringBuffer(); | 84 StringBuffer mappingsBuffer = new StringBuffer(); |
80 writeEntries(lineColumnMap, uriMap, nameMap, mappingsBuffer); | 85 writeEntries(lineColumnMap, uriMap, nameMap, mappingsBuffer); |
81 | 86 |
82 StringBuffer buffer = new StringBuffer(); | 87 StringBuffer buffer = new StringBuffer(); |
83 buffer.write('{\n'); | 88 buffer.write('{\n'); |
84 buffer.write(' "version": 3,\n'); | 89 buffer.write(' "version": 3,\n'); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 } | 141 } |
137 firstEntryInLine = false; | 142 firstEntryInLine = false; |
138 | 143 |
139 targetColumnEncoder.encode(output, targetColumn); | 144 targetColumnEncoder.encode(output, targetColumn); |
140 | 145 |
141 if (sourceLocation == null) { | 146 if (sourceLocation == null) { |
142 return; | 147 return; |
143 } | 148 } |
144 | 149 |
145 Uri sourceUri = sourceLocation.sourceUri; | 150 Uri sourceUri = sourceLocation.sourceUri; |
146 sourceUriIndexEncoder.encode(output, uriMap[sourceUri]); | 151 if (sourceUri != null) { |
147 sourceLineEncoder.encode(output, sourceLocation.line); | 152 sourceUriIndexEncoder.encode(output, uriMap[sourceUri]); |
148 sourceColumnEncoder.encode(output, sourceLocation.column); | 153 sourceLineEncoder.encode(output, sourceLocation.line); |
| 154 sourceColumnEncoder.encode(output, sourceLocation.column); |
| 155 } |
149 | 156 |
150 String sourceName = sourceLocation.sourceName; | 157 String sourceName = sourceLocation.sourceName; |
151 if (sourceName != null) { | 158 if (sourceName != null) { |
152 sourceNameIndexEncoder.encode(output, nameMap[sourceName]); | 159 sourceNameIndexEncoder.encode(output, nameMap[sourceName]); |
153 } | 160 } |
154 | 161 |
155 previousSourceLocation = sourceLocation; | 162 previousSourceLocation = sourceLocation; |
156 }); | 163 }); |
157 } | 164 } |
158 } | 165 } |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 int register(T element) { | 298 int register(T element) { |
292 return map.putIfAbsent(element, () => map.length); | 299 return map.putIfAbsent(element, () => map.length); |
293 } | 300 } |
294 | 301 |
295 /// Returns the index of [element]. | 302 /// Returns the index of [element]. |
296 int operator [](T element) => map[element]; | 303 int operator [](T element) => map[element]; |
297 | 304 |
298 /// Returns the indexed elements. | 305 /// Returns the indexed elements. |
299 Iterable<T> get elements => map.keys; | 306 Iterable<T> get elements => map.keys; |
300 } | 307 } |
OLD | NEW |