Index: pkg/compiler/lib/src/io/position_information.dart |
diff --git a/pkg/compiler/lib/src/io/position_information.dart b/pkg/compiler/lib/src/io/position_information.dart |
index 79e58c3ce35dd40a4a180d457ceadb073ed449b5..83460d5d8a77b4dc83d257584e208c33424e074f 100644 |
--- a/pkg/compiler/lib/src/io/position_information.dart |
+++ b/pkg/compiler/lib/src/io/position_information.dart |
@@ -8,20 +8,13 @@ |
library dart2js.source_information.position; |
import '../common.dart'; |
-import '../elements/elements.dart' show |
- AstElement, |
- FieldElement, |
- LocalElement; |
+import '../elements/elements.dart' show AstElement, FieldElement, LocalElement; |
import '../js/js.dart' as js; |
import '../js/js_source_mapping.dart'; |
import '../js/js_debug.dart'; |
-import '../tree/tree.dart' show |
- FunctionExpression, |
- Node, |
- Send; |
+import '../tree/tree.dart' show FunctionExpression, Node, Send; |
-import 'code_output.dart' show |
- CodeBuffer; |
+import 'code_output.dart' show CodeBuffer; |
import 'source_file.dart'; |
import 'source_information.dart'; |
@@ -34,8 +27,7 @@ class PositionSourceInformation extends SourceInformation { |
@override |
final SourceLocation closingPosition; |
- PositionSourceInformation(this.startPosition, |
- [this.closingPosition]); |
+ PositionSourceInformation(this.startPosition, [this.closingPosition]); |
@override |
List<SourceLocation> get sourceLocations { |
@@ -60,14 +52,14 @@ class PositionSourceInformation extends SourceInformation { |
int get hashCode { |
return 0x7FFFFFFF & |
- (startPosition.hashCode * 17 + closingPosition.hashCode * 19); |
+ (startPosition.hashCode * 17 + closingPosition.hashCode * 19); |
} |
bool operator ==(other) { |
if (identical(this, other)) return true; |
if (other is! PositionSourceInformation) return false; |
return startPosition == other.startPosition && |
- closingPosition == other.closingPosition; |
+ closingPosition == other.closingPosition; |
} |
/// Create a textual representation of the source information using [uriText] |
@@ -78,11 +70,11 @@ class PositionSourceInformation extends SourceInformation { |
// Use 1-based line/column info to match usual dart tool output. |
if (startPosition != null) { |
sb.write('[${startPosition.line + 1},' |
- '${startPosition.column + 1}]'); |
+ '${startPosition.column + 1}]'); |
} |
if (closingPosition != null) { |
sb.write('-[${closingPosition.line + 1},' |
- '${closingPosition.column + 1}]'); |
+ '${closingPosition.column + 1}]'); |
} |
return sb.toString(); |
} |
@@ -158,9 +150,8 @@ class PositionSourceInformationBuilder implements SourceInformationBuilder { |
SourceInformation buildDeclaration(AstElement element) { |
if (element.isSynthesized) { |
- return new PositionSourceInformation( |
- new OffsetSourceLocation( |
- sourceFile, element.position.charOffset, name)); |
+ return new PositionSourceInformation(new OffsetSourceLocation( |
+ sourceFile, element.position.charOffset, name)); |
} else { |
return new PositionSourceInformation( |
new OffsetSourceLocation(sourceFile, |
@@ -188,16 +179,13 @@ class PositionSourceInformationBuilder implements SourceInformationBuilder { |
@override |
SourceInformation buildImplicitReturn(AstElement element) { |
if (element.isSynthesized) { |
- return new PositionSourceInformation( |
- new OffsetSourceLocation( |
- sourceFile, element.position.charOffset, name)); |
+ return new PositionSourceInformation(new OffsetSourceLocation( |
+ sourceFile, element.position.charOffset, name)); |
} else { |
- return new PositionSourceInformation( |
- new OffsetSourceLocation(sourceFile, |
- element.resolvedAst.node.getEndToken().charOffset, name)); |
+ return new PositionSourceInformation(new OffsetSourceLocation( |
+ sourceFile, element.resolvedAst.node.getEndToken().charOffset, name)); |
} |
- } |
- |
+ } |
@override |
SourceInformation buildLoop(Node node) => buildBegin(node); |
@@ -333,7 +321,7 @@ class CodePosition { |
String toString() { |
return 'CodePosition(start=$startPosition,' |
- 'end=$endPosition,closing=$closingPosition)'; |
+ 'end=$endPosition,closing=$closingPosition)'; |
} |
} |
@@ -347,12 +335,10 @@ class CodePositionRecorder implements CodePositionMap { |
Map<js.Node, CodePosition> _codePositionMap = |
new Map<js.Node, CodePosition>.identity(); |
- void registerPositions(js.Node node, |
- int startPosition, |
- int endPosition, |
- int closingPosition) { |
- registerCodePosition(node, |
- new CodePosition(startPosition, endPosition, closingPosition)); |
+ void registerPositions( |
+ js.Node node, int startPosition, int endPosition, int closingPosition) { |
+ registerCodePosition( |
+ node, new CodePosition(startPosition, endPosition, closingPosition)); |
} |
void registerCodePosition(js.Node node, CodePosition codePosition) { |
@@ -396,8 +382,7 @@ enum SourcePositionKind { |
INNER, |
} |
-SourceLocation getSourceLocation( |
- SourceInformation sourceInformation, |
+SourceLocation getSourceLocation(SourceInformation sourceInformation, |
[SourcePositionKind sourcePositionKind = SourcePositionKind.START]) { |
if (sourceInformation == null) return null; |
switch (sourcePositionKind) { |
@@ -449,12 +434,11 @@ class PositionSourceInformationProcessor implements SourceInformationProcessor { |
CodePositionMap codePositionMap; |
List<TraceListener> traceListeners; |
- PositionSourceInformationProcessor( |
- SourceMapper sourceMapper, |
+ PositionSourceInformationProcessor(SourceMapper sourceMapper, |
[Coverage coverage]) { |
codePositionMap = coverage != null |
- ? new CodePositionCoverage(codePositionRecorder, coverage) |
- : codePositionRecorder; |
+ ? new CodePositionCoverage(codePositionRecorder, coverage) |
+ : codePositionRecorder; |
traceListeners = [new PositionTraceListener(sourceMapper)]; |
if (coverage != null) { |
traceListeners.add(new CoverageListener(coverage)); |
@@ -466,10 +450,8 @@ class PositionSourceInformationProcessor implements SourceInformationProcessor { |
} |
@override |
- void onPositions(js.Node node, |
- int startPosition, |
- int endPosition, |
- int closingPosition) { |
+ void onPositions( |
+ js.Node node, int startPosition, int endPosition, int closingPosition) { |
codePositionRecorder.registerPositions( |
node, startPosition, endPosition, closingPosition); |
} |
@@ -524,7 +506,6 @@ class NodeSourceInformation extends js.BaseVisitor<SourceInformation> { |
} |
return visit(node.value); |
} |
- |
} |
/// Mixin that add support for computing [SourceInformation] for a [js.Node]. |
@@ -535,8 +516,8 @@ class NodeToSourceInformationMixin { |
} |
/// [TraceListener] that register [SourceLocation]s with a [SourceMapper]. |
-class PositionTraceListener extends TraceListener with |
- NodeToSourceInformationMixin { |
+class PositionTraceListener extends TraceListener |
+ with NodeToSourceInformationMixin { |
final SourceMapper sourceMapper; |
PositionTraceListener(this.sourceMapper); |
@@ -617,47 +598,35 @@ class CallPosition { |
// a.m() this.m() a.b.c.d.m() |
// ^ ^ ^ |
return new CallPosition( |
- node, |
- CodePositionKind.START, |
- SourcePositionKind.START); |
+ node, CodePositionKind.START, SourcePositionKind.START); |
} else { |
// *.m() *.a.b.c.d.m() |
// ^ ^ |
return new CallPosition( |
- access.selector, |
- CodePositionKind.START, |
- SourcePositionKind.INNER); |
+ access.selector, CodePositionKind.START, SourcePositionKind.INNER); |
} |
} else if (node.target is js.VariableUse) { |
// m() |
// ^ |
return new CallPosition( |
- node, |
- CodePositionKind.START, |
- SourcePositionKind.START); |
+ node, CodePositionKind.START, SourcePositionKind.START); |
} else if (node.target is js.Fun || node.target is js.New) { |
// function(){}() new Function("...")() |
// ^ ^ |
return new CallPosition( |
- node.target, |
- CodePositionKind.END, |
- SourcePositionKind.INNER); |
+ node.target, CodePositionKind.END, SourcePositionKind.INNER); |
} else if (node.target is js.Binary || node.target is js.Call) { |
// (0,a)() m()() |
// ^ ^ |
return new CallPosition( |
- node.target, |
- CodePositionKind.END, |
- SourcePositionKind.INNER); |
+ node.target, CodePositionKind.END, SourcePositionKind.INNER); |
} else { |
assert(invariant(NO_LOCATION_SPANNABLE, false, |
message: "Unexpected property access ${nodeToString(node)}:\n" |
- "${DebugPrinter.prettyPrint(node)}")); |
+ "${DebugPrinter.prettyPrint(node)}")); |
// Don't know.... |
return new CallPosition( |
- node, |
- CodePositionKind.START, |
- SourcePositionKind.START); |
+ node, CodePositionKind.START, SourcePositionKind.START); |
} |
} |
} |
@@ -708,7 +677,8 @@ class Offset { |
/// |
final int leftToRightOffset; |
- Offset(this.statementOffset, this.leftToRightOffset, this.subexpressionOffset); |
+ Offset( |
+ this.statementOffset, this.leftToRightOffset, this.subexpressionOffset); |
String toString() { |
return 'Offset[statementOffset=$statementOffset,' |
@@ -717,13 +687,7 @@ class Offset { |
} |
} |
-enum BranchKind { |
- CONDITION, |
- LOOP, |
- CATCH, |
- FINALLY, |
- CASE, |
-} |
+enum BranchKind { CONDITION, LOOP, CATCH, FINALLY, CASE, } |
enum StepKind { |
FUN_ENTRY, |
@@ -767,7 +731,7 @@ abstract class TraceListener { |
/// Visitor that computes the [js.Node]s the are part of the JavaScript |
/// steppable execution and thus needs source mapping locations. |
-class JavaScriptTracer extends js.BaseVisitor { |
+class JavaScriptTracer extends js.BaseVisitor { |
final CodePositionMap codePositions; |
final List<TraceListener> listeners; |
@@ -785,9 +749,7 @@ class JavaScriptTracer extends js.BaseVisitor { |
bool active; |
- JavaScriptTracer(this.codePositions, |
- this.listeners, |
- {this.active: false}); |
+ JavaScriptTracer(this.codePositions, this.listeners, {this.active: false}); |
void notifyStart(js.Node node) { |
listeners.forEach((listener) => listener.onStart(node)); |
@@ -852,15 +814,15 @@ class JavaScriptTracer extends js.BaseVisitor { |
if (!active) { |
active = node.sourceInformation != null; |
} |
- leftToRightOffset = statementOffset = |
- getSyntaxOffset(node, kind: CodePositionKind.START); |
+ leftToRightOffset = |
+ statementOffset = getSyntaxOffset(node, kind: CodePositionKind.START); |
Offset entryOffset = getOffsetForNode(node, statementOffset); |
notifyStep(node, entryOffset, StepKind.FUN_ENTRY); |
visit(node.body); |
- leftToRightOffset = statementOffset = |
- getSyntaxOffset(node, kind: CodePositionKind.CLOSING); |
+ leftToRightOffset = |
+ statementOffset = getSyntaxOffset(node, kind: CodePositionKind.CLOSING); |
Offset exitOffset = getOffsetForNode(node, statementOffset); |
notifyStep(node, exitOffset, StepKind.FUN_EXIT); |
active = activeBefore; |
@@ -874,7 +836,7 @@ class JavaScriptTracer extends js.BaseVisitor { |
} |
int getSyntaxOffset(js.Node node, |
- {CodePositionKind kind: CodePositionKind.START}) { |
+ {CodePositionKind kind: CodePositionKind.START}) { |
CodePosition codePosition = codePositions[node]; |
if (codePosition != null) { |
return codePosition.getPosition(kind); |
@@ -882,18 +844,14 @@ class JavaScriptTracer extends js.BaseVisitor { |
return null; |
} |
- visitSubexpression(js.Node parent, |
- js.Expression child, |
- int codeOffset, |
- StepKind kind) { |
+ visitSubexpression( |
+ js.Node parent, js.Expression child, int codeOffset, StepKind kind) { |
var oldSteps = steps; |
steps = []; |
offsetPosition = codeOffset; |
visit(child); |
if (steps.isEmpty) { |
- notifyStep(parent, |
- getOffsetForNode(parent, offsetPosition), |
- kind); |
+ notifyStep(parent, getOffsetForNode(parent, offsetPosition), kind); |
// The [offsetPosition] should only be used by the first subexpression. |
offsetPosition = null; |
} |
@@ -904,8 +862,7 @@ class JavaScriptTracer extends js.BaseVisitor { |
visitExpressionStatement(js.ExpressionStatement node) { |
statementOffset = getSyntaxOffset(node); |
visitSubexpression( |
- node, node.expression, statementOffset, |
- StepKind.EXPRESSION_STATEMENT); |
+ node, node.expression, statementOffset, StepKind.EXPRESSION_STATEMENT); |
statementOffset = null; |
leftToRightOffset = null; |
} |
@@ -920,11 +877,10 @@ class JavaScriptTracer extends js.BaseVisitor { |
offsetPosition = null; |
visitList(node.arguments); |
offsetPosition = oldPosition; |
- CallPosition callPosition = |
- CallPosition.getSemanticPositionForCall(node); |
+ CallPosition callPosition = CallPosition.getSemanticPositionForCall(node); |
js.Node positionNode = callPosition.node; |
- int callOffset = getSyntaxOffset( |
- positionNode, kind: callPosition.codePositionKind); |
+ int callOffset = |
+ getSyntaxOffset(positionNode, kind: callPosition.codePositionKind); |
if (offsetPosition == null) { |
// Use the call offset if this is not the first subexpression. |
offsetPosition = callOffset; |
@@ -943,8 +899,7 @@ class JavaScriptTracer extends js.BaseVisitor { |
// Use the syntax offset if this is not the first subexpression. |
offsetPosition = getSyntaxOffset(node); |
} |
- notifyStep( |
- node, getOffsetForNode(node, offsetPosition), StepKind.NEW); |
+ notifyStep(node, getOffsetForNode(node, offsetPosition), StepKind.NEW); |
steps.add(node); |
offsetPosition = null; |
} |
@@ -996,8 +951,8 @@ class JavaScriptTracer extends js.BaseVisitor { |
@override |
visitIf(js.If node) { |
statementOffset = getSyntaxOffset(node); |
- visitSubexpression(node, node.condition, statementOffset, |
- StepKind.IF_CONDITION); |
+ visitSubexpression( |
+ node, node.condition, statementOffset, StepKind.IF_CONDITION); |
statementOffset = null; |
visit(node.then, BranchKind.CONDITION, true); |
visit(node.otherwise, BranchKind.CONDITION, false); |
@@ -1009,8 +964,8 @@ class JavaScriptTracer extends js.BaseVisitor { |
statementOffset = offset; |
leftToRightOffset = null; |
if (node.init != null) { |
- visitSubexpression(node, node.init, getSyntaxOffset(node), |
- StepKind.FOR_INITIALIZER); |
+ visitSubexpression( |
+ node, node.init, getSyntaxOffset(node), StepKind.FOR_INITIALIZER); |
} |
if (node.condition != null) { |
@@ -1023,8 +978,8 @@ class JavaScriptTracer extends js.BaseVisitor { |
statementOffset = offset; |
if (node.update != null) { |
- visitSubexpression(node, node.update, getSyntaxOffset(node.update), |
- StepKind.FOR_UPDATE); |
+ visitSubexpression( |
+ node, node.update, getSyntaxOffset(node.update), StepKind.FOR_UPDATE); |
} |
notifyPopBranch(); |
@@ -1150,8 +1105,8 @@ class JavaScriptTracer extends js.BaseVisitor { |
@override |
visitSwitch(js.Switch node) { |
statementOffset = getSyntaxOffset(node); |
- visitSubexpression(node, node.key, getSyntaxOffset(node), |
- StepKind.SWITCH_EXPRESSION); |
+ visitSubexpression( |
+ node, node.key, getSyntaxOffset(node), StepKind.SWITCH_EXPRESSION); |
statementOffset = null; |
leftToRightOffset = null; |
for (int i = 0; i < node.cases.length; i++) { |
@@ -1202,7 +1157,6 @@ class JavaScriptTracer extends js.BaseVisitor { |
} |
} |
- |
class Coverage { |
Set<js.Node> _nodesWithInfo = new Set<js.Node>(); |
int _nodesWithInfoCount = 0; |
@@ -1237,8 +1191,7 @@ class Coverage { |
node.expression.runtimeType, () => 0); |
_nodesWithoutInfoCountByType[node.expression.runtimeType]++; |
} else { |
- _nodesWithoutInfoCountByType.putIfAbsent( |
- node.runtimeType, () => 0); |
+ _nodesWithoutInfoCountByType.putIfAbsent(node.runtimeType, () => 0); |
_nodesWithoutInfoCountByType[node.runtimeType]++; |
} |
} |
@@ -1274,8 +1227,8 @@ class Coverage { |
sb.write(') by runtime type:'); |
List<Type> types = _nodesWithoutInfoCountByType.keys.toList(); |
types.sort((a, b) { |
- return -_nodesWithoutInfoCountByType[a].compareTo( |
- _nodesWithoutInfoCountByType[b]); |
+ return -_nodesWithoutInfoCountByType[a] |
+ .compareTo(_nodesWithoutInfoCountByType[b]); |
}); |
types.forEach((Type type) { |
@@ -1331,7 +1284,7 @@ class CodePositionCoverage implements CodePositionMap { |
CodePosition codePosition = codePositions[node]; |
if (codePosition == null) { |
coverage.registerNodesWithoutOffset(node); |
- } |
+ } |
return codePosition; |
} |
-} |
+} |