| Index: pkg/dev_compiler/lib/src/compiler/code_generator.dart
|
| diff --git a/pkg/dev_compiler/lib/src/compiler/code_generator.dart b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
|
| index 91f662d6351ba6fe427af932b7b435b931c5f4a7..acde51b79004f0ff7831f11b6a09782300014c06 100644
|
| --- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart
|
| +++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
|
| @@ -827,7 +827,9 @@ class CodeGenerator extends Object
|
| block.add(js.statement('# = #;', [className, classExpr]));
|
| }
|
|
|
| - if (!isMixinAlias) _defineConstructors(classElem, className, [], block, []);
|
| + if (!isMixinAlias) {
|
| + block.addAll(_defineConstructors(classElem, className, [], []));
|
| + }
|
|
|
| if (classElem.interfaces.isNotEmpty) {
|
| block.add(js.statement('#[#.implements] = () => #;', [
|
| @@ -896,6 +898,7 @@ class CodeGenerator extends Object
|
| _classProperties =
|
| new ClassPropertyModel.build(_extensionTypes, virtualFields, classElem);
|
|
|
| + var jsCtors = _defineConstructors(classElem, className, fields, ctors);
|
| var classExpr = _emitClassExpression(classElem, _emitClassMethods(node),
|
| fields: allFields);
|
|
|
| @@ -905,7 +908,7 @@ class CodeGenerator extends Object
|
|
|
| // Emit the class, e.g. `core.Object = class Object { ... }`
|
| _defineClass(classElem, className, classExpr, body);
|
| - _defineConstructors(classElem, className, fields, body, ctors);
|
| + body.addAll(jsCtors);
|
|
|
| // Emit things that come after the ES6 `class ... { ... }`.
|
| var jsPeerNames = _getJSPeerNames(classElem);
|
| @@ -1715,11 +1718,10 @@ class CodeGenerator extends Object
|
| }
|
|
|
| /// Defines all constructors for this class as ES5 constructors.
|
| - void _defineConstructors(
|
| + List<JS.Statement> _defineConstructors(
|
| ClassElement classElem,
|
| JS.Expression className,
|
| List<FieldDeclaration> fields,
|
| - List<JS.Statement> body,
|
| List<ConstructorDeclaration> ctors) {
|
| // See if we have a "call" with a statically known function type:
|
| //
|
| @@ -1735,6 +1737,7 @@ class CodeGenerator extends Object
|
| bool isCallable = classElem.lookUpMethod('call', null) != null ||
|
| classElem.lookUpGetter('call', null)?.returnType is FunctionType;
|
|
|
| + var body = <JS.Statement>[];
|
| void addConstructor(ConstructorElement element, JS.Expression jsCtor) {
|
| var ctorName = _constructorName(element);
|
| if (JS.invalidStaticFieldName(element.name)) {
|
| @@ -1760,19 +1763,19 @@ class CodeGenerator extends Object
|
| new JS.Block(superCall != null ? [superCall] : []),
|
| isCallable));
|
| }
|
| - return;
|
| + return body;
|
| }
|
|
|
| // Iff no constructor is specified for a class C, it implicitly has a
|
| // default constructor `C() : super() {}`, unless C is class Object.
|
| if (ctors.isEmpty) {
|
| var superCall = _superConstructorCall(classElem, className);
|
| - List<JS.Statement> body = [_initializeFields(fields)];
|
| - if (superCall != null) body.add(superCall);
|
| + var ctorBody = <JS.Statement>[_initializeFields(fields)];
|
| + if (superCall != null) ctorBody.add(superCall);
|
|
|
| addConstructor(classElem.unnamedConstructor,
|
| - _finishConstructorFunction([], new JS.Block(body), isCallable));
|
| - return;
|
| + _finishConstructorFunction([], new JS.Block(ctorBody), isCallable));
|
| + return body;
|
| }
|
|
|
| bool foundConstructor = false;
|
| @@ -1797,6 +1800,8 @@ class CodeGenerator extends Object
|
| className
|
| ]));
|
| }
|
| +
|
| + return body;
|
| }
|
|
|
| /// Emits static fields for a class, and initialize them eagerly if possible,
|
|
|