Chromium Code Reviews| Index: lib/src/codegen/js_codegen.dart |
| diff --git a/lib/src/codegen/js_codegen.dart b/lib/src/codegen/js_codegen.dart |
| index 8104a628f51c1dbc5fe6dfcd8ab8ebd0563e8fa0..bcd0eb579cd1309f234a6eda93ed9210064d511d 100644 |
| --- a/lib/src/codegen/js_codegen.dart |
| +++ b/lib/src/codegen/js_codegen.dart |
| @@ -375,10 +375,10 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ClosureAnnotator { |
| } |
| } |
| - var classDecl = new JS.ClassDeclaration(new JS.ClassExpression( |
| - new JS.Identifier(element.name), _classHeritage(element), body)); |
| + var classExpr = new JS.ClassExpression( |
| + new JS.Identifier(element.name), _classHeritage(element), body); |
| - return _finishClassDef(element.type, classDecl); |
| + return _finishClassDef(element.type, _emitClassDeclaration(classExpr)); |
|
Jennifer Messerly
2016/02/01 23:59:55
The same fix is likely needed for ClassTypeAlias
ochafik
2016/02/03 19:41:33
Done.
|
| } |
| JS.Statement _emitJsType(String dartClassName, DartObject jsName) { |
| @@ -669,6 +669,25 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ClosureAnnotator { |
| } |
| } |
| + _isQualifiedPath(JS.Expression node) => |
| + node is JS.Identifier || |
| + node is JS.PropertyAccess && |
| + _isQualifiedPath(node.receiver) && |
| + node.selector is JS.LiteralString; |
| + |
| + JS.Statement _emitClassDeclaration(JS.ClassExpression cls) { |
|
Jennifer Messerly
2016/02/01 23:59:55
from the naming convention, I would probably expec
ochafik
2016/02/03 19:41:33
Done.
|
| + var body = <JS.Statement>[]; |
|
Jennifer Messerly
2016/02/01 23:59:55
this can go inside the if:
if (...) {
return ne
ochafik
2016/02/03 19:41:33
Done.
|
| + if (options.closure && |
| + cls.heritage != null && !_isQualifiedPath(cls.heritage)) { |
| + // Workaround for Closure: super classes must be qualified paths. |
|
Jennifer Messerly
2016/02/01 23:59:55
After the method rename, this would be good as a d
ochafik
2016/02/03 19:41:33
Done.
|
| + var superVar = new JS.Identifier(cls.name.name + r'$super'); |
|
Jennifer Messerly
2016/02/01 23:59:55
This should be a temp. Use `new JS.TemporaryId`. T
ochafik
2016/02/03 19:41:33
Done.
|
| + body.add(js.statement('const # = #;', [superVar, cls.heritage])); |
| + cls = new JS.ClassExpression(cls.name, superVar, cls.methods); |
| + } |
| + body.add(new JS.ClassDeclaration(cls)); |
| + return _statement(body); |
| + } |
| + |
| /// Emit class members that need to come after the class declaration, such |
| /// as static fields. See [_emitClassMethods] for things that are emitted |
| /// inside the ES6 `class { ... }` node. |
| @@ -696,7 +715,7 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ClosureAnnotator { |
| } |
| } |
| - body.add(new JS.ClassDeclaration(cls)); |
| + body.add(_emitClassDeclaration(cls)); |
| // TODO(jmesserly): we should really just extend native Array. |
| if (jsPeerName != null && classElem.typeParameters.isNotEmpty) { |