| 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 |