OLD | NEW |
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 /// This file declares a "shadow hierarchy" of concrete classes which extend | 5 /// This file declares a "shadow hierarchy" of concrete classes which extend |
6 /// the kernel class hierarchy, adding methods and fields needed by the | 6 /// the kernel class hierarchy, adding methods and fields needed by the |
7 /// BodyBuilder. | 7 /// BodyBuilder. |
8 /// | 8 /// |
9 /// Instances of these classes may be created using the factory methods in | 9 /// Instances of these classes may be created using the factory methods in |
10 /// `ast_factory.dart`. | 10 /// `ast_factory.dart`. |
(...skipping 1502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1513 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { | 1513 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
1514 // TODO(scheglov): implement. | 1514 // TODO(scheglov): implement. |
1515 return typeNeeded ? const DynamicType() : null; | 1515 return typeNeeded ? const DynamicType() : null; |
1516 } | 1516 } |
1517 } | 1517 } |
1518 | 1518 |
1519 /// Shadow object for [ThisExpression]. | 1519 /// Shadow object for [ThisExpression]. |
1520 class KernelThisExpression extends ThisExpression implements KernelExpression { | 1520 class KernelThisExpression extends ThisExpression implements KernelExpression { |
1521 @override | 1521 @override |
1522 void _collectDependencies(KernelDependencyCollector collector) { | 1522 void _collectDependencies(KernelDependencyCollector collector) { |
1523 // TODO(paulberry): figure out the right thing to do here. | 1523 // Field initializers are not allowed to refer to [this]. But if it |
1524 throw 'TODO(paulberry)'; | 1524 // happens, we can still proceed; no additional type inference dependencies |
| 1525 // are introduced. |
1525 } | 1526 } |
1526 | 1527 |
1527 @override | 1528 @override |
1528 DartType _inferExpression( | 1529 DartType _inferExpression( |
1529 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { | 1530 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
1530 // TODO(scheglov): implement. | 1531 return typeNeeded ? (inferrer.thisType ?? const DynamicType()) : null; |
1531 return typeNeeded ? const DynamicType() : null; | |
1532 } | 1532 } |
1533 } | 1533 } |
1534 | 1534 |
1535 /// Shadow object for [Throw]. | 1535 /// Shadow object for [Throw]. |
1536 class KernelThrow extends Throw implements KernelExpression { | 1536 class KernelThrow extends Throw implements KernelExpression { |
1537 KernelThrow(Expression expression) : super(expression); | 1537 KernelThrow(Expression expression) : super(expression); |
1538 | 1538 |
1539 @override | 1539 @override |
1540 void _collectDependencies(KernelDependencyCollector collector) { | 1540 void _collectDependencies(KernelDependencyCollector collector) { |
1541 // No inference dependencies. | 1541 // No inference dependencies. |
(...skipping 20 matching lines...) Expand all Loading... |
1562 | 1562 |
1563 @override | 1563 @override |
1564 FieldNode createFieldNode(KernelField field) { | 1564 FieldNode createFieldNode(KernelField field) { |
1565 FieldNode fieldNode = new FieldNode(this, field); | 1565 FieldNode fieldNode = new FieldNode(this, field); |
1566 field._fieldNode = fieldNode; | 1566 field._fieldNode = fieldNode; |
1567 return fieldNode; | 1567 return fieldNode; |
1568 } | 1568 } |
1569 | 1569 |
1570 @override | 1570 @override |
1571 KernelTypeInferrer createLocalTypeInferrer( | 1571 KernelTypeInferrer createLocalTypeInferrer( |
1572 Uri uri, TypeInferenceListener listener) { | 1572 Uri uri, TypeInferenceListener listener, InterfaceType thisType) { |
1573 return new KernelTypeInferrer._(this, uri.toString(), listener, false); | 1573 return new KernelTypeInferrer._( |
| 1574 this, uri.toString(), listener, false, thisType); |
1574 } | 1575 } |
1575 | 1576 |
1576 @override | 1577 @override |
1577 KernelTypeInferrer createTopLevelTypeInferrer( | 1578 KernelTypeInferrer createTopLevelTypeInferrer(KernelField field, |
1578 KernelField field, TypeInferenceListener listener) { | 1579 TypeInferenceListener listener, InterfaceType thisType) { |
1579 return field._typeInferrer = | 1580 return field._typeInferrer = |
1580 new KernelTypeInferrer._(this, field.fileUri, listener, true); | 1581 new KernelTypeInferrer._(this, field.fileUri, listener, true, thisType); |
1581 } | 1582 } |
1582 | 1583 |
1583 @override | 1584 @override |
1584 bool fieldHasInitializer(KernelField field) { | 1585 bool fieldHasInitializer(KernelField field) { |
1585 return field.initializer != null; | 1586 return field.initializer != null; |
1586 } | 1587 } |
1587 | 1588 |
1588 @override | 1589 @override |
1589 DartType getFieldDeclaredType(KernelField field) { | 1590 DartType getFieldDeclaredType(KernelField field) { |
1590 return field._implicitlyTyped ? null : field.type; | 1591 return field._implicitlyTyped ? null : field.type; |
(...skipping 20 matching lines...) Expand all Loading... |
1611 } | 1612 } |
1612 } | 1613 } |
1613 | 1614 |
1614 /// Concrete implementation of [TypeInferrer] specialized to work with kernel | 1615 /// Concrete implementation of [TypeInferrer] specialized to work with kernel |
1615 /// objects. | 1616 /// objects. |
1616 class KernelTypeInferrer extends TypeInferrerImpl { | 1617 class KernelTypeInferrer extends TypeInferrerImpl { |
1617 @override | 1618 @override |
1618 final typePromoter = new KernelTypePromoter(); | 1619 final typePromoter = new KernelTypePromoter(); |
1619 | 1620 |
1620 KernelTypeInferrer._(KernelTypeInferenceEngine engine, String uri, | 1621 KernelTypeInferrer._(KernelTypeInferenceEngine engine, String uri, |
1621 TypeInferenceListener listener, bool topLevel) | 1622 TypeInferenceListener listener, bool topLevel, InterfaceType thisType) |
1622 : super(engine, uri, listener, topLevel); | 1623 : super(engine, uri, listener, topLevel, thisType); |
1623 | 1624 |
1624 @override | 1625 @override |
1625 Expression getFieldInitializer(KernelField field) { | 1626 Expression getFieldInitializer(KernelField field) { |
1626 return field.initializer; | 1627 return field.initializer; |
1627 } | 1628 } |
1628 | 1629 |
1629 @override | 1630 @override |
1630 DartType inferExpression( | 1631 DartType inferExpression( |
1631 Expression expression, DartType typeContext, bool typeNeeded) { | 1632 Expression expression, DartType typeContext, bool typeNeeded) { |
1632 if (expression is KernelExpression) { | 1633 if (expression is KernelExpression) { |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1938 } | 1939 } |
1939 | 1940 |
1940 transformChildren(v) { | 1941 transformChildren(v) { |
1941 return internalError("Internal error: Unsupported operation."); | 1942 return internalError("Internal error: Unsupported operation."); |
1942 } | 1943 } |
1943 | 1944 |
1944 visitChildren(v) { | 1945 visitChildren(v) { |
1945 return internalError("Internal error: Unsupported operation."); | 1946 return internalError("Internal error: Unsupported operation."); |
1946 } | 1947 } |
1947 } | 1948 } |
OLD | NEW |