Index: lib/compiler/implementation/ssa/codegen.dart |
diff --git a/lib/compiler/implementation/ssa/codegen.dart b/lib/compiler/implementation/ssa/codegen.dart |
index 00559374462d650468048fe66d2a51e9de9d69dd..5a41fbb8965b6f23cd441fbe451867c775d89dde 100644 |
--- a/lib/compiler/implementation/ssa/codegen.dart |
+++ b/lib/compiler/implementation/ssa/codegen.dart |
@@ -1527,8 +1527,8 @@ 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); |
} |
visitInvokeDynamicGetter(HInvokeDynamicGetter node) { |
@@ -1637,33 +1637,13 @@ 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) { |
if (!work.element.isGenerativeConstructorBody()) { |
ngeoffray
2012/09/24 08:15:49
Please add a comment on why you're checking this.
Søren Gjesse
2012/09/24 15:06:50
Done.
|
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(node, types); |
ngeoffray
2012/09/24 08:15:49
Does the backend have to know about types/nodes? Y
Søren Gjesse
2012/09/24 15:06:50
No. Changed to pass Element and HType.
|
} |
} |
use(node.receiver); |
@@ -1702,14 +1682,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]. |