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

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

Issue 977553004: Translate constructors without bad references. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix long line Created 5 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
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart ('k') | no next file » | 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_visitor.dart
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_visitor.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_visitor.dart
index 5c8313bdace0c090f944f4babfe2479ebc0ff5b5..d52986c0f55df0a5c7f7babbb2ce420a8f4f406f 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_visitor.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_visitor.dart
@@ -194,9 +194,13 @@ abstract class IrBuilderVisitor extends ResolvedVisitor<ir.Primitive>
return irBuilder.makeConstructorDefinition(const <ConstantExpression>[],
const <ir.Initializer>[]);
} else if (element.isGenerativeConstructor) {
- initializers = buildConstructorInitializers(node, element);
- visit(node.body);
- return irBuilder.makeConstructorDefinition(defaults, initializers);
+ if (element.isExternal) {
+ return irBuilder.makeAbstractConstructorDefinition(defaults);
+ } else {
+ initializers = buildConstructorInitializers(node, element);
+ visit(node.body);
+ return irBuilder.makeConstructorDefinition(defaults, initializers);
+ }
} else {
visit(node.body);
return irBuilder.makeFunctionDefinition(defaults);
@@ -211,7 +215,7 @@ abstract class IrBuilderVisitor extends ResolvedVisitor<ir.Primitive>
void tryAddInitializingFormal(ParameterElement parameterElement) {
if (parameterElement.isInitializingFormal) {
InitializingFormalElement initializingFormal = parameterElement;
- withBuilder(irBuilder.makeDelimitedBuilder(), () {
+ withBuilder(irBuilder.makeInitializerBuilder(), () {
ir.Primitive value = irBuilder.buildLocalGet(parameterElement);
result.add(irBuilder.makeFieldInitializer(
initializingFormal.fieldElement,
@@ -229,7 +233,7 @@ abstract class IrBuilderVisitor extends ResolvedVisitor<ir.Primitive>
if (initializer is ast.SendSet) {
// Field initializer.
FieldElement field = elements[initializer];
- withBuilder(irBuilder.makeDelimitedBuilder(), () {
+ withBuilder(irBuilder.makeInitializerBuilder(), () {
ir.Primitive value = visit(initializer.arguments.head);
ir.RunnableBody body = irBuilder.makeRunnableBody(value);
result.add(irBuilder.makeFieldInitializer(field, body));
@@ -243,7 +247,7 @@ abstract class IrBuilderVisitor extends ResolvedVisitor<ir.Primitive>
Selector selector = elements.getSelector(initializer);
List<ir.RunnableBody> arguments =
initializer.arguments.mapToList((ast.Node argument) {
- return withBuilder(irBuilder.makeDelimitedBuilder(), () {
+ return withBuilder(irBuilder.makeInitializerBuilder(), () {
ir.Primitive value = visit(argument);
return irBuilder.makeRunnableBody(value);
});
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698