| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library code_generator; | 5 library code_generator; |
| 6 | 6 |
| 7 import 'glue.dart'; | 7 import 'glue.dart'; |
| 8 | 8 |
| 9 import '../../tree_ir/tree_ir_nodes.dart' as tree_ir; | 9 import '../../tree_ir/tree_ir_nodes.dart' as tree_ir; |
| 10 import '../../js/js.dart' as js; | 10 import '../../js/js.dart' as js; |
| (...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 js.PropertyAccess field = | 583 js.PropertyAccess field = |
| 584 new js.PropertyAccess.field( | 584 new js.PropertyAccess.field( |
| 585 visitExpression(node.object), | 585 visitExpression(node.object), |
| 586 glue.instanceFieldPropertyName(node.field)); | 586 glue.instanceFieldPropertyName(node.field)); |
| 587 return new js.Assignment(field, visitExpression(node.value)); | 587 return new js.Assignment(field, visitExpression(node.value)); |
| 588 } | 588 } |
| 589 | 589 |
| 590 @override | 590 @override |
| 591 js.Expression visitGetStatic(tree_ir.GetStatic node) { | 591 js.Expression visitGetStatic(tree_ir.GetStatic node) { |
| 592 assert(node.element is FieldElement || node.element is FunctionElement); | 592 assert(node.element is FieldElement || node.element is FunctionElement); |
| 593 if (node.element is FieldElement) { | 593 if (node.element is FunctionElement) { |
| 594 registry.registerStaticUse(node.element.declaration); | 594 // Tear off a method. |
| 595 return glue.staticFieldAccess(node.element); | |
| 596 } else { | |
| 597 registry.registerGetOfStaticFunction(node.element.declaration); | 595 registry.registerGetOfStaticFunction(node.element.declaration); |
| 598 return glue.isolateStaticClosureAccess(node.element); | 596 return glue.isolateStaticClosureAccess(node.element); |
| 599 } | 597 } |
| 598 if (glue.isLazilyInitialized(node.element)) { |
| 599 // Read a lazily initialized field. |
| 600 registry.registerStaticUse(node.element.declaration); |
| 601 js.Expression getter = glue.isolateLazyInitializerAccess(node.element); |
| 602 return new js.Call(getter, [], sourceInformation: node.sourceInformation); |
| 603 } |
| 604 // Read an eagerly initialized field. |
| 605 registry.registerStaticUse(node.element.declaration); |
| 606 return glue.staticFieldAccess(node.element); |
| 600 } | 607 } |
| 601 | 608 |
| 602 @override | 609 @override |
| 603 js.Expression visitSetStatic(tree_ir.SetStatic node) { | 610 js.Expression visitSetStatic(tree_ir.SetStatic node) { |
| 604 assert(node.element is FieldElement); | 611 assert(node.element is FieldElement); |
| 605 registry.registerStaticUse(node.element.declaration); | 612 registry.registerStaticUse(node.element.declaration); |
| 606 js.Expression field = glue.staticFieldAccess(node.element); | 613 js.Expression field = glue.staticFieldAccess(node.element); |
| 607 js.Expression value = visitExpression(node.value); | 614 js.Expression value = visitExpression(node.value); |
| 608 return new js.Assignment(field, value); | 615 return new js.Assignment(field, value); |
| 609 } | 616 } |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 666 | 673 |
| 667 @override | 674 @override |
| 668 visitVariableDeclaration(tree_ir.VariableDeclaration node) { | 675 visitVariableDeclaration(tree_ir.VariableDeclaration node) { |
| 669 return errorUnsupportedNode(node); | 676 return errorUnsupportedNode(node); |
| 670 } | 677 } |
| 671 | 678 |
| 672 errorUnsupportedNode(tree_ir.DartSpecificNode node) { | 679 errorUnsupportedNode(tree_ir.DartSpecificNode node) { |
| 673 throw "Unsupported node in JS backend: $node"; | 680 throw "Unsupported node in JS backend: $node"; |
| 674 } | 681 } |
| 675 } | 682 } |
| OLD | NEW |