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

Side by Side Diff: pkg/compiler/lib/src/kernel/env.dart

Issue 3009593002: It's alive (first kernel inference test) (Closed)
Patch Set: Updated cf. comment Created 3 years, 3 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
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 dart2js.kernel.env; 5 library dart2js.kernel.env;
6 6
7 import 'package:kernel/ast.dart' as ir; 7 import 'package:kernel/ast.dart' as ir;
8 import 'package:kernel/clone.dart'; 8 import 'package:kernel/clone.dart';
9 import 'package:kernel/type_algebra.dart'; 9 import 'package:kernel/type_algebra.dart';
10 10
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 558
559 @override 559 @override
560 ConstructorData copy() { 560 ConstructorData copy() {
561 return new ConstructorDataImpl(node, functionNode, definition); 561 return new ConstructorDataImpl(node, functionNode, definition);
562 } 562 }
563 } 563 }
564 564
565 abstract class FieldData extends MemberData { 565 abstract class FieldData extends MemberData {
566 DartType getFieldType(KernelToElementMap elementMap); 566 DartType getFieldType(KernelToElementMap elementMap);
567 567
568 ConstantExpression getFieldConstant( 568 ConstantExpression getFieldConstantExpression(
569 KernelToElementMapBase elementMap, FieldEntity field); 569 KernelToElementMapBase elementMap);
570
571 /// Return the [ConstantValue] the initial value of [field] or `null` if
572 /// the initializer is not a constant expression.
573 ConstantValue getFieldConstantValue(KernelToElementMapBase elementMap);
574
575 bool hasConstantFieldInitializer(KernelToElementMapBase elementMap);
576
577 ConstantValue getConstantFieldInitializer(KernelToElementMapBase elementMap);
570 } 578 }
571 579
572 class FieldDataImpl extends MemberDataImpl implements FieldData { 580 class FieldDataImpl extends MemberDataImpl implements FieldData {
573 DartType _type; 581 DartType _type;
574 ConstantExpression _constant; 582 bool _isConstantComputed = false;
583 ConstantValue _constantValue;
584 ConstantExpression _constantExpression;
575 585
576 FieldDataImpl(ir.Field node, MemberDefinition definition) 586 FieldDataImpl(ir.Field node, MemberDefinition definition)
577 : super(node, definition); 587 : super(node, definition);
578 588
579 ir.Field get node => super.node; 589 ir.Field get node => super.node;
580 590
581 DartType getFieldType(covariant KernelToElementMapBase elementMap) { 591 DartType getFieldType(covariant KernelToElementMapBase elementMap) {
582 return _type ??= elementMap.getDartType(node.type); 592 return _type ??= elementMap.getDartType(node.type);
583 } 593 }
584 594
585 ConstantExpression getFieldConstant( 595 ConstantExpression getFieldConstantExpression(
586 KernelToElementMapBase elementMap, FieldEntity field) { 596 KernelToElementMapBase elementMap) {
587 if (_constant == null) { 597 if (_constantExpression == null) {
588 if (node.isConst) { 598 if (node.isConst) {
589 _constant = new Constantifier(elementMap).visit(node.initializer); 599 _constantExpression =
600 new Constantifier(elementMap).visit(node.initializer);
590 } else { 601 } else {
591 failedAt( 602 failedAt(
592 field, 603 definition.member,
593 "Unexpected field $field in " 604 "Unexpected field ${definition.member} in "
594 "FieldDataImpl.getFieldConstant"); 605 "FieldDataImpl.getFieldConstant");
595 } 606 }
596 } 607 }
597 return _constant; 608 return _constantExpression;
598 } 609 }
599 610
600 @override 611 @override
612 ConstantValue getFieldConstantValue(KernelToElementMapBase elementMap) {
613 if (!_isConstantComputed) {
614 _constantValue = elementMap.getConstantValue(node.initializer,
615 requireConstant: node.isConst, implicitNull: !node.isConst);
616 _isConstantComputed = true;
617 }
618 return _constantValue;
619 }
620
621 @override
622 bool hasConstantFieldInitializer(KernelToElementMapBase elementMap) {
623 return getFieldConstantValue(elementMap) != null;
624 }
625
626 @override
627 ConstantValue getConstantFieldInitializer(KernelToElementMapBase elementMap) {
628 ConstantValue value = getFieldConstantValue(elementMap);
629 assert(
630 value != null,
631 failedAt(definition.member,
632 "Field ${definition.member} doesn't have a constant initial value.") );
633 return value;
634 }
635
636 @override
601 FieldData copy() { 637 FieldData copy() {
602 return new FieldDataImpl(node, definition); 638 return new FieldDataImpl(node, definition);
603 } 639 }
604 } 640 }
605 641
606 class TypedefData { 642 class TypedefData {
607 final ir.Typedef node; 643 final ir.Typedef node;
608 final TypedefEntity element; 644 final TypedefEntity element;
609 final TypedefType rawType; 645 final TypedefType rawType;
610 646
611 TypedefData(this.node, this.element, this.rawType); 647 TypedefData(this.node, this.element, this.rawType);
612 } 648 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/kernel/element_map_impl.dart ('k') | pkg/compiler/lib/src/ssa/builder_kernel.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698