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

Unified Diff: tests/compiler/dart2js/sourcemaps/sourcemap_helper.dart

Issue 1678043003: Add Dart code to diff_view (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Update status. Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: tests/compiler/dart2js/sourcemaps/sourcemap_helper.dart
diff --git a/tests/compiler/dart2js/sourcemaps/sourcemap_helper.dart b/tests/compiler/dart2js/sourcemaps/sourcemap_helper.dart
index 123cbe2a918ac1e427c2b116d9d8a5ad7422ab7a..019e8be34279a6942a863e54cb01f8c59757d192 100644
--- a/tests/compiler/dart2js/sourcemaps/sourcemap_helper.dart
+++ b/tests/compiler/dart2js/sourcemaps/sourcemap_helper.dart
@@ -5,6 +5,7 @@
library sourcemap.helper;
import 'dart:async';
+import 'dart:io';
import 'package:compiler/compiler_new.dart';
import 'package:compiler/src/apiimpl.dart' as api;
import 'package:compiler/src/null_compiler_output.dart' show NullSink;
@@ -303,10 +304,11 @@ class SourceMapProcessor {
}
/// Computes the [SourceMapInfo] for the compiled elements.
- Future<List<SourceMapInfo>> process(
+ Future<SourceMaps> process(
List<String> options,
{bool verbose: true,
- bool perElement: true}) async {
+ bool perElement: true,
+ bool forMain: false}) async {
OutputProvider outputProvider = outputToFile
? new CloningOutputProvider(targetUri, sourceMapFileUri)
: new OutputProvider();
@@ -335,7 +337,9 @@ class SourceMapProcessor {
backend.sourceInformationStrategy = strategy;
await compiler.run(inputUri);
- List<SourceMapInfo> infoList = <SourceMapInfo>[];
+ SourceMapInfo mainSourceMapInfo;
+ Map<Element, SourceMapInfo> elementSourceMapInfos =
+ <Element, SourceMapInfo>{};
if (perElement) {
backend.generatedCode.forEach((Element element, js.Expression node) {
RecordedSourceInformationProcess subProcess =
@@ -351,15 +355,18 @@ class SourceMapProcessor {
CodePositionRecorder codePositions = subProcess.codePositions;
CodePointComputer visitor =
new CodePointComputer(sourceFileManager, code, nodeMap);
- visitor.apply(node);
+ new JavaScriptTracer(codePositions, [visitor]).apply(node);
List<CodePoint> codePoints = visitor.codePoints;
- infoList.add(new SourceMapInfo(
- element, code, node,
+ elementSourceMapInfos[element] = new SourceMapInfo(
+ element,
+ code,
+ node,
codePoints,
- codePositions/*strategy.codePositions*/,
- nodeMap));
+ codePositions,
+ nodeMap);
});
- } else {
+ }
+ if (forMain) {
// TODO(johnniwinther): Supported multiple output units.
RecordedSourceInformationProcess process = strategy.processMap.keys.first;
js.Node node = strategy.processMap[process];
@@ -371,19 +378,32 @@ class SourceMapProcessor {
codePositions = process.codePositions;
CodePointComputer visitor =
new CodePointComputer(sourceFileManager, code, nodeMap);
- visitor.apply(node);
+ new JavaScriptTracer(codePositions, [visitor]).apply(node);
List<CodePoint> codePoints = visitor.codePoints;
- infoList.add(new SourceMapInfo(
+ mainSourceMapInfo = new SourceMapInfo(
null, code, node,
codePoints,
codePositions,
- nodeMap));
+ nodeMap);
}
- return infoList;
+ return new SourceMaps(
+ sourceFileManager, mainSourceMapInfo, elementSourceMapInfos);
}
}
+class SourceMaps {
+ final SourceFileManager sourceFileManager;
+ // TODO(johnniwinther): Supported multiple output units.
+ final SourceMapInfo mainSourceMapInfo;
+ final Map<Element, SourceMapInfo> elementSourceMapInfos;
+
+ SourceMaps(
+ this.sourceFileManager,
+ this.mainSourceMapInfo,
+ this.elementSourceMapInfos);
+}
+
/// Source mapping information for the JavaScript code of an [Element].
class SourceMapInfo {
final String name;
@@ -457,7 +477,7 @@ class _FilteredLocationMap implements LocationMap {
/// Visitor that computes the [CodePoint]s for source mapping locations.
-class CodePointComputer extends js.BaseVisitor {
+class CodePointComputer extends TraceListener {
final SourceFileManager sourceFileManager;
final String code;
final LocationMap nodeMap;
@@ -483,11 +503,20 @@ class CodePointComputer extends js.BaseVisitor {
return line;
}
+ /// Called when [node] defines a step of the given [kind] at the given
+ /// [offset] when the generated JavaScript code.
+ void onStep(js.Node node, Offset offset, StepKind kind) {
+ register('$kind', node);
+ }
+
void register(String kind, js.Node node, {bool expectInfo: true}) {
String dartCodeFromSourceLocation(SourceLocation sourceLocation) {
SourceFile sourceFile =
sourceFileManager.getSourceFile(sourceLocation.sourceUri);
+ if (sourceFile == null) {
+ return sourceLocation.shortText;
+ }
return sourceFile.getLineText(sourceLocation.line)
.substring(sourceLocation.column).trim();
}
@@ -523,57 +552,6 @@ class CodePointComputer extends js.BaseVisitor {
});
}
}
-
- void apply(js.Node node) {
- node.accept(this);
- }
-
- void visitNode(js.Node node) {
- register('${node.runtimeType}', node, expectInfo: false);
- super.visitNode(node);
- }
-
- @override
- void visitNew(js.New node) {
- node.arguments.forEach(apply);
- register('New', node);
- }
-
- @override
- void visitReturn(js.Return node) {
- if (node.value != null) {
- apply(node.value);
- }
- register('Return', node);
- }
-
- @override
- void visitCall(js.Call node) {
- apply(node.target);
- node.arguments.forEach(apply);
- register('Call (${node.target.runtimeType})', node);
- }
-
- @override
- void visitFun(js.Fun node) {
- node.visitChildren(this);
- register('Fun', node);
- }
-
- @override
- visitExpressionStatement(js.ExpressionStatement node) {
- node.visitChildren(this);
- }
-
- @override
- visitBinary(js.Binary node) {
- node.visitChildren(this);
- }
-
- @override
- visitAccess(js.PropertyAccess node) {
- node.visitChildren(this);
- }
}
/// A JavaScript code point and its mapped dart source location.
@@ -596,3 +574,24 @@ class CodePoint {
'location=$sourceLocation]';
}
}
+
+class IOSourceFileManager implements SourceFileManager {
+ final Uri base;
+
+ Map<Uri, SourceFile> sourceFiles = <Uri, SourceFile>{};
+
+ IOSourceFileManager(this.base);
+
+ SourceFile getSourceFile(var uri) {
+ Uri absoluteUri;
+ if (uri is Uri) {
+ absoluteUri = base.resolveUri(uri);
+ } else {
+ absoluteUri = base.resolve(uri);
+ }
+ return sourceFiles.putIfAbsent(absoluteUri, () {
+ String text = new File.fromUri(absoluteUri).readAsStringSync();
+ return new StringSourceFile.fromUri(absoluteUri, text);
+ });
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698