Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(174)

Side by Side Diff: pkg/compiler/lib/src/js_backend/codegen/codegen.dart

Issue 1136843006: dart2js cps: Access to lazily initialized fields. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Rebase Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/type_propagation.dart ('k') | pkg/compiler/lib/src/js_backend/codegen/glue.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698