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 3d55e7d8f5f63d26b865ebe444542bb278017a8c..4e5f9240d11b3c97fa7acd812476082987890d68 100644 |
| --- a/lib/compiler/implementation/ssa/codegen.dart |
| +++ b/lib/compiler/implementation/ssa/codegen.dart |
| @@ -1715,42 +1715,43 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor { |
| } |
| visitFieldGet(HFieldGet node) { |
| - if (!node.isFromActivation()) { |
| - String name = compiler.namer.getName(node.element); |
| - beginExpression(JSPrecedence.MEMBER_PRECEDENCE); |
| - use(node.receiver, JSPrecedence.MEMBER_PRECEDENCE); |
| - buffer.add('.'); |
| - buffer.add(name); |
| - beginExpression(JSPrecedence.MEMBER_PRECEDENCE); |
| - Type type = node.receiver.propagatedType.computeType(compiler); |
| - if (type != null) { |
| - world.registerFieldGetter(node.element.name, type); |
| - } |
| - } else { |
| - use(node.receiver, JSPrecedence.EXPRESSION_PRECEDENCE); |
| + String name = compiler.namer.getName(node.element); |
| + beginExpression(JSPrecedence.MEMBER_PRECEDENCE); |
| + use(node.receiver, JSPrecedence.MEMBER_PRECEDENCE); |
| + buffer.add('.'); |
| + buffer.add(name); |
| + beginExpression(JSPrecedence.MEMBER_PRECEDENCE); |
| + Type type = node.receiver.propagatedType.computeType(compiler); |
| + if (type != null) { |
| + world.registerFieldGetter(node.element.name, type); |
| } |
| } |
| visitFieldSet(HFieldSet node) { |
| String name; |
|
kasperl
2012/06/19 11:19:45
String name =
floitsch
2012/06/19 11:31:33
Done.
|
| - if (!node.isFromActivation()) { |
| - name = compiler.namer.getName(node.element); |
| - beginExpression(JSPrecedence.ASSIGNMENT_PRECEDENCE); |
| - use(node.receiver, JSPrecedence.MEMBER_PRECEDENCE); |
| - buffer.add('.'); |
| - buffer.add(name); |
| - Type type = node.receiver.propagatedType.computeType(compiler); |
| - if (type != null) { |
| - world.registerFieldSetter(node.element.name, type); |
| - } |
| - } else { |
| - declareInstruction(node.receiver); |
| + name = compiler.namer.getName(node.element); |
| + beginExpression(JSPrecedence.ASSIGNMENT_PRECEDENCE); |
| + use(node.receiver, JSPrecedence.MEMBER_PRECEDENCE); |
| + buffer.add('.'); |
| + buffer.add(name); |
| + Type type = node.receiver.propagatedType.computeType(compiler); |
| + if (type != null) { |
| + world.registerFieldSetter(node.element.name, type); |
| } |
| buffer.add(' = '); |
| use(node.value, JSPrecedence.ASSIGNMENT_PRECEDENCE); |
| - if (node.receiver !== null) { |
| - endExpression(JSPrecedence.ASSIGNMENT_PRECEDENCE); |
| - } |
| + endExpression(JSPrecedence.ASSIGNMENT_PRECEDENCE); |
| + } |
| + |
| + visitLocalGet(HLocalGet node) { |
| + use(node.receiver, JSPrecedence.EXPRESSION_PRECEDENCE); |
| + } |
| + |
| + visitLocalSet(HLocalSet node) { |
| + String name; |
|
kasperl
2012/06/19 11:19:45
Unused name?
floitsch
2012/06/19 11:31:33
Done.
|
| + declareInstruction(node.receiver); |
| + buffer.add(' = '); |
| + use(node.value, JSPrecedence.ASSIGNMENT_PRECEDENCE); |
| } |
| visitForeign(HForeign node) { |
| @@ -1903,6 +1904,11 @@ class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor { |
| buffer.add(variableNames.getName(node)); |
| } |
| + visitLocalValue(HLocalValue node) { |
| + assert(isGenerateAtUseSite(node)); |
| + buffer.add(variableNames.getName(node)); |
| + } |
| + |
| visitPhi(HPhi node) { |
| // This method is only called for phis that are generated at use |
| // site. A phi can be generated at use site only if it is the |