Chromium Code Reviews| Index: lib/src/compiler/code_generator.dart |
| diff --git a/lib/src/compiler/code_generator.dart b/lib/src/compiler/code_generator.dart |
| index d8dc934cd76b0d39a77b0de86dcfe1a200876459..db92481bd97c2cfb46139fc3ffecc3a3c9168994 100644 |
| --- a/lib/src/compiler/code_generator.dart |
| +++ b/lib/src/compiler/code_generator.dart |
| @@ -2532,7 +2532,13 @@ class CodeGenerator extends GeneralizingAstVisitor |
| if (target != null && DynamicInvoke.get(target)) { |
| if (_inWhitelistCode(lhs)) { |
| - return _visit(rhs).toAssignExpression(_visit(lhs)); |
| + var vars = <JS.MetaLetVariable, JS.Expression>{}; |
| + var l = _visit(_bindValue(vars, 'l', target)); |
| + var name = _emitMemberName(id.name); |
| + return new JS.MetaLet(vars, [ |
| + js.call('(#[(#[dart._extensionType]) ? dartx[#] : #] = #)', |
| + [l, l, name, name, _visit(rhs)]) |
| + ]); |
| } |
| return js.call('dart.dput(#, #, #)', |
| [_visit(target), _emitMemberName(id.name), _visit(rhs)]); |
| @@ -2665,7 +2671,13 @@ class CodeGenerator extends GeneralizingAstVisitor |
| JS.Expression jsTarget = _visit(target); |
| if (DynamicInvoke.get(target) || DynamicInvoke.get(node.methodName)) { |
| if (_inWhitelistCode(target)) { |
| - jsTarget = new JS.PropertyAccess(jsTarget, memberName); |
| + var vars = <JS.MetaLetVariable, JS.Expression>{}; |
| + var l = _visit(_bindValue(vars, 'l', target)); |
| + jsTarget = |
| + new JS.MetaLet(vars, [ |
| + js.call('(#[(#[dart._extensionType]) ? dartx[#] : #])', |
| + [l, l, memberName, memberName,]) |
| + ]); |
| if (typeArgs != null) jsTarget = new JS.Call(jsTarget, typeArgs); |
| return new JS.Call(jsTarget, args); |
| } |
| @@ -3880,7 +3892,11 @@ class CodeGenerator extends GeneralizingAstVisitor |
| type: getStaticType(target), isStatic: isStatic); |
| if (DynamicInvoke.get(target)) { |
| if (_inWhitelistCode(target)) { |
| - return js.call('#.#', [_visit(target), name]); |
| + var vars = <JS.MetaLetVariable, JS.Expression>{}; |
| + var l = _visit(_bindValue(vars, 'l', target)); |
| + return new JS.MetaLet(vars, [ |
| + js.call('(#[dart._extensionType]) ? #[dartx[#]] : #.#', [l, l, name, l, name]) |
|
Jacob
2016/06/02 03:07:51
long line.
Also I believe there is a way to specif
|
| + ]); |
| } |
| return js.call('dart.dload(#, #)', [_visit(target), name]); |
| } |