Chromium Code Reviews| Index: pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart |
| diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart |
| index c791a6c9eefaef542ec8429226a2d2928b04359a..3b1351d669afdd87f58038215a8376cf7a87c3b8 100644 |
| --- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart |
| +++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart |
| @@ -645,7 +645,7 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| if (parameter.isInitializingFormal) { |
| InitializingFormalElement fieldParameter = parameter; |
| fieldValues[fieldParameter.fieldElement] = |
| - irBuilder.buildLocalVariableGet(parameter); |
| + irBuilder.buildLocalGet(parameter); |
| } |
| }); |
| // Evaluate constructor initializers, e.g. `Foo() : x = 50`. |
| @@ -869,9 +869,9 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| typeMaskSystem.associateConstantValueWithElement(constant, field); |
| return irBuilder.buildConstant(constant, sourceInformation: src); |
| } else if (backend.constants.lazyStatics.contains(field)) { |
| - return irBuilder.buildStaticFieldLazyGet(field, src); |
| + return irBuilder.addPrimitive(new ir.GetLazyStatic(field, src)); |
| } else { |
| - return irBuilder.buildStaticFieldGet(field, src); |
| + return irBuilder.addPrimitive(new ir.GetStatic(field, src)); |
| } |
| } |
| @@ -1330,15 +1330,16 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| } |
| ir.Primitive visitLiteralMap(ast.LiteralMap node) { |
| + assert(irBuilder.isOpen); |
| if (node.isConst) { |
| return translateConstant(node); |
| } |
| InterfaceType type = elements.getType(node); |
| - return irBuilder.buildMapLiteral( |
| - type, |
| - node.entries.nodes.map((e) => e.key), |
| - node.entries.nodes.map((e) => e.value), |
| - build); |
| + List<ir.LiteralMapEntry> entries = |
| + node.entries.nodes.mapToList((ast.LiteralMapEntry e) { |
| + return new ir.LiteralMapEntry(visit(e.key), visit(e.value)); |
| + }); |
| + return irBuilder.addPrimitive(new ir.LiteralMap(type, entries)); |
| } |
| ir.Primitive visitLiteralSymbol(ast.LiteralSymbol node) { |
| @@ -1490,23 +1491,14 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| return element.isConst |
| ? irBuilder.buildConstant(getConstantForVariable(element), |
| sourceInformation: sourceInformationBuilder.buildGet(node)) |
| - : irBuilder.buildLocalVariableGet(element); |
| + : irBuilder.buildLocalGet(element); |
| } |
| - @override |
| ir.Primitive handleLocalGet( |
| ast.Send node, |
| LocalElement element, |
| _) { |
| - return irBuilder.buildLocalVariableGet(element); |
| - } |
| - |
| - @override |
| - ir.Primitive visitLocalFunctionGet( |
| - ast.Send node, |
| - LocalFunctionElement function, |
| - _) { |
| - return irBuilder.buildLocalFunctionGet(function); |
| + return irBuilder.buildLocalGet(element); |
| } |
| @override |
| @@ -1514,7 +1506,7 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| ast.Send node, |
| MethodElement function, |
| _) { |
| - return irBuilder.buildStaticFunctionGet(function); |
| + return irBuilder.addPrimitive(new ir.GetStatic(function)); |
| } |
| @override |
| @@ -1945,35 +1937,16 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| ast.NodeList argumentsNode, |
| CallStructure callStructure, |
| _) { |
| + ir.Primitive function = irBuilder.buildLocalGet(element); |
| List<ir.Primitive> arguments = <ir.Primitive>[]; |
| callStructure = |
| translateDynamicArguments(argumentsNode, callStructure, arguments); |
| - return irBuilder.buildLocalVariableInvocation( |
| - element, |
| - callStructure, |
| - arguments, |
| - callSourceInformation: |
| + return irBuilder.buildCallInvocation(function, callStructure, arguments, |
| + sourceInformation: |
| sourceInformationBuilder.buildCall(node, argumentsNode)); |
| } |
| @override |
| - ir.Primitive visitLocalFunctionInvoke( |
| - ast.Send node, |
| - LocalFunctionElement function, |
| - ast.NodeList argumentsNode, |
| - CallStructure callStructure, |
| - _) { |
| - List<ir.Primitive> arguments = <ir.Primitive>[]; |
| - callStructure = |
| - translateDynamicArguments(argumentsNode, callStructure, arguments); |
| - return irBuilder.buildLocalFunctionInvocation( |
| - function, |
| - callStructure, |
| - arguments, |
| - sourceInformationBuilder.buildCall(node, argumentsNode)); |
| - } |
| - |
| - @override |
| ir.Primitive handleStaticFieldGet(ast.Send node, FieldElement field, _) { |
| return buildStaticFieldGet(field, sourceInformationBuilder.buildGet(node)); |
| } |
| @@ -2186,10 +2159,9 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| ir.Primitive translateCompounds( |
| ast.SendSet node, |
| - {ir.Primitive getValue(), |
| - CompoundRhs rhs, |
| - void setValue(ir.Primitive value)}) { |
| - ir.Primitive value = getValue(); |
| + ir.Primitive value, |
|
asgerf
2016/01/11 21:16:36
I think this was better before, but I don't feel s
Kevin Millikin (Google)
2016/01/12 15:58:47
I guess I can see that. I've changed it back (but
|
| + CompoundRhs rhs, |
| + void setValue(ir.Primitive value)) { |
| op.BinaryOperator operator = rhs.operator; |
| if (operator.kind == op.BinaryOperatorKind.IF_NULL) { |
| // Unlike other compound operators if-null conditionally will not do the |
| @@ -2229,10 +2201,9 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| ir.Primitive translateSetIfNull( |
| ast.SendSet node, |
| - {ir.Primitive getValue(), |
| - ast.Node rhs, |
| - void setValue(ir.Primitive value)}) { |
| - ir.Primitive value = getValue(); |
| + ir.Primitive value, |
| + ast.Node rhs, |
| + void setValue(ir.Primitive value)) { |
| // Unlike other compound operators if-null conditionally will not do the |
| // assignment operation. |
| return irBuilder.buildIfNull(value, nested(() { |
| @@ -2290,7 +2261,9 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| FieldElement field, |
| ast.Node rhs, |
| _) { |
| - return irBuilder.buildStaticFieldSet(field, visit(rhs)); |
| + ir.Primitive value = visit(rhs); |
| + irBuilder.addPrimitive(new ir.SetStatic(field, value)); |
| + return value; |
| } |
| @override |
| @@ -2336,14 +2309,11 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| ConstantExpression constant, |
| CompoundRhs rhs, |
| arg) { |
| - return translateCompounds( |
| - node, |
| - getValue: () { |
| - return buildConstantExpression(constant, |
| - sourceInformationBuilder.buildGet(node)); |
| - }, |
| - rhs: rhs, |
| - setValue: (value) {}); // The binary operator will throw before this. |
| + ir.Primitive value = buildConstantExpression(constant, |
| + sourceInformationBuilder.buildGet(node)); |
| + return translateCompounds(node, value, rhs, (ir.Primitive value) { |
| + // The binary operator will throw before this. |
| + }); |
| } |
| @override |
| @@ -2366,21 +2336,18 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| arg) { |
| ir.Primitive target = translateReceiver(receiver); |
| ir.Primitive helper() { |
| - return translateCompounds( |
| - node, |
| - getValue: () => irBuilder.buildDynamicGet( |
| - target, |
| - new Selector.getter(name), |
| - elements.getGetterTypeMaskInComplexSendSet(node), |
| - sourceInformationBuilder.buildGet(node)), |
| - rhs: rhs, |
| - setValue: (ir.Primitive result) { |
| - irBuilder.buildDynamicSet( |
| - target, |
| - new Selector.setter(name), |
| - elements.getTypeMask(node), |
| - result); |
| - }); |
| + ir.Primitive value = irBuilder.buildDynamicGet( |
| + target, |
| + new Selector.getter(name), |
| + elements.getGetterTypeMaskInComplexSendSet(node), |
| + sourceInformationBuilder.buildGet(node)); |
| + return translateCompounds(node, value, rhs, (ir.Primitive result) { |
| + irBuilder.buildDynamicSet( |
| + target, |
| + new Selector.setter(name), |
| + elements.getTypeMask(node), |
| + result); |
| + }); |
| } |
| return node.isConditional |
| ? irBuilder.buildIfNotNullSend(target, nested(helper)) |
| @@ -2396,21 +2363,18 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| _) { |
| ir.Primitive target = translateReceiver(receiver); |
| ir.Primitive helper() { |
| - return translateSetIfNull( |
| - node, |
| - getValue: () => irBuilder.buildDynamicGet( |
| - target, |
| - new Selector.getter(name), |
| - elements.getGetterTypeMaskInComplexSendSet(node), |
| - sourceInformationBuilder.buildGet(node)), |
| - rhs: rhs, |
| - setValue: (ir.Primitive result) { |
| - irBuilder.buildDynamicSet( |
| - target, |
| - new Selector.setter(name), |
| - elements.getTypeMask(node), |
| - result); |
| - }); |
| + ir.Primitive value = irBuilder.buildDynamicGet( |
| + target, |
| + new Selector.getter(name), |
| + elements.getGetterTypeMaskInComplexSendSet(node), |
| + sourceInformationBuilder.buildGet(node)); |
| + return translateSetIfNull(node, value, rhs, (ir.Primitive result) { |
| + irBuilder.buildDynamicSet( |
| + target, |
| + new Selector.setter(name), |
| + elements.getTypeMask(node), |
| + result); |
| + }); |
| } |
| return node.isConditional |
| ? irBuilder.buildIfNotNullSend(target, nested(helper)) |
| @@ -2430,23 +2394,16 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| CompoundRhs rhs, |
| arg, |
| {bool isSetterValid}) { |
| - return translateCompounds( |
| - node, |
| - getValue: () { |
| - if (local.isFunction) { |
| - return irBuilder.buildLocalFunctionGet(local); |
| - } else { |
| - return irBuilder.buildLocalVariableGet(local); |
| - } |
| - }, |
| - rhs: rhs, |
| - setValue: (ir.Primitive result) { |
| - if (isSetterValid) { |
| - irBuilder.buildLocalVariableSet(local, result); |
| - } else { |
| - return buildLocalNoSuchSetter(local, result); |
| - } |
| - }); |
| + ir.Primitive value = irBuilder.buildLocalGet(local); |
| + return translateCompounds(node, value, rhs, (ir.Primitive result) { |
| + if (isSetterValid) { |
| + irBuilder.buildLocalVariableSet(local, result); |
| + } else { |
| + Selector selector = new Selector.setter( |
| + new Name(local.name, local.library, isSetter: true)); |
| + irBuilder.buildStaticNoSuchMethod(selector, <ir.Primitive>[result]); |
| + } |
| + }); |
| } |
| @override |
| @@ -2456,35 +2413,16 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| ast.Node rhs, |
| _, |
| {bool isSetterValid}) { |
| - return translateSetIfNull( |
| - node, |
| - getValue: () { |
| - if (local.isFunction) { |
| - return irBuilder.buildLocalFunctionGet(local); |
| - } else { |
| - return irBuilder.buildLocalVariableGet(local); |
| - } |
| - }, |
| - rhs: rhs, |
| - setValue: (ir.Primitive result) { |
| - if (isSetterValid) { |
| - irBuilder.buildLocalVariableSet(local, result); |
| - } else { |
| - return buildLocalNoSuchSetter(local, result); |
| - } |
| - }); |
| - } |
| - |
| - ir.Primitive buildStaticNoSuchGetter(Element element) { |
| - return irBuilder.buildStaticNoSuchMethod( |
| - new Selector.getter(new Name(element.name, element.library)), |
| - const <ir.Primitive>[]); |
| - } |
| - |
| - ir.Primitive buildStaticNoSuchSetter(Element element, ir.Primitive value) { |
| - return irBuilder.buildStaticNoSuchMethod( |
| - new Selector.setter(new Name(element.name, element.library)), |
| - <ir.Primitive>[value]); |
| + ir.Primitive value = irBuilder.buildLocalGet(local); |
| + return translateSetIfNull(node, value, rhs, (ir.Primitive result) { |
| + if (isSetterValid) { |
| + irBuilder.buildLocalVariableSet(local, result); |
| + } else { |
| + Selector selector = new Selector.setter( |
| + new Name(local.name, local.library, isSetter: true)); |
| + irBuilder.buildStaticNoSuchMethod(selector, <ir.Primitive>[result]); |
| + } |
| + }); |
| } |
| @override |
| @@ -2496,32 +2434,39 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| CompoundSetter setterKind, |
| CompoundRhs rhs, |
| arg) { |
| - return translateCompounds( |
| - node, |
| - getValue: () { |
| - switch (getterKind) { |
| - case CompoundGetter.FIELD: |
| - SourceInformation src = sourceInformationBuilder.buildGet(node); |
| - return buildStaticFieldGet(getter, src); |
| - case CompoundGetter.GETTER: |
| - return buildStaticGetterGet(getter, node); |
| - case CompoundGetter.METHOD: |
| - return irBuilder.buildStaticFunctionGet(getter); |
| - case CompoundGetter.UNRESOLVED: |
| - return buildStaticNoSuchGetter(getter); |
|
asgerf
2016/01/11 21:16:36
The buildStaticNoSuchGetter seemed kind of conveni
|
| - } |
| - }, |
| - rhs: rhs, |
| - setValue: (ir.Primitive result) { |
| - switch (setterKind) { |
| - case CompoundSetter.FIELD: |
| - return irBuilder.buildStaticFieldSet(setter, result); |
| - case CompoundSetter.SETTER: |
| - return irBuilder.buildStaticSetterSet(setter, result); |
| - case CompoundSetter.INVALID: |
| - return buildStaticNoSuchSetter(setter, result); |
| - } |
| - }); |
| + ir.Primitive value; |
| + switch (getterKind) { |
| + case CompoundGetter.FIELD: |
| + SourceInformation src = sourceInformationBuilder.buildGet(node); |
| + value = buildStaticFieldGet(getter, src); |
| + break; |
| + case CompoundGetter.GETTER: |
| + value = buildStaticGetterGet(getter, node); |
| + break; |
| + case CompoundGetter.METHOD: |
| + value = irBuilder.addPrimitive(new ir.GetStatic(getter)); |
| + break; |
| + case CompoundGetter.UNRESOLVED: |
| + value = irBuilder.buildStaticNoSuchMethod( |
| + new Selector.getter(new Name(getter.name, getter.library)), |
| + <ir.Primitive>[]); |
| + break; |
| + } |
| + return translateCompounds(node, value, rhs, (ir.Primitive result) { |
| + switch (setterKind) { |
| + case CompoundSetter.FIELD: |
| + irBuilder.addPrimitive(new ir.SetStatic(setter, result)); |
| + break; |
| + case CompoundSetter.SETTER: |
| + irBuilder.buildStaticSetterSet(setter, result); |
| + break; |
| + case CompoundSetter.INVALID: |
| + irBuilder.buildStaticNoSuchMethod( |
| + new Selector.setter(new Name(setter.name, setter.library)), |
| + <ir.Primitive>[result]); |
| + break; |
| + } |
| + }); |
| } |
| @override |
| @@ -2533,32 +2478,39 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| CompoundSetter setterKind, |
| ast.Node rhs, |
| _) { |
| - return translateSetIfNull( |
| - node, |
| - getValue: () { |
| - switch (getterKind) { |
| - case CompoundGetter.FIELD: |
| - SourceInformation src = sourceInformationBuilder.buildGet(node); |
| - return buildStaticFieldGet(getter, src); |
| - case CompoundGetter.GETTER: |
| - return buildStaticGetterGet(getter, node); |
| - case CompoundGetter.METHOD: |
| - return irBuilder.buildStaticFunctionGet(getter); |
| - case CompoundGetter.UNRESOLVED: |
| - return buildStaticNoSuchGetter(getter); |
| - } |
| - }, |
| - rhs: rhs, |
| - setValue: (ir.Primitive result) { |
| - switch (setterKind) { |
| - case CompoundSetter.FIELD: |
| - return irBuilder.buildStaticFieldSet(setter, result); |
| - case CompoundSetter.SETTER: |
| - return irBuilder.buildStaticSetterSet(setter, result); |
| - case CompoundSetter.INVALID: |
| - return buildStaticNoSuchSetter(setter, result); |
| - } |
| - }); |
| + ir.Primitive value; |
| + switch (getterKind) { |
| + case CompoundGetter.FIELD: |
| + SourceInformation src = sourceInformationBuilder.buildGet(node); |
| + value = buildStaticFieldGet(getter, src); |
| + break; |
| + case CompoundGetter.GETTER: |
| + value = buildStaticGetterGet(getter, node); |
| + break; |
| + case CompoundGetter.METHOD: |
| + value = irBuilder.addPrimitive(new ir.GetStatic(getter)); |
| + break; |
| + case CompoundGetter.UNRESOLVED: |
| + value = irBuilder.buildStaticNoSuchMethod( |
| + new Selector.getter(new Name(getter.name, getter.library)), |
| + <ir.Primitive>[]); |
| + break; |
| + } |
| + return translateSetIfNull(node, value, rhs, (ir.Primitive result) { |
| + switch (setterKind) { |
| + case CompoundSetter.FIELD: |
| + irBuilder.addPrimitive(new ir.SetStatic(setter, result)); |
| + break; |
| + case CompoundSetter.SETTER: |
| + irBuilder.buildStaticSetterSet(setter, result); |
| + break; |
| + case CompoundSetter.INVALID: |
| + irBuilder.buildStaticNoSuchMethod( |
| + new Selector.setter(new Name(setter.name, setter.library)), |
| + <ir.Primitive>[result]); |
| + break; |
| + } |
| + }); |
| } |
| ir.Primitive buildSuperNoSuchGetter(Element element, TypeMask mask) { |
| @@ -2586,35 +2538,37 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| CompoundSetter setterKind, |
| CompoundRhs rhs, |
| arg) { |
| - return translateCompounds( |
| - node, |
| - getValue: () { |
| - switch (getterKind) { |
| - case CompoundGetter.FIELD: |
| - return irBuilder.buildSuperFieldGet(getter); |
| - case CompoundGetter.GETTER: |
| - return irBuilder.buildSuperGetterGet( |
| - getter, sourceInformationBuilder.buildGet(node)); |
| - case CompoundGetter.METHOD: |
| - return irBuilder.buildSuperMethodGet(getter); |
| - case CompoundGetter.UNRESOLVED: |
| - return buildSuperNoSuchGetter( |
| - getter, |
| - elements.getGetterTypeMaskInComplexSendSet(node)); |
| - } |
| - }, |
| - rhs: rhs, |
| - setValue: (ir.Primitive result) { |
| - switch (setterKind) { |
| - case CompoundSetter.FIELD: |
| - return irBuilder.buildSuperFieldSet(setter, result); |
| - case CompoundSetter.SETTER: |
| - return irBuilder.buildSuperSetterSet(setter, result); |
| - case CompoundSetter.INVALID: |
| - return buildSuperNoSuchSetter( |
| - setter, elements.getTypeMask(node), result); |
| - } |
| - }); |
| + ir.Primitive value; |
| + switch (getterKind) { |
| + case CompoundGetter.FIELD: |
| + value = irBuilder.buildSuperFieldGet(getter); |
| + break; |
| + case CompoundGetter.GETTER: |
| + value = irBuilder.buildSuperGetterGet( |
| + getter, sourceInformationBuilder.buildGet(node)); |
| + break; |
| + case CompoundGetter.METHOD: |
| + value = irBuilder.buildSuperMethodGet(getter); |
| + break; |
| + case CompoundGetter.UNRESOLVED: |
| + value = buildSuperNoSuchGetter( |
| + getter, elements.getGetterTypeMaskInComplexSendSet(node)); |
| + break; |
| + } |
| + return translateCompounds(node, value, rhs, (ir.Primitive result) { |
| + switch (setterKind) { |
| + case CompoundSetter.FIELD: |
| + irBuilder.buildSuperFieldSet(setter, result); |
| + break; |
| + case CompoundSetter.SETTER: |
| + irBuilder.buildSuperSetterSet(setter, result); |
| + break; |
| + case CompoundSetter.INVALID: |
| + buildSuperNoSuchSetter( |
| + setter, elements.getTypeMask(node), result); |
| + break; |
| + } |
| + }); |
| } |
| @override |
| @@ -2626,35 +2580,38 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| CompoundSetter setterKind, |
| ast.Node rhs, |
| _) { |
| - return translateSetIfNull( |
| - node, |
| - getValue: () { |
| - switch (getterKind) { |
| - case CompoundGetter.FIELD: |
| - return irBuilder.buildSuperFieldGet(getter); |
| - case CompoundGetter.GETTER: |
| - return irBuilder.buildSuperGetterGet( |
| - getter, sourceInformationBuilder.buildGet(node)); |
| - case CompoundGetter.METHOD: |
| - return irBuilder.buildSuperMethodGet(getter); |
| - case CompoundGetter.UNRESOLVED: |
| - return buildSuperNoSuchGetter( |
| - getter, |
| - elements.getGetterTypeMaskInComplexSendSet(node)); |
| - } |
| - }, |
| - rhs: rhs, |
| - setValue: (ir.Primitive result) { |
| - switch (setterKind) { |
| - case CompoundSetter.FIELD: |
| - return irBuilder.buildSuperFieldSet(setter, result); |
| - case CompoundSetter.SETTER: |
| - return irBuilder.buildSuperSetterSet(setter, result); |
| - case CompoundSetter.INVALID: |
| - return buildSuperNoSuchSetter( |
| - setter, elements.getTypeMask(node), result); |
| - } |
| - }); |
| + ir.Primitive value; |
| + switch (getterKind) { |
| + case CompoundGetter.FIELD: |
| + value = irBuilder.buildSuperFieldGet(getter); |
| + break; |
| + case CompoundGetter.GETTER: |
| + value = irBuilder.buildSuperGetterGet( |
| + getter, sourceInformationBuilder.buildGet(node)); |
| + break; |
| + case CompoundGetter.METHOD: |
| + value = irBuilder.buildSuperMethodGet(getter); |
| + break; |
| + case CompoundGetter.UNRESOLVED: |
| + value = buildSuperNoSuchGetter( |
| + getter, |
| + elements.getGetterTypeMaskInComplexSendSet(node)); |
| + break; |
| + } |
| + return translateSetIfNull(node, value, rhs, (ir.Primitive result) { |
| + switch (setterKind) { |
| + case CompoundSetter.FIELD: |
| + irBuilder.buildSuperFieldSet(setter, result); |
| + break; |
| + case CompoundSetter.SETTER: |
| + irBuilder.buildSuperSetterSet(setter, result); |
| + break; |
| + case CompoundSetter.INVALID: |
| + buildSuperNoSuchSetter( |
| + setter, elements.getTypeMask(node), result); |
| + break; |
| + } |
| + }); |
| } |
| @override |
| @@ -2663,15 +2620,12 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| TypeVariableElement typeVariable, |
| CompoundRhs rhs, |
| arg) { |
| - return translateCompounds( |
| - node, |
| - getValue: () { |
| - return irBuilder.buildReifyTypeVariable( |
| - typeVariable.type, |
| - sourceInformationBuilder.buildGet(node)); |
| - }, |
| - rhs: rhs, |
| - setValue: (value) {}); // The binary operator will throw before this. |
| + ir.Primitive value = irBuilder.buildReifyTypeVariable( |
| + typeVariable.type, |
| + sourceInformationBuilder.buildGet(node)); |
| + return translateCompounds(node, value, rhs, (ir.Primitive value) { |
| + // The binary operator will throw before this. |
| + }); |
| } |
| @override |
| @@ -2694,29 +2648,24 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| arg) { |
| ir.Primitive target = visit(receiver); |
| ir.Primitive indexValue = visit(index); |
| - return translateCompounds( |
| - node, |
| - getValue: () { |
| - Selector selector = new Selector.index(); |
| - List<ir.Primitive> arguments = <ir.Primitive>[indexValue]; |
| - CallStructure callStructure = |
| - normalizeDynamicArguments(selector.callStructure, arguments); |
| - return irBuilder.buildDynamicInvocation( |
| - target, |
| - new Selector(selector.kind, selector.memberName, callStructure), |
| - elements.getGetterTypeMaskInComplexSendSet(node), |
| - arguments, |
| - sourceInformation: |
| - sourceInformationBuilder.buildCall(receiver, node)); |
| - }, |
| - rhs: rhs, |
| - setValue: (ir.Primitive result) { |
| - irBuilder.buildDynamicIndexSet( |
| - target, |
| - elements.getTypeMask(node), |
| - indexValue, |
| - result); |
| - }); |
| + Selector selector = new Selector.index(); |
| + List<ir.Primitive> arguments = <ir.Primitive>[indexValue]; |
| + CallStructure callStructure = |
| + normalizeDynamicArguments(selector.callStructure, arguments); |
| + ir.Primitive value = irBuilder.buildDynamicInvocation( |
| + target, |
| + new Selector(selector.kind, selector.memberName, callStructure), |
| + elements.getGetterTypeMaskInComplexSendSet(node), |
| + arguments, |
| + sourceInformation: |
| + sourceInformationBuilder.buildCall(receiver, node)); |
| + return translateCompounds(node, value, rhs, (ir.Primitive result) { |
| + irBuilder.buildDynamicIndexSet( |
| + target, |
| + elements.getTypeMask(node), |
| + indexValue, |
| + result); |
| + }); |
| } |
| @override |
| @@ -2730,29 +2679,22 @@ class IrBuilderVisitor extends ast.Visitor<ir.Primitive> |
| {bool isGetterValid, |
| bool isSetterValid}) { |
| ir.Primitive indexValue = visit(index); |
| - return translateCompounds( |
| - node, |
| - getValue: () { |
| - if (isGetterValid) { |
| - return irBuilder.buildSuperIndex(indexFunction, indexValue); |
| - } else { |
| - return buildInstanceNoSuchMethod( |
| - new Selector.index(), |
| - elements.getGetterTypeMaskInComplexSendSet(node), |
| - <ir.Primitive>[indexValue]); |
| - } |
| - }, |
| - rhs: rhs, |
| - setValue: (ir.Primitive result) { |
| - if (isSetterValid) { |
| - irBuilder.buildSuperIndexSet(indexSetFunction, indexValue, result); |
| - } else { |
| - buildInstanceNoSuchMethod( |
| - new Selector.indexSet(), |
| - elements.getTypeMask(node), |
| - <ir.Primitive>[indexValue, result]); |
| - } |
| - }); |
| + ir.Primitive value = isGetterValid |
| + ? irBuilder.buildSuperIndex(indexFunction, indexValue) |
| + : buildInstanceNoSuchMethod( |
| + new Selector.index(), |
| + elements.getGetterTypeMaskInComplexSendSet(node), |
| + <ir.Primitive>[indexValue]); |
| + return translateCompounds(node, value, rhs, (ir.Primitive result) { |
| + if (isSetterValid) { |
| + irBuilder.buildSuperIndexSet(indexSetFunction, indexValue, result); |
| + } else { |
| + buildInstanceNoSuchMethod( |
| + new Selector.indexSet(), |
| + elements.getTypeMask(node), |
| + <ir.Primitive>[indexValue, result]); |
| + } |
| + }); |
| } |
| /// Build code to handle foreign code, that is, native JavaScript code, or |