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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart

Issue 1184853002: Cleanup TypedSelector.appliesUnnamed (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Emit top level and static getters/setters for mirrors. 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
« no previous file with comments | « no previous file | pkg/compiler/lib/src/types/type_mask.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 dart2js.js_emitter; 5 part of dart2js.js_emitter;
6 6
7 class ClassEmitter extends CodeEmitterHelper { 7 class ClassEmitter extends CodeEmitterHelper {
8 8
9 ClassStubGenerator get _stubGenerator => 9 ClassStubGenerator get _stubGenerator =>
10 new ClassStubGenerator(compiler, namer, backend); 10 new ClassStubGenerator(compiler, namer, backend);
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 accessorName, 463 accessorName,
464 () => memberName); 464 () => memberName);
465 } 465 }
466 assert(invariant(member, previousName == memberName, 466 assert(invariant(member, previousName == memberName,
467 message: '$previousName != ${memberName}')); 467 message: '$previousName != ${memberName}'));
468 } 468 }
469 469
470 bool fieldNeedsGetter(VariableElement field) { 470 bool fieldNeedsGetter(VariableElement field) {
471 assert(field.isField); 471 assert(field.isField);
472 if (fieldAccessNeverThrows(field)) return false; 472 if (fieldAccessNeverThrows(field)) return false;
473 return backend.shouldRetainGetter(field) 473 if (backend.shouldRetainGetter(field)) return true;
474 || compiler.codegenWorld.hasInvokedGetter(field, compiler.world); 474 return field.isClassMember &&
475 compiler.codegenWorld.hasInvokedGetter(field, compiler.world);
475 } 476 }
476 477
477 bool fieldNeedsSetter(VariableElement field) { 478 bool fieldNeedsSetter(VariableElement field) {
478 assert(field.isField); 479 assert(field.isField);
479 if (fieldAccessNeverThrows(field)) return false; 480 if (fieldAccessNeverThrows(field)) return false;
480 return (!field.isFinal && !field.isConst) 481 if (field.isFinal || field.isConst) return false;
481 && (backend.shouldRetainSetter(field) 482 if (backend.shouldRetainSetter(field)) return true;
482 || compiler.codegenWorld.hasInvokedSetter(field, compiler.world)); 483 return field.isClassMember &&
484 compiler.codegenWorld.hasInvokedSetter(field, compiler.world);
483 } 485 }
484 486
485 // We never access a field in a closure (a captured variable) without knowing
486 // that it is there. Therefore we don't need to use a getter (that will throw
487 // if the getter method is missing), but can always access the field directly.
488 static bool fieldAccessNeverThrows(VariableElement field) { 487 static bool fieldAccessNeverThrows(VariableElement field) {
489 return field is ClosureFieldElement; 488 return
489 // We never access a field in a closure (a captured variable) without
490 // knowing that it is there. Therefore we don't need to use a getter
491 // (that will throw if the getter method is missing), but can always
492 // access the field directly.
493 field is ClosureFieldElement;
490 } 494 }
491 495
492 bool canAvoidGeneratedCheckedSetter(VariableElement member) { 496 bool canAvoidGeneratedCheckedSetter(VariableElement member) {
493 // We never generate accessors for top-level/static fields. 497 // We never generate accessors for top-level/static fields.
494 if (!member.isInstanceMember) return true; 498 if (!member.isInstanceMember) return true;
495 DartType type = member.type; 499 DartType type = member.type;
496 return type.treatAsDynamic || (type.element == compiler.objectClass); 500 return type.treatAsDynamic || (type.element == compiler.objectClass);
497 } 501 }
498 502
499 void generateCheckedSetter(Element member, 503 void generateCheckedSetter(Element member,
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 ? new Selector.getter(member.name, member.library) 559 ? new Selector.getter(member.name, member.library)
556 : new Selector.setter(member.name, member.library); 560 : new Selector.setter(member.name, member.library);
557 String reflectionName = emitter.getReflectionName(selector, name); 561 String reflectionName = emitter.getReflectionName(selector, name);
558 if (reflectionName != null) { 562 if (reflectionName != null) {
559 var reflectable = 563 var reflectable =
560 js(backend.isAccessibleByReflection(member) ? '1' : '0'); 564 js(backend.isAccessibleByReflection(member) ? '1' : '0');
561 builder.addProperty('+$reflectionName', reflectable); 565 builder.addProperty('+$reflectionName', reflectable);
562 } 566 }
563 } 567 }
564 } 568 }
OLDNEW
« no previous file with comments | « no previous file | pkg/compiler/lib/src/types/type_mask.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698