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

Unified Diff: pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart

Issue 1229673006: Generated source mapping through CPS. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 5 years, 5 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
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart ('k') | pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
index 797a68964ff36b79a630339c7319a327b5397aac..17c09aec160ffbb79671cf0811d403019713f034 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
@@ -284,8 +284,11 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
targetConstructor,
callStructure,
targetType,
- arguments);
- irBuilder.buildReturn(instance);
+ arguments,
+ sourceInformationBuilder.buildNew(node));
+ irBuilder.buildReturn(
+ value: instance,
+ sourceInformation: sourceInformationBuilder.buildReturn(node));
}
visitFor(ast.For node) {
@@ -399,7 +402,9 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ir.Primitive visitReturn(ast.Return node) {
assert(irBuilder.isOpen);
assert(invariant(node, node.beginToken.value != 'native'));
- irBuilder.buildReturn(build(node.expression));
+ irBuilder.buildReturn(
+ value: build(node.expression),
+ sourceInformation: sourceInformationBuilder.buildReturn(node));
return null;
}
@@ -533,9 +538,11 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
return irBuilder.state.constants.getConstantValueForVariable(element);
}
- ir.Primitive buildConstantExpression(ConstantExpression expression) {
+ ir.Primitive buildConstantExpression(ConstantExpression expression,
+ SourceInformation sourceInformation) {
return irBuilder.buildConstant(
- irBuilder.state.constants.getConstantValue(expression));
+ irBuilder.state.constants.getConstantValue(expression),
+ sourceInformation: sourceInformation);
}
ir.Primitive visitLiteralList(ast.LiteralList node) {
@@ -599,7 +606,7 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
} else {
// The call to assert and its argument expression must be ignored
// in production mode.
- // Assertions can only occur in expression statements, so no value needs
+ // Assertions can onl)y occur in expression statements, so no value needs
// to be returned.
return null;
}
@@ -613,13 +620,15 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
@override
ir.Primitive visitExpressionInvoke(ast.Send node,
ast.Node expression,
- ast.NodeList arguments,
+ ast.NodeList argumentsNode,
Selector selector, _) {
ir.Primitive receiver = visit(expression);
List<ir.Primitive> arguments = node.arguments.mapToList(visit);
arguments = normalizeDynamicArguments(selector.callStructure, arguments);
return irBuilder.buildCallInvocation(
- receiver, selector.callStructure, arguments);
+ receiver, selector.callStructure, arguments,
+ sourceInformation:
+ sourceInformationBuilder.buildCall(node, argumentsNode));
}
/// Returns `true` if [node] is a super call.
@@ -632,7 +641,8 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ir.Primitive handleConstantGet(
ast.Node node,
ConstantExpression constant, _) {
- return buildConstantExpression(constant);
+ return buildConstantExpression(constant,
+ sourceInformationBuilder.buildGet(node));
}
/// If [node] is null, returns this.
@@ -671,7 +681,8 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ast.Send node,
ConstantExpression constant,
_) {
- return buildConstantExpression(constant);
+ return buildConstantExpression(constant,
+ sourceInformationBuilder.buildGet(node));
}
@override
@@ -680,7 +691,8 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
LocalVariableElement element,
_) {
return element.isConst
- ? irBuilder.buildConstant(getConstantForVariable(element))
+ ? irBuilder.buildConstant(getConstantForVariable(element),
+ sourceInformation: sourceInformationBuilder.buildGet(node))
: irBuilder.buildLocalVariableGet(element);
}
@@ -717,7 +729,8 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ast.Send node,
FunctionElement getter,
_) {
- return irBuilder.buildStaticGetterGet(getter);
+ return irBuilder.buildStaticGetterGet(
+ getter, sourceInformationBuilder.buildGet(node));
}
@override
@@ -733,7 +746,8 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ast.Send node,
FunctionElement getter,
_) {
- return irBuilder.buildSuperGetterGet(getter);
+ return irBuilder.buildSuperGetterGet(
+ getter, sourceInformationBuilder.buildGet(node));
}
@override
@@ -763,14 +777,17 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
return irBuilder.buildThis();
}
- ir.Primitive translateTypeVariableTypeLiteral(TypeVariableElement element) {
- return irBuilder.buildReifyTypeVariable(element.type);
+ ir.Primitive translateTypeVariableTypeLiteral(
+ TypeVariableElement element,
+ SourceInformation sourceInformation) {
+ return irBuilder.buildReifyTypeVariable(element.type, sourceInformation);
}
@override
ir.Primitive visitTypeVariableTypeLiteralGet(ast.Send node,
TypeVariableElement element, _) {
- return translateTypeVariableTypeLiteral(element);
+ return translateTypeVariableTypeLiteral(element,
+ sourceInformationBuilder.buildGet(node));
}
ir.Primitive translateLogicalOperator(ast.Expression left,
@@ -842,7 +859,9 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
List<ir.Primitive> arguments = <ir.Primitive>[visit(right)];
arguments = normalizeDynamicArguments(selector.callStructure, arguments);
return irBuilder.buildDynamicInvocation(
- receiver, selector, elements.getTypeMask(node), arguments);
+ receiver, selector, elements.getTypeMask(node), arguments,
+ sourceInformation:
+ sourceInformationBuilder.buildCall(node, node.selector));
}
@override
@@ -979,10 +998,12 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ir.Primitive translateCallInvoke(ir.Primitive target,
ast.NodeList arguments,
- CallStructure callStructure) {
+ CallStructure callStructure,
+ SourceInformation sourceInformation) {
return irBuilder.buildCallInvocation(target, callStructure,
- translateDynamicArguments(arguments, callStructure));
+ translateDynamicArguments(arguments, callStructure),
+ sourceInformation: sourceInformation);
}
@override
@@ -992,8 +1013,10 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ast.NodeList arguments,
CallStructure callStructure,
_) {
- ir.Primitive target = buildConstantExpression(constant);
- return translateCallInvoke(target, arguments, callStructure);
+ ir.Primitive target = buildConstantExpression(constant,
+ sourceInformationBuilder.buildGet(node));
+ return translateCallInvoke(target, arguments, callStructure,
+ sourceInformationBuilder.buildCall(node, arguments));
}
@override
@@ -1005,7 +1028,9 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
_) {
return irBuilder.buildDynamicInvocation(
translateReceiver(receiver), selector, elements.getTypeMask(node),
- translateDynamicArguments(arguments, selector.callStructure));
+ translateDynamicArguments(arguments, selector.callStructure),
+ sourceInformation:
+ sourceInformationBuilder.buildCall(node, node.selector));
}
@override
@@ -1030,7 +1055,9 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
CallStructure callStructure,
_) {
return irBuilder.buildLocalVariableInvocation(element, callStructure,
- translateDynamicArguments(arguments, callStructure));
+ translateDynamicArguments(arguments, callStructure),
+ callSourceInformation:
+ sourceInformationBuilder.buildCall(node, arguments));
}
@override
@@ -1041,7 +1068,8 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
CallStructure callStructure,
_) {
return irBuilder.buildLocalFunctionInvocation(function, callStructure,
- translateDynamicArguments(arguments, callStructure));
+ translateDynamicArguments(arguments, callStructure),
+ sourceInformationBuilder.buildCall(node, arguments));
}
@override
@@ -1060,7 +1088,9 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ir.Primitive target = buildStaticFieldGet(field, src);
return irBuilder.buildCallInvocation(target,
callStructure,
- translateDynamicArguments(arguments, callStructure));
+ translateDynamicArguments(arguments, callStructure),
+ sourceInformation:
+ sourceInformationBuilder.buildCall(node, arguments));
}
@override
@@ -1092,10 +1122,13 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
if (compiler.backend.isForeign(getter)) {
return giveup(node, 'handleStaticGetterInvoke: foreign: $getter');
}
- ir.Primitive target = irBuilder.buildStaticGetterGet(getter);
+ ir.Primitive target = irBuilder.buildStaticGetterGet(
+ getter, sourceInformationBuilder.buildGet(node));
return irBuilder.buildCallInvocation(target,
callStructure,
- translateDynamicArguments(arguments, callStructure));
+ translateDynamicArguments(arguments, callStructure),
+ sourceInformation:
+ sourceInformationBuilder.buildCall(node, arguments));
}
@override
@@ -1108,7 +1141,9 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ir.Primitive target = irBuilder.buildSuperFieldGet(field);
return irBuilder.buildCallInvocation(target,
callStructure,
- translateDynamicArguments(arguments, callStructure));
+ translateDynamicArguments(arguments, callStructure),
+ sourceInformation:
+ sourceInformationBuilder.buildCall(node, arguments));
}
@override
@@ -1118,10 +1153,13 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ast.NodeList arguments,
CallStructure callStructure,
_) {
- ir.Primitive target = irBuilder.buildSuperGetterGet(getter);
+ ir.Primitive target = irBuilder.buildSuperGetterGet(
+ getter, sourceInformationBuilder.buildGet(node));
return irBuilder.buildCallInvocation(target,
callStructure,
- translateDynamicArguments(arguments, callStructure));
+ translateDynamicArguments(arguments, callStructure),
+ sourceInformation:
+ sourceInformationBuilder.buildCall(node, arguments));
}
@override
@@ -1132,7 +1170,9 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
CallStructure callStructure,
_) {
return irBuilder.buildSuperMethodInvocation(method, callStructure,
- translateDynamicArguments(arguments, callStructure));
+ translateDynamicArguments(arguments, callStructure),
+ sourceInformation:
+ sourceInformationBuilder.buildCall(node, node.selector));
}
@override
@@ -1165,7 +1205,11 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ast.NodeList arguments,
CallStructure callStructure,
_) {
- return translateCallInvoke(irBuilder.buildThis(), arguments, callStructure);
+ return translateCallInvoke(
+ irBuilder.buildThis(),
+ arguments,
+ callStructure,
+ sourceInformationBuilder.buildCall(node, arguments));
}
@override
@@ -1176,9 +1220,11 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
CallStructure callStructure,
_) {
return translateCallInvoke(
- translateTypeVariableTypeLiteral(element),
+ translateTypeVariableTypeLiteral(
+ element, sourceInformationBuilder.buildGet(node)),
arguments,
- callStructure);
+ callStructure,
+ sourceInformationBuilder.buildCall(node, arguments));
}
@override
@@ -1327,7 +1373,10 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
CompoundRhs rhs,
arg) {
return translateCompounds(
- getValue: () => buildConstantExpression(constant),
+ getValue: () {
+ return buildConstantExpression(constant,
+ sourceInformationBuilder.buildGet(node));
+ },
rhs: rhs,
setValue: (value) {}, // The binary operator will throw before this.
operatorTypeMask: elements.getOperatorTypeMaskInComplexSendSet(node));
@@ -1419,7 +1468,8 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
SourceInformation src = sourceInformationBuilder.buildGet(node);
return irBuilder.buildStaticFieldGet(getter, src);
case CompoundGetter.GETTER:
- return irBuilder.buildStaticGetterGet(getter);
+ return irBuilder.buildStaticGetterGet(
+ getter, sourceInformationBuilder.buildGet(node));
case CompoundGetter.METHOD:
return irBuilder.buildStaticFunctionGet(getter);
case CompoundGetter.UNRESOLVED:
@@ -1473,7 +1523,8 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
case CompoundGetter.FIELD:
return irBuilder.buildSuperFieldGet(getter);
case CompoundGetter.GETTER:
- return irBuilder.buildSuperGetterGet(getter);
+ return irBuilder.buildSuperGetterGet(
+ getter, sourceInformationBuilder.buildGet(node));
case CompoundGetter.METHOD:
return irBuilder.buildSuperMethodGet(getter);
case CompoundGetter.UNRESOLVED:
@@ -1505,7 +1556,11 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
CompoundRhs rhs,
arg) {
return translateCompounds(
- getValue: () => irBuilder.buildReifyTypeVariable(typeVariable.type),
+ getValue: () {
+ return irBuilder.buildReifyTypeVariable(
+ typeVariable.type,
+ sourceInformationBuilder.buildGet(node));
+ },
rhs: rhs,
setValue: (value) {}, // The binary operator will throw before this.
operatorTypeMask: elements.getOperatorTypeMaskInComplexSendSet(node));
@@ -1621,7 +1676,9 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ir.Primitive translateConstant(ast.Node node) {
assert(irBuilder.isOpen);
- return irBuilder.buildConstant(getConstantForNode(node));
+ return irBuilder.buildConstant(
+ getConstantForNode(node),
+ sourceInformation: sourceInformationBuilder.buildGet(node));
}
ir.Primitive visitThrow(ast.Throw node) {
@@ -2255,13 +2312,15 @@ class JsIrBuilderVisitor extends IrBuilderVisitor {
}
ir.Primitive visitFunctionExpression(ast.FunctionExpression node) {
- return irBuilder.buildFunctionExpression(makeSubFunction(node));
+ return irBuilder.buildFunctionExpression(makeSubFunction(node),
+ sourceInformationBuilder.buildCreate(node));
}
visitFunctionDeclaration(ast.FunctionDeclaration node) {
LocalFunctionElement element = elements[node.function];
Object inner = makeSubFunction(node.function);
- irBuilder.declareLocalFunction(element, inner);
+ irBuilder.declareLocalFunction(element, inner,
+ sourceInformationBuilder.buildCreate(node.function));
}
Map mapValues(Map map, dynamic fn(dynamic)) {
@@ -2376,7 +2435,12 @@ class JsIrBuilderVisitor extends IrBuilderVisitor {
return withBuilder(builder, () {
irBuilder.buildFunctionHeader(<Local>[]);
ir.Primitive initialValue = visit(element.initializer);
- irBuilder.buildReturn(initialValue);
+ ast.VariableDefinitions node = element.node;
+ ast.SendSet sendSet = node.definitions.nodes.head;
+ irBuilder.buildReturn(
+ value: initialValue,
+ sourceInformation:
+ sourceInformationBuilder.buildReturn(sendSet.assignmentOperator));
return irBuilder.makeFunctionDefinition();
});
}
@@ -2501,10 +2565,16 @@ class JsIrBuilderVisitor extends IrBuilderVisitor {
// Native fields are initialized elsewhere.
}
}, includeSuperAndInjectedMembers: true);
+
ir.Primitive instance = new ir.CreateInstance(
classElement,
instanceArguments,
- typeInformation);
+ typeInformation,
+ constructor.hasNode
+ ? sourceInformationBuilder.buildCreate(constructor.node)
+ // TODO(johnniwinther): Provide source information for creation
+ // through synthetic constructors.
+ : null);
irBuilder.add(new ir.LetPrim(instance));
// --- Call constructor bodies ---
@@ -2519,7 +2589,10 @@ class JsIrBuilderVisitor extends IrBuilderVisitor {
}
// --- step 4: return the created object ----
- irBuilder.buildReturn(instance);
+ irBuilder.buildReturn(
+ value: instance,
+ sourceInformation:
+ sourceInformationBuilder.buildImplicitReturn(constructor));
return irBuilder.makeFunctionDefinition();
});
@@ -2974,7 +3047,8 @@ class JsIrBuilderVisitor extends IrBuilderVisitor {
target,
callStructure,
constructor.computeEffectiveTargetType(type),
- arguments);
+ arguments,
+ sourceInformationBuilder.buildNew(node));
}
@override
@@ -3027,7 +3101,7 @@ class JsIrBuilderVisitor extends IrBuilderVisitor {
ir.Primitive buildStaticFieldGet(FieldElement field, SourceInformation src) {
ConstantValue constant = getConstantForVariable(field);
if (constant != null && !field.isAssignable) {
- return irBuilder.buildConstant(constant);
+ return irBuilder.buildConstant(constant, sourceInformation: src);
} else if (backend.constants.lazyStatics.contains(field)) {
return irBuilder.buildStaticFieldLazyGet(field, src);
} else {
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart ('k') | pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698