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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart

Issue 14173003: Remove Collection, Collections and clean up List/Set/Queue implementations of retain/remove. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 part of js_backend; 5 part of js_backend;
6 6
7 /** 7 /**
8 * A function element that represents a closure call. The signature is copied 8 * A function element that represents a closure call. The signature is copied
9 * from the given element. 9 * from the given element.
10 */ 10 */
(...skipping 1706 matching lines...) Expand 10 before | Expand all | Expand 10 after
1717 Function computeClassFilter() { 1717 Function computeClassFilter() {
1718 Set<ClassElement> unneededClasses = new Set<ClassElement>(); 1718 Set<ClassElement> unneededClasses = new Set<ClassElement>();
1719 // The [Bool] class is not marked as abstract, but has a factory 1719 // The [Bool] class is not marked as abstract, but has a factory
1720 // constructor that always throws. We never need to emit it. 1720 // constructor that always throws. We never need to emit it.
1721 unneededClasses.add(compiler.boolClass); 1721 unneededClasses.add(compiler.boolClass);
1722 1722
1723 // Go over specialized interceptors and then constants to know which 1723 // Go over specialized interceptors and then constants to know which
1724 // interceptors are needed. 1724 // interceptors are needed.
1725 Set<ClassElement> needed = new Set<ClassElement>(); 1725 Set<ClassElement> needed = new Set<ClassElement>();
1726 backend.specializedGetInterceptors.forEach( 1726 backend.specializedGetInterceptors.forEach(
1727 (_, Collection<ClassElement> elements) { 1727 (_, Iterable<ClassElement> elements) {
1728 needed.addAll(elements); 1728 needed.addAll(elements);
1729 } 1729 }
1730 ); 1730 );
1731 1731
1732 // Add interceptors referenced by constants. 1732 // Add interceptors referenced by constants.
1733 ConstantHandler handler = compiler.constantHandler; 1733 ConstantHandler handler = compiler.constantHandler;
1734 List<Constant> constants = handler.getConstantsForEmission(); 1734 List<Constant> constants = handler.getConstantsForEmission();
1735 for (Constant constant in constants) { 1735 for (Constant constant in constants) {
1736 if (constant is InterceptorConstant) { 1736 if (constant is InterceptorConstant) {
1737 needed.add(constant.dispatchedType.element); 1737 needed.add(constant.dispatchedType.element);
(...skipping 670 matching lines...) Expand 10 before | Expand all | Expand 10 after
2408 } else { 2408 } else {
2409 ${mainCall}; 2409 ${mainCall};
2410 } 2410 }
2411 } 2411 }
2412 """); 2412 """);
2413 addComment('END invoke [main].', buffer); 2413 addComment('END invoke [main].', buffer);
2414 } 2414 }
2415 2415
2416 void emitGetInterceptorMethod(CodeBuffer buffer, 2416 void emitGetInterceptorMethod(CodeBuffer buffer,
2417 String key, 2417 String key,
2418 Collection<ClassElement> classes) { 2418 Iterable<ClassElement> classes) {
2419 jsAst.Statement buildReturnInterceptor(ClassElement cls) { 2419 jsAst.Statement buildReturnInterceptor(ClassElement cls) {
2420 return js.return_(js(namer.isolateAccess(cls))['prototype']); 2420 return js.return_(js(namer.isolateAccess(cls))['prototype']);
2421 } 2421 }
2422 2422
2423 /** 2423 /**
2424 * Build a JavaScrit AST node for doing a type check on 2424 * Build a JavaScrit AST node for doing a type check on
2425 * [cls]. [cls] must be an interceptor class. 2425 * [cls]. [cls] must be an interceptor class.
2426 */ 2426 */
2427 jsAst.Statement buildInterceptorCheck(ClassElement cls) { 2427 jsAst.Statement buildInterceptorCheck(ClassElement cls) {
2428 jsAst.Expression condition; 2428 jsAst.Expression condition;
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
2575 compiler)); 2575 compiler));
2576 buffer.write(N); 2576 buffer.write(N);
2577 } 2577 }
2578 2578
2579 /** 2579 /**
2580 * Emit all versions of the [:getInterceptor:] method. 2580 * Emit all versions of the [:getInterceptor:] method.
2581 */ 2581 */
2582 void emitGetInterceptorMethods(CodeBuffer buffer) { 2582 void emitGetInterceptorMethods(CodeBuffer buffer) {
2583 var specializedGetInterceptors = backend.specializedGetInterceptors; 2583 var specializedGetInterceptors = backend.specializedGetInterceptors;
2584 for (String name in specializedGetInterceptors.keys.toList()..sort()) { 2584 for (String name in specializedGetInterceptors.keys.toList()..sort()) {
2585 Collection<ClassElement> classes = specializedGetInterceptors[name]; 2585 Iterable<ClassElement> classes = specializedGetInterceptors[name];
2586 emitGetInterceptorMethod(buffer, name, classes); 2586 emitGetInterceptorMethod(buffer, name, classes);
2587 } 2587 }
2588 } 2588 }
2589 2589
2590 /** 2590 /**
2591 * Compute all the classes that must be emitted. 2591 * Compute all the classes that must be emitted.
2592 */ 2592 */
2593 void computeNeededClasses() { 2593 void computeNeededClasses() {
2594 instantiatedClasses = 2594 instantiatedClasses =
2595 compiler.codegenWorld.instantiatedClasses.where(computeClassFilter()) 2595 compiler.codegenWorld.instantiatedClasses.where(computeClassFilter())
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
3045 """; 3045 """;
3046 const String HOOKS_API_USAGE = """ 3046 const String HOOKS_API_USAGE = """
3047 // The code supports the following hooks: 3047 // The code supports the following hooks:
3048 // dartPrint(message) - if this function is defined it is called 3048 // dartPrint(message) - if this function is defined it is called
3049 // instead of the Dart [print] method. 3049 // instead of the Dart [print] method.
3050 // dartMainRunner(main) - if this function is defined, the Dart [main] 3050 // dartMainRunner(main) - if this function is defined, the Dart [main]
3051 // method will not be invoked directly. 3051 // method will not be invoked directly.
3052 // Instead, a closure that will invoke [main] is 3052 // Instead, a closure that will invoke [main] is
3053 // passed to [dartMainRunner]. 3053 // passed to [dartMainRunner].
3054 """; 3054 """;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698