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

Unified Diff: pkg/compiler/lib/src/cps_ir/cps_ir_builder.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 | « no previous file | pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.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.dart
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
index 6c324d898e1b3b6f195660e20a5192579e1eccfc..cca5f7b06477020bf2f21580b9c850083414f057 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
@@ -624,12 +624,13 @@ class IrBuilder {
ir.Primitive _buildInvokeSuper(Element target,
Selector selector,
- List<ir.Primitive> arguments) {
+ List<ir.Primitive> arguments,
+ SourceInformation sourceInformation) {
assert(target.isInstanceMember);
assert(isOpen);
return _continueWithExpression(
(k) => new ir.InvokeMethodDirectly(
- buildThis(), target, selector, arguments, k));
+ buildThis(), target, selector, arguments, k, sourceInformation));
}
ir.Primitive _buildInvokeDynamic(ir.Primitive receiver,
@@ -655,9 +656,11 @@ class IrBuilder {
/// Create a [ir.Constant] from [value] and add it to the CPS term.
- ir.Constant buildConstant(ConstantValue value) {
+ ir.Constant buildConstant(ConstantValue value,
+ {SourceInformation sourceInformation}) {
assert(isOpen);
- return addPrimitive(new ir.Constant(value));
+ return addPrimitive(
+ new ir.Constant(value, sourceInformation: sourceInformation));
}
/// Create an integer constant and add it to the CPS term.
@@ -793,63 +796,74 @@ class IrBuilder {
/// Create a invocation of the [method] on the super class where the call
/// structure is defined [callStructure] and the argument values are defined
/// by [arguments].
- ir.Primitive buildSuperMethodInvocation(MethodElement method,
- CallStructure callStructure,
- List<ir.Primitive> arguments) {
+ ir.Primitive buildSuperMethodInvocation(
+ MethodElement method,
+ CallStructure callStructure,
+ List<ir.Primitive> arguments,
+ {SourceInformation sourceInformation}) {
// TODO(johnniwinther): This shouldn't be necessary.
SelectorKind kind = Elements.isOperatorName(method.name)
? SelectorKind.OPERATOR : SelectorKind.CALL;
Selector selector =
new Selector(kind, method.memberName, callStructure);
- return _buildInvokeSuper(method, selector, arguments);
+ return _buildInvokeSuper(method, selector, arguments, sourceInformation);
}
/// Create a read access of the [method] on the super class, i.e. a
/// closurization of [method].
- ir.Primitive buildSuperMethodGet(MethodElement method) {
+ ir.Primitive buildSuperMethodGet(MethodElement method,
+ {SourceInformation sourceInformation}) {
// TODO(johnniwinther): This should have its own ir node.
return _buildInvokeSuper(
method,
new Selector.getter(method.name, method.library),
- const <ir.Primitive>[]);
+ const <ir.Primitive>[],
+ sourceInformation);
}
/// Create a getter invocation of the [getter] on the super class.
- ir.Primitive buildSuperGetterGet(MethodElement getter) {
+ ir.Primitive buildSuperGetterGet(MethodElement getter,
+ SourceInformation sourceInformation) {
// TODO(johnniwinther): This should have its own ir node.
return _buildInvokeSuper(
getter,
new Selector.getter(getter.name, getter.library),
- const <ir.Primitive>[]);
+ const <ir.Primitive>[],
+ sourceInformation);
}
/// Create an setter invocation of the [setter] on the super class with
/// [value].
ir.Primitive buildSuperSetterSet(MethodElement setter,
- ir.Primitive value) {
+ ir.Primitive value,
+ {SourceInformation sourceInformation}) {
// TODO(johnniwinther): This should have its own ir node.
_buildInvokeSuper(
setter,
new Selector.setter(setter.name, setter.library),
- <ir.Primitive>[value]);
+ <ir.Primitive>[value],
+ sourceInformation);
return value;
}
/// Create an invocation of the index [method] on the super class with
/// the provided [index].
ir.Primitive buildSuperIndex(MethodElement method,
- ir.Primitive index) {
+ ir.Primitive index,
+ {SourceInformation sourceInformation}) {
return _buildInvokeSuper(
- method, new Selector.index(), <ir.Primitive>[index]);
+ method, new Selector.index(), <ir.Primitive>[index],
+ sourceInformation);
}
/// Create an invocation of the index set [method] on the super class with
/// the provided [index] and [value].
ir.Primitive buildSuperIndexSet(MethodElement method,
ir.Primitive index,
- ir.Primitive value) {
+ ir.Primitive value,
+ {SourceInformation sourceInformation}) {
_buildInvokeSuper(method, new Selector.indexSet(),
- <ir.Primitive>[index, value]);
+ <ir.Primitive>[index, value], sourceInformation);
return value;
}
@@ -859,8 +873,11 @@ class IrBuilder {
ir.Primitive buildDynamicInvocation(ir.Primitive receiver,
Selector selector,
TypeMask mask,
- List<ir.Primitive> arguments) {
- return _buildInvokeDynamic(receiver, selector, mask, arguments);
+ List<ir.Primitive> arguments,
+ {SourceInformation sourceInformation}) {
+ return _buildInvokeDynamic(
+ receiver, selector, mask, arguments,
+ sourceInformation: sourceInformation);
}
/// Create a dynamic getter invocation on [receiver] where the getter name is
@@ -925,11 +942,14 @@ class IrBuilder {
/// Create an invocation of the the [local] variable or parameter where
/// argument structure is defined by [callStructure] and the argument values
/// are defined by [arguments].
- ir.Primitive buildLocalVariableInvocation(LocalVariableElement local,
- CallStructure callStructure,
- List<ir.Primitive> arguments) {
+ ir.Primitive buildLocalVariableInvocation(
+ LocalVariableElement local,
+ CallStructure callStructure,
+ List<ir.Primitive> arguments,
+ {SourceInformation callSourceInformation}) {
return buildCallInvocation(
- buildLocalVariableGet(local), callStructure, arguments);
+ buildLocalVariableGet(local), callStructure, arguments,
+ sourceInformation: callSourceInformation);
}
/// Create an invocation of the local [function] where argument structure is
@@ -938,10 +958,12 @@ class IrBuilder {
ir.Primitive buildLocalFunctionInvocation(
LocalFunctionElement function,
CallStructure callStructure,
- List<ir.Primitive> arguments) {
+ List<ir.Primitive> arguments,
+ SourceInformation sourceInformation) {
// TODO(johnniwinther): Maybe this should have its own ir node.
return buildCallInvocation(
- buildLocalFunctionGet(function), callStructure, arguments);
+ buildLocalFunctionGet(function), callStructure, arguments,
+ sourceInformation: sourceInformation);
}
/// Create a static invocation of [function] where argument structure is
@@ -974,7 +996,7 @@ class IrBuilder {
/// Create a getter invocation of the static [getter].
ir.Primitive buildStaticGetterGet(MethodElement getter,
- {SourceInformation sourceInformation}) {
+ SourceInformation sourceInformation) {
Selector selector = new Selector.getter(getter.name, getter.library);
return _buildInvokeStatic(
getter, selector, const <ir.Primitive>[], sourceInformation);
@@ -1958,7 +1980,7 @@ class IrBuilder {
IrBuilder builder = makeDelimitedBuilder(newReturn.environment);
ir.Primitive value = builder.environment.discard(1);
buildFinallyBlock(builder);
- if (builder.isOpen) builder.buildReturn(value);
+ if (builder.isOpen) builder.buildReturn(value: value);
newReturn.continuation.body = builder._root;
exits.add(newReturn.continuation);
}
@@ -1973,7 +1995,7 @@ class IrBuilder {
/// Create a return statement `return value;` or `return;` if [value] is
/// null.
- void buildReturn([ir.Primitive value]) {
+ void buildReturn({ir.Primitive value, SourceInformation sourceInformation}) {
// Build(Return(e), C) = C'[InvokeContinuation(return, x)]
// where (C', x) = Build(e, C)
//
@@ -1983,7 +2005,8 @@ class IrBuilder {
value = buildNullConstant();
}
if (state.returnCollector == null) {
- add(new ir.InvokeContinuation(state.returnContinuation, [value]));
+ add(new ir.InvokeContinuation(state.returnContinuation, [value],
+ sourceInformation: sourceInformation));
_current = null;
} else {
// Inside the try block of try/finally, all returns go to a join-point
@@ -2305,12 +2328,15 @@ class IrBuilder {
/// Add [functionElement] to the environment with provided [definition].
void declareLocalFunction(LocalFunctionElement functionElement,
- ClosureClassElement classElement) {
- ir.Primitive closure = buildFunctionExpression(classElement);
+ ClosureClassElement classElement,
+ SourceInformation sourceInformation) {
+ ir.Primitive closure =
+ buildFunctionExpression(classElement, sourceInformation);
declareLocalVariable(functionElement, initialValue: closure);
}
- ir.Primitive buildFunctionExpression(ClosureClassElement classElement) {
+ ir.Primitive buildFunctionExpression(ClosureClassElement classElement,
+ SourceInformation sourceInformation) {
List<ir.Primitive> arguments = <ir.Primitive>[];
for (ClosureFieldElement field in classElement.closureFields) {
// Captured 'this' is not available as a local in the current environment,
@@ -2320,8 +2346,8 @@ class IrBuilder {
: environment.lookup(field.local);
arguments.add(value);
}
- return addPrimitive(
- new ir.CreateInstance(classElement, arguments, const <ir.Primitive>[]));
+ return addPrimitive(new ir.CreateInstance(
+ classElement, arguments, const <ir.Primitive>[], sourceInformation));
}
/// Create a read access of [local] variable or parameter.
@@ -2430,13 +2456,14 @@ class IrBuilder {
ir.Primitive buildInvokeDirectly(FunctionElement target,
ir.Primitive receiver,
- List<ir.Primitive> arguments) {
+ List<ir.Primitive> arguments,
+ {SourceInformation sourceInformation}) {
assert(isOpen);
Selector selector =
new Selector.call(target.name, target.library, arguments.length);
return _continueWithExpression(
(k) => new ir.InvokeMethodDirectly(
- receiver, target, selector, arguments, k));
+ receiver, target, selector, arguments, k, sourceInformation));
}
/// Loads parameters to a constructor body into the environment.
@@ -2459,10 +2486,12 @@ class IrBuilder {
/// Create a constructor invocation of [element] on [type] where the
/// constructor name and argument structure are defined by [callStructure] and
/// the argument values are defined by [arguments].
- ir.Primitive buildConstructorInvocation(ConstructorElement element,
- CallStructure callStructure,
- DartType type,
- List<ir.Primitive> arguments) {
+ ir.Primitive buildConstructorInvocation(
+ ConstructorElement element,
+ CallStructure callStructure,
+ DartType type,
+ List<ir.Primitive> arguments,
+ SourceInformation sourceInformation) {
assert(isOpen);
Selector selector =
new Selector(SelectorKind.CALL, element.memberName, callStructure);
@@ -2479,8 +2508,8 @@ class IrBuilder {
..addAll(typeArguments);
}
return _continueWithExpression(
- (k) => new ir.InvokeConstructor(type, element, selector,
- arguments, k));
+ (k) => new ir.InvokeConstructor(
+ type, element, selector, arguments, k, sourceInformation));
}
ir.Primitive buildTypeExpression(DartType type) {
@@ -2508,7 +2537,8 @@ class IrBuilder {
/// if we are currently building a constructor field initializer, from the
/// corresponding type argument (field initializers are evaluated before the
/// receiver object is created).
- ir.Primitive buildTypeVariableAccess(TypeVariableType variable) {
+ ir.Primitive buildTypeVariableAccess(TypeVariableType variable,
+ {SourceInformation sourceInformation}) {
// If the local exists in the environment, use that.
// This is put here when we are inside a constructor or field initializer,
// (or possibly a closure inside one of these).
@@ -2520,7 +2550,8 @@ class IrBuilder {
// If the type variable is not in a local, read its value from the
// receiver object.
ir.Primitive target = buildThis();
- return addPrimitive(new ir.ReadTypeVariable(variable, target));
+ return addPrimitive(
+ new ir.ReadTypeVariable(variable, target, sourceInformation));
}
/// Make the given type variable accessible through the local environment
@@ -2532,9 +2563,12 @@ class IrBuilder {
}
/// Reifies the value of [variable] on the current receiver object.
- ir.Primitive buildReifyTypeVariable(TypeVariableType variable) {
- ir.Primitive typeArgument = buildTypeVariableAccess(variable);
- return addPrimitive(new ir.ReifyRuntimeType(typeArgument));
+ ir.Primitive buildReifyTypeVariable(TypeVariableType variable,
+ SourceInformation sourceInformation) {
+ ir.Primitive typeArgument =
+ buildTypeVariableAccess(variable, sourceInformation: sourceInformation);
+ return addPrimitive(
+ new ir.ReifyRuntimeType(typeArgument, sourceInformation));
}
ir.Primitive buildInvocationMirror(Selector selector,
« no previous file with comments | « no previous file | pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698