| Index: pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| index b5a458c26db567032d40e9211aa509d3b8752ee9..3addf4bd482c5a0022320b976a2aab79b9e0cec1 100644
|
| --- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| +++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| @@ -86,6 +86,9 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
|
| LoopHandler<ir.Node> loopHandler;
|
| TypeBuilder typeBuilder;
|
|
|
| + final Map<ir.VariableDeclaration, HInstruction> letBindings =
|
| + <ir.VariableDeclaration, HInstruction>{};
|
| +
|
| KernelSsaBuilder(
|
| this.targetElement,
|
| this.resolvedAst,
|
| @@ -939,11 +942,32 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
|
|
|
| @override
|
| void visitVariableGet(ir.VariableGet variableGet) {
|
| + ir.VariableDeclaration variable = variableGet.variable;
|
| + HInstruction letBinding = letBindings[variable];
|
| + if (letBinding != null) {
|
| + stack.add(letBinding);
|
| + return;
|
| + }
|
| +
|
| Local local = astAdapter.getLocal(variableGet.variable);
|
| stack.add(localsHandler.readLocal(local));
|
| }
|
|
|
| @override
|
| + void visitPropertySet(ir.PropertySet propertySet) {
|
| + propertySet.receiver.accept(this);
|
| + HInstruction receiver = pop();
|
| + propertySet.value.accept(this);
|
| + HInstruction value = pop();
|
| +
|
| + _pushDynamicInvocation(propertySet, astAdapter.typeOfSet(propertySet),
|
| + <HInstruction>[receiver, value]);
|
| +
|
| + pop();
|
| + stack.add(value);
|
| + }
|
| +
|
| + @override
|
| void visitVariableSet(ir.VariableSet variableSet) {
|
| variableSet.value.accept(this);
|
| HInstruction value = pop();
|
| @@ -984,6 +1008,16 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
|
| value, astAdapter.getDartType(variable.type)));
|
| }
|
|
|
| + @override
|
| + void visitLet(ir.Let let) {
|
| + ir.VariableDeclaration variable = let.variable;
|
| + variable.initializer.accept(this);
|
| + HInstruction initializedValue = pop();
|
| + // TODO(sra): Apply inferred type information.
|
| + letBindings[variable] = initializedValue;
|
| + let.body.accept(this);
|
| + }
|
| +
|
| // TODO(het): Also extract type arguments
|
| /// Extracts the list of instructions for the expressions in the arguments.
|
| List<HInstruction> _visitArguments(ir.Arguments arguments) {
|
|
|