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

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

Issue 19097003: Support new malformed types semantics. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 5 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 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 177
178 void computeRequiredTypeChecks() { 178 void computeRequiredTypeChecks() {
179 assert(checkedClasses == null && checkedFunctionTypes == null); 179 assert(checkedClasses == null && checkedFunctionTypes == null);
180 180
181 backend.rti.addImplicitChecks(compiler.codegenWorld, 181 backend.rti.addImplicitChecks(compiler.codegenWorld,
182 classesUsingTypeVariableTests); 182 classesUsingTypeVariableTests);
183 183
184 checkedClasses = new Set<ClassElement>(); 184 checkedClasses = new Set<ClassElement>();
185 checkedFunctionTypes = new Set<FunctionType>(); 185 checkedFunctionTypes = new Set<FunctionType>();
186 compiler.codegenWorld.isChecks.forEach((DartType t) { 186 compiler.codegenWorld.isChecks.forEach((DartType t) {
187 if (!t.isMalformed) { 187 if (t is InterfaceType) {
188 if (t is InterfaceType) { 188 checkedClasses.add(t.element);
189 checkedClasses.add(t.element); 189 } else if (t is FunctionType) {
190 } else if (t is FunctionType) { 190 checkedFunctionTypes.add(t);
191 checkedFunctionTypes.add(t);
192 }
193 } 191 }
194 }); 192 });
195 } 193 }
196 194
197 ClassElement computeMixinClass(MixinApplicationElement mixinApplication) { 195 ClassElement computeMixinClass(MixinApplicationElement mixinApplication) {
198 ClassElement mixin = mixinApplication.mixin; 196 ClassElement mixin = mixinApplication.mixin;
199 while (mixin.isMixinApplication) { 197 while (mixin.isMixinApplication) {
200 mixinApplication = mixin; 198 mixinApplication = mixin;
201 mixin = mixinApplication.mixin; 199 mixin = mixinApplication.mixin;
202 } 200 }
(...skipping 1337 matching lines...) Expand 10 before | Expand all | Expand 10 after
1540 List<String> args = backend.isInterceptedMethod(member) 1538 List<String> args = backend.isInterceptedMethod(member)
1541 ? ['receiver', 'v'] 1539 ? ['receiver', 'v']
1542 : ['v']; 1540 : ['v'];
1543 builder.addProperty(setterName, 1541 builder.addProperty(setterName,
1544 js.fun(args, js('$receiver.$fieldName = v'))); 1542 js.fun(args, js('$receiver.$fieldName = v')));
1545 } 1543 }
1546 1544
1547 bool canGenerateCheckedSetter(Element member) { 1545 bool canGenerateCheckedSetter(Element member) {
1548 DartType type = member.computeType(compiler).unalias(compiler); 1546 DartType type = member.computeType(compiler).unalias(compiler);
1549 if (type.element.isTypeVariable() || 1547 if (type.element.isTypeVariable() ||
1550 (type is FunctionType && type.containsTypeVariables) || 1548 (type is FunctionType && type.containsTypeVariables) ||
1551 type.element == compiler.dynamicClass || 1549 type.treatAsDynamic ||
1552 type.element == compiler.objectClass) { 1550 type.element == compiler.objectClass) {
1553 // TODO(ngeoffray): Support type checks on type parameters. 1551 // TODO(ngeoffray): Support type checks on type parameters.
1554 return false; 1552 return false;
1555 } 1553 }
1556 return true; 1554 return true;
1557 } 1555 }
1558 1556
1559 void generateCheckedSetter(Element member, 1557 void generateCheckedSetter(Element member,
1560 String fieldName, 1558 String fieldName,
1561 String accessorName, 1559 String accessorName,
(...skipping 2162 matching lines...) Expand 10 before | Expand all | Expand 10 after
3724 3722
3725 const String HOOKS_API_USAGE = """ 3723 const String HOOKS_API_USAGE = """
3726 // The code supports the following hooks: 3724 // The code supports the following hooks:
3727 // dartPrint(message) - if this function is defined it is called 3725 // dartPrint(message) - if this function is defined it is called
3728 // instead of the Dart [print] method. 3726 // instead of the Dart [print] method.
3729 // dartMainRunner(main) - if this function is defined, the Dart [main] 3727 // dartMainRunner(main) - if this function is defined, the Dart [main]
3730 // method will not be invoked directly. 3728 // method will not be invoked directly.
3731 // Instead, a closure that will invoke [main] is 3729 // Instead, a closure that will invoke [main] is
3732 // passed to [dartMainRunner]. 3730 // passed to [dartMainRunner].
3733 """; 3731 """;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698