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

Unified Diff: dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart

Issue 108923003: Fix issues that caused revert of r30955: (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Merged with r30973. Created 7 years 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 | « no previous file | dart/sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
diff --git a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
index 1ebb578d2635a53beb60969f7b8d5d76255c2bab..f55026a806851c867fee259d14676437a3f09cb9 100644
--- a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
+++ b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
@@ -326,9 +326,11 @@ class ContainerBuilder extends CodeEmitterHelper {
bool needsStubs = !parameters.optionalParameters.isEmpty;
bool canTearOff = false;
bool isClosure = false;
+ bool canBeApplied = compiler.enabledFunctionApply;
String tearOffName;
if (!member.isFunction() || member.isConstructor() || member.isAccessor()) {
canTearOff = false;
+ canBeApplied = false;
} else if (member.isInstanceMember()) {
if (member.getEnclosingClass().isClosure()) {
canTearOff = false;
@@ -346,7 +348,7 @@ class ContainerBuilder extends CodeEmitterHelper {
bool canBeReflected = backend.isAccessibleByReflection(member);
bool needStructuredInfo =
- canTearOff || canBeReflected || compiler.enabledFunctionApply;
+ canTearOff || canBeReflected || canBeApplied;
if (!needStructuredInfo) {
builder.addProperty(name, code);
if (needsStubs) {
@@ -449,9 +451,14 @@ class ContainerBuilder extends CodeEmitterHelper {
}
jsAst.Expression memberTypeExpression;
- if ((canTearOff || canBeReflected) &&
- !member.isGenerativeConstructorBody()) {
- DartType memberType = member.computeType(compiler);
+ if (canTearOff || canBeReflected) {
+ DartType memberType;
+ if (member.isGenerativeConstructorBody()) {
+ var body = member;
+ memberType = body.constructor.computeType(compiler);
+ } else {
+ memberType = member.computeType(compiler);
+ }
if (memberType.containsTypeVariables) {
jsAst.Expression thisAccess = js(r'this.$receiver');
memberTypeExpression =
@@ -473,7 +480,7 @@ class ContainerBuilder extends CodeEmitterHelper {
..add(memberTypeExpression)
..addAll(task.metadataEmitter.reifyDefaultArguments(member));
- if (canBeReflected || compiler.enabledFunctionApply) {
+ if (canBeReflected || canBeApplied) {
parameters.orderedForEachParameter((Element parameter) {
expressions.add(task.metadataEmitter.reifyName(parameter.name));
});
@@ -492,7 +499,7 @@ class ContainerBuilder extends CodeEmitterHelper {
expressions
..add(reflectionName)
..addAll(task.metadataEmitter.computeMetadata(member));
- } else if (isClosure && compiler.enabledFunctionApply) {
+ } else if (isClosure && canBeApplied) {
expressions.add(js.string(member.name));
}
« no previous file with comments | « no previous file | dart/sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698