Chromium Code Reviews| Index: lib/compiler/implementation/ssa/codegen.dart |
| diff --git a/lib/compiler/implementation/ssa/codegen.dart b/lib/compiler/implementation/ssa/codegen.dart |
| index 0702d3677f553702a97c0ecf698f30a4fe72ab81..9352c73d9ffcc0d511224dbe76872ec42cbde5e2 100644 |
| --- a/lib/compiler/implementation/ssa/codegen.dart |
| +++ b/lib/compiler/implementation/ssa/codegen.dart |
| @@ -1527,8 +1527,9 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor { |
| Selector setter = node.selector; |
| String name = backend.namer.setterName(setter.library, setter.name); |
| push(jsPropertyCall(pop(), name, visitArguments(node.inputs)), node); |
| - world.registerDynamicSetter( |
| - setter.name, getOptimizedSelectorFor(node, setter)); |
| + Selector selector = getOptimizedSelectorFor(node, setter); |
| + world.registerDynamicSetter(setter.name, selector); |
| + backend.addedDynamicSetter(selector, types[node.inputs[1]]); |
| } |
| visitInvokeDynamicGetter(HInvokeDynamicGetter node) { |
| @@ -1637,33 +1638,15 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor { |
| } |
| visitFieldSet(HFieldSet node) { |
| - if (work.element.isGenerativeConstructorBody() && |
| - node.element.isMember() && |
| - node.value.hasGuaranteedType() && |
| - node.block.dominates(currentGraph.exit)) { |
| - backend.updateFieldConstructorSetters(node.element, |
| - node.value.guaranteedType); |
| - } |
| String name = backend.namer.getName(node.element); |
| DartType type = types[node.receiver].computeType(compiler); |
| if (type != null) { |
| + // Field setters in the generative constructor body are handled in a |
| + // separate step in the ssa optimizer. |
|
ngeoffray
2012/09/25 21:15:43
Please name the step.
Søren Gjesse
2012/09/27 11:53:40
Done.
|
| if (!work.element.isGenerativeConstructorBody()) { |
| world.registerFieldSetter( |
| node.element.name, node.element.getLibrary(), type); |
| - } |
| - // Determine the types seen so far for the field. If only number |
| - // types have been seen and the value of the field set is a |
| - // simple number computation only depending on that field, we |
| - // can safely keep the number type for the field. |
| - HType fieldSettersType = backend.fieldSettersTypeSoFar(node.element); |
| - HType initializersType = |
| - backend.typeFromInitializersSoFar(node.element); |
| - HType fieldType = fieldSettersType.union(initializersType); |
| - if (HType.NUMBER.union(fieldType) == HType.NUMBER && |
| - isSimpleFieldNumberComputation(node.value, node)) { |
| - backend.updateFieldSetters(node.element, HType.NUMBER); |
| - } else { |
| - backend.updateFieldSetters(node.element, types[node.value]); |
| + backend.registerFieldSetter(work.element, node.element, types[node.value]); |
|
ngeoffray
2012/09/25 21:15:43
Line too long
Søren Gjesse
2012/09/27 11:53:40
Done.
|
| } |
| } |
| use(node.receiver); |
| @@ -1702,14 +1685,6 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor { |
| } |
| visitForeignNew(HForeignNew node) { |
| - int j = 0; |
| - node.element.forEachInstanceField( |
| - includeBackendMembers: true, |
| - includeSuperMembers: true, |
| - f: (ClassElement enclosingClass, Element member) { |
| - backend.updateFieldInitializers(member, types[node.inputs[j]]); |
| - j++; |
| - }); |
| String jsClassReference = backend.namer.isolateAccess(node.element); |
| List<HInstruction> inputs = node.inputs; |
| // We can't use 'visitArguments', since our arguments start at input[0]. |