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

Unified Diff: pkg/dev_compiler/lib/src/compiler/code_generator.dart

Issue 2848153002: fix #29504, dcall on object member when a temporary was involved. (Closed)
Patch Set: Created 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tests/language_strong/dynamic_invoke_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/dev_compiler/lib/src/compiler/code_generator.dart
diff --git a/pkg/dev_compiler/lib/src/compiler/code_generator.dart b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
index 9843eb0b3be33f42817b135b573bae128b498e44..d7b2465f7907b580a0bebbc7b01a003cc1f3df6e 100644
--- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
@@ -4555,7 +4555,7 @@ class CodeGenerator extends Object
bool _isNull(Expression expr) => expr is NullLiteral;
SimpleIdentifier _createTemporary(String name, DartType type,
- {bool nullable: true, JS.Expression variable}) {
+ {bool nullable: true, JS.Expression variable, bool dynamicInvoke}) {
// We use an invalid source location to signal that this is a temporary.
// See [_isTemporary].
// TODO(jmesserly): alternatives are
@@ -4570,7 +4570,7 @@ class CodeGenerator extends Object
id.staticElement = new TemporaryVariableElement.forNode(id, variable);
id.staticType = type;
- setIsDynamicInvoke(id, type.isDynamic);
+ setIsDynamicInvoke(id, dynamicInvoke ?? type.isDynamic);
addTemporaryVariable(id.staticElement, nullable: nullable);
return id;
}
@@ -4665,7 +4665,10 @@ class CodeGenerator extends Object
if (isStateless(_currentFunction, expr, context)) return expr;
var variable = new JS.MetaLetVariable(name);
- var t = _createTemporary(name, getStaticType(expr), variable: variable);
+ var t = _createTemporary(name, getStaticType(expr),
+ variable: variable,
+ dynamicInvoke: isDynamicInvoke(expr),
+ nullable: isNullable(expr));
scope[variable] = _visit(expr);
return t;
}
@@ -4867,8 +4870,8 @@ class CodeGenerator extends Object
break;
}
- var param =
- _createTemporary('_', nodeTarget.staticType, nullable: false);
+ var param = _createTemporary('_', nodeTarget.staticType,
+ nullable: false, dynamicInvoke: isDynamicInvoke(node));
var baseNode = _stripNullAwareOp(node, param);
tail.add(
new JS.ArrowFun(<JS.Parameter>[_visit(param)], _visit(baseNode)));
« no previous file with comments | « no previous file | tests/language_strong/dynamic_invoke_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698