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

Side by Side Diff: lib/src/codegen/js_codegen.dart

Issue 1173903003: fixes #216, JSNumber members (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dev_compiler.src.codegen.js_codegen; 5 library dev_compiler.src.codegen.js_codegen;
6 6
7 import 'dart:collection' show HashSet, HashMap, SplayTreeSet; 7 import 'dart:collection' show HashSet, HashMap, SplayTreeSet;
8 8
9 import 'package:analyzer/analyzer.dart' hide ConstantEvaluator; 9 import 'package:analyzer/analyzer.dart' hide ConstantEvaluator;
10 import 'package:analyzer/src/generated/ast.dart' hide ConstantEvaluator; 10 import 'package:analyzer/src/generated/ast.dart' hide ConstantEvaluator;
(...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 /// Emit class members that need to come after the class declaration, such 562 /// Emit class members that need to come after the class declaration, such
563 /// as static fields. See [_emitClassMethods] for things that are emitted 563 /// as static fields. See [_emitClassMethods] for things that are emitted
564 /// inside the ES6 `class { ... }` node. 564 /// inside the ES6 `class { ... }` node.
565 JS.Statement _finishClassMembers(ClassElement classElem, 565 JS.Statement _finishClassMembers(ClassElement classElem,
566 JS.ClassExpression cls, List<ConstructorDeclaration> ctors, 566 JS.ClassExpression cls, List<ConstructorDeclaration> ctors,
567 List<FieldDeclaration> fields, List<MethodDeclaration> methods, 567 List<FieldDeclaration> fields, List<MethodDeclaration> methods,
568 List<Annotation> metadata, String jsPeerName) { 568 List<Annotation> metadata, String jsPeerName) {
569 var name = classElem.name; 569 var name = classElem.name;
570 var body = <JS.Statement>[]; 570 var body = <JS.Statement>[];
571 571
572 if (jsPeerName != null) { 572 if (_extensionTypes.contains(classElem)) {
573 var dartxNames = []; 573 var dartxNames = [];
574 for (var m in methods) { 574 for (var m in methods) {
575 if (!m.isAbstract && !m.isStatic && m.element.isPublic) { 575 if (!m.isAbstract && !m.isStatic && m.element.isPublic) {
576 dartxNames.add(_elementMemberName(m.element, allowExtensions: false)); 576 dartxNames.add(_elementMemberName(m.element, allowExtensions: false));
577 } 577 }
578 } 578 }
579 body.add(js.statement('dart.defineExtensionNames(#)', 579 if (dartxNames.isNotEmpty) {
580 [new JS.ArrayInitializer(dartxNames, multiline: true)])); 580 body.add(js.statement('dart.defineExtensionNames(#)',
581 [new JS.ArrayInitializer(dartxNames, multiline: true)]));
582 }
581 } 583 }
582 584
583 body.add(new JS.ClassDeclaration(cls)); 585 body.add(new JS.ClassDeclaration(cls));
584 586
585 // TODO(jmesserly): we should really just extend native Array. 587 // TODO(jmesserly): we should really just extend native Array.
586 if (jsPeerName != null && classElem.typeParameters.isNotEmpty) { 588 if (jsPeerName != null && classElem.typeParameters.isNotEmpty) {
587 body.add(js.statement('dart.setBaseClass(#, dart.global.#);', [ 589 body.add(js.statement('dart.setBaseClass(#, dart.global.#);', [
588 classElem.name, 590 classElem.name,
589 _propertyName(jsPeerName) 591 _propertyName(jsPeerName)
590 ])); 592 ]));
(...skipping 2187 matching lines...) Expand 10 before | Expand all | Expand 10 after
2778 2780
2779 /// A special kind of element created by the compiler, signifying a temporary 2781 /// A special kind of element created by the compiler, signifying a temporary
2780 /// variable. These objects use instance equality, and should be shared 2782 /// variable. These objects use instance equality, and should be shared
2781 /// everywhere in the tree where they are treated as the same variable. 2783 /// everywhere in the tree where they are treated as the same variable.
2782 class TemporaryVariableElement extends LocalVariableElementImpl { 2784 class TemporaryVariableElement extends LocalVariableElementImpl {
2783 TemporaryVariableElement.forNode(Identifier name) : super.forNode(name); 2785 TemporaryVariableElement.forNode(Identifier name) : super.forNode(name);
2784 2786
2785 int get hashCode => identityHashCode(this); 2787 int get hashCode => identityHashCode(this);
2786 bool operator ==(Object other) => identical(this, other); 2788 bool operator ==(Object other) => identical(this, other);
2787 } 2789 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698