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

Unified Diff: pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart

Issue 891473002: Move reflection support out of model. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/model.dart ('k') | pkg/compiler/lib/src/js_emitter/program_builder.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
index c1f98bfc4fd495f3cb6d1dbafebed08ee6cffb4a..d4d8ae5fd5af6b94a5c97cb1864130cc9c6697b3 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
@@ -234,19 +234,42 @@ class ContainerBuilder extends CodeEmitterHelper {
}
}
+ String _tearOffNameForMember(FunctionElement member) {
+ if (member.isInstanceMember) {
+ return namer.getterName(member);
+ } else {
+ return namer.getStaticClosureName(member);
+ }
+ }
+
void addMemberMethod(DartMethod method, ClassBuilder builder) {
final FunctionElement member = method.element;
String name = method.name;
final FunctionSignature parameters = member.functionSignature;
jsAst.Expression code = method.code;
final bool needsStubs = method.needsStubs;
- final bool canTearOff = method.needsTearOff;
- final String tearOffName = method.tearOffName;
- final bool canBeReflected = method.canBeReflected;
final bool canBeApplied = method.canBeApplied;
+ bool canTearOff = method.needsTearOff;
+ String tearOffName = method.tearOffName;
final bool isClosure = method is InstanceMethod && method.isClosure;
final bool hasSuperAlias = method is InstanceMethod && method.hasSuperAlias;
+ final bool canBeReflected = backend.isAccessibleByReflection(member) ||
floitsch 2015/01/29 15:01:22 I prefer if the comment is not on a sub-expression
herhut 2015/01/29 15:04:21 Done.
+ // During incremental compilation, we have to assume that reflection
+ // *might* get enabled.
+ compiler.hasIncrementalSupport;
+
+ if (canBeReflected) {
+ // Patch the effects of reflection into the received information.
+ bool isNotApplyTarget = member.isConstructor ||
+ member.isAccessor ||
+ member.isOperator ||
+ isClosure;
+ canTearOff = canTearOff || (canBeReflected && !isNotApplyTarget);
+ tearOffName = tearOffName != null ? tearOffName
+ : _tearOffNameForMember(member);
+ }
+
final bool needStructuredInfo =
canTearOff || canBeReflected || canBeApplied || hasSuperAlias;
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/model.dart ('k') | pkg/compiler/lib/src/js_emitter/program_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698