| 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 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 549 interfaceMember: target, methodName: target.name, arguments: arguments); | 549 interfaceMember: target, methodName: target.name, arguments: arguments); |
| 550 } | 550 } |
| 551 } | 551 } |
| 552 | 552 |
| 553 /// Shadow object for [DirectPropertyGet]. | 553 /// Shadow object for [DirectPropertyGet]. |
| 554 class KernelDirectPropertyGet extends DirectPropertyGet | 554 class KernelDirectPropertyGet extends DirectPropertyGet |
| 555 implements KernelExpression { | 555 implements KernelExpression { |
| 556 KernelDirectPropertyGet(Expression receiver, Member target) | 556 KernelDirectPropertyGet(Expression receiver, Member target) |
| 557 : super(receiver, target); | 557 : super(receiver, target); |
| 558 | 558 |
| 559 KernelDirectPropertyGet.byReference( | |
| 560 Expression receiver, Reference targetReference) | |
| 561 : super.byReference(receiver, targetReference); | |
| 562 | |
| 563 @override | 559 @override |
| 564 void _collectDependencies(KernelDependencyCollector collector) { | 560 void _collectDependencies(KernelDependencyCollector collector) { |
| 565 // TODO(paulberry): Determine the right thing to do here. | 561 // DirectPropertyGet can only occur as a result of a use of `super`, and |
| 566 throw 'TODO(paulberry)'; | 562 // `super` can't appear inside a field initializer. So this code should |
| 563 // never be reached. |
| 564 internalError( |
| 565 'Unexpected call to _collectDependencies for DirectPropertyGet'); |
| 567 } | 566 } |
| 568 | 567 |
| 569 @override | 568 @override |
| 570 DartType _inferExpression( | 569 DartType _inferExpression( |
| 571 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { | 570 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
| 572 // TODO(scheglov): implement. | 571 return inferrer.inferPropertyGet( |
| 573 return typeNeeded ? const DynamicType() : null; | 572 this, receiver, fileOffset, typeContext, typeNeeded, |
| 573 propertyName: target.name); |
| 574 } | 574 } |
| 575 } | 575 } |
| 576 | 576 |
| 577 /// Concrete shadow object representing a do loop in kernel form. | 577 /// Concrete shadow object representing a do loop in kernel form. |
| 578 class KernelDoStatement extends DoStatement implements KernelStatement { | 578 class KernelDoStatement extends DoStatement implements KernelStatement { |
| 579 KernelDoStatement(Statement body, Expression condition) | 579 KernelDoStatement(Statement body, Expression condition) |
| 580 : super(body, condition); | 580 : super(body, condition); |
| 581 | 581 |
| 582 @override | 582 @override |
| 583 void _inferStatement(KernelTypeInferrer inferrer) { | 583 void _inferStatement(KernelTypeInferrer inferrer) { |
| (...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1374 | 1374 |
| 1375 @override | 1375 @override |
| 1376 void _collectDependencies(KernelDependencyCollector collector) { | 1376 void _collectDependencies(KernelDependencyCollector collector) { |
| 1377 // Null aware expressions are not immediately evident. | 1377 // Null aware expressions are not immediately evident. |
| 1378 collector.recordNotImmediatelyEvident(fileOffset); | 1378 collector.recordNotImmediatelyEvident(fileOffset); |
| 1379 } | 1379 } |
| 1380 | 1380 |
| 1381 @override | 1381 @override |
| 1382 DartType _inferExpression( | 1382 DartType _inferExpression( |
| 1383 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { | 1383 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
| 1384 var inferredType = inferrer.inferPropertyGet( | 1384 var inferredType = inferrer.inferPropertyGet(this, variable.initializer, |
| 1385 this, | 1385 fileOffset, typeContext, typeNeeded || inferrer.strongMode, |
| 1386 variable.initializer, | 1386 receiverVariable: variable, desugaredGet: _desugaredGet); |
| 1387 fileOffset, | |
| 1388 _desugaredGet, | |
| 1389 typeContext, | |
| 1390 typeNeeded || inferrer.strongMode, | |
| 1391 receiverVariable: variable); | |
| 1392 if (inferrer.strongMode) { | 1387 if (inferrer.strongMode) { |
| 1393 body.staticType = inferredType; | 1388 body.staticType = inferredType; |
| 1394 } | 1389 } |
| 1395 return inferredType; | 1390 return inferredType; |
| 1396 } | 1391 } |
| 1397 } | 1392 } |
| 1398 | 1393 |
| 1399 /// Concrete shadow object representing a null literal in kernel form. | 1394 /// Concrete shadow object representing a null literal in kernel form. |
| 1400 class KernelNullLiteral extends NullLiteral implements KernelExpression { | 1395 class KernelNullLiteral extends NullLiteral implements KernelExpression { |
| 1401 @override | 1396 @override |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1555 // For a property get, the only things we could be looking at are an | 1550 // For a property get, the only things we could be looking at are an |
| 1556 // instance field, an instance getter, or an instance method. For the first | 1551 // instance field, an instance getter, or an instance method. For the first |
| 1557 // two, we disallow them in [_inferExpression]. For the last, there are no | 1552 // two, we disallow them in [_inferExpression]. For the last, there are no |
| 1558 // field dependencies. So we don't need to do anything here. | 1553 // field dependencies. So we don't need to do anything here. |
| 1559 } | 1554 } |
| 1560 | 1555 |
| 1561 @override | 1556 @override |
| 1562 DartType _inferExpression( | 1557 DartType _inferExpression( |
| 1563 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { | 1558 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
| 1564 return inferrer.inferPropertyGet( | 1559 return inferrer.inferPropertyGet( |
| 1565 this, receiver, fileOffset, this, typeContext, typeNeeded); | 1560 this, receiver, fileOffset, typeContext, typeNeeded, |
| 1561 desugaredGet: this); |
| 1566 } | 1562 } |
| 1567 } | 1563 } |
| 1568 | 1564 |
| 1569 /// Concrete shadow object representing a redirecting initializer in kernel | 1565 /// Concrete shadow object representing a redirecting initializer in kernel |
| 1570 /// form. | 1566 /// form. |
| 1571 class KernelRedirectingInitializer extends RedirectingInitializer | 1567 class KernelRedirectingInitializer extends RedirectingInitializer |
| 1572 implements KernelInitializer { | 1568 implements KernelInitializer { |
| 1573 KernelRedirectingInitializer(Constructor target, Arguments arguments) | 1569 KernelRedirectingInitializer(Constructor target, Arguments arguments) |
| 1574 : super(target, arguments); | 1570 : super(target, arguments); |
| 1575 | 1571 |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1789 } | 1785 } |
| 1790 } | 1786 } |
| 1791 | 1787 |
| 1792 /// Shadow object for [SuperMethodInvocation]. | 1788 /// Shadow object for [SuperMethodInvocation]. |
| 1793 class KernelSuperMethodInvocation extends SuperMethodInvocation | 1789 class KernelSuperMethodInvocation extends SuperMethodInvocation |
| 1794 implements KernelExpression { | 1790 implements KernelExpression { |
| 1795 KernelSuperMethodInvocation(Name name, Arguments arguments, | 1791 KernelSuperMethodInvocation(Name name, Arguments arguments, |
| 1796 [Procedure interfaceTarget]) | 1792 [Procedure interfaceTarget]) |
| 1797 : super(name, arguments, interfaceTarget); | 1793 : super(name, arguments, interfaceTarget); |
| 1798 | 1794 |
| 1799 KernelSuperMethodInvocation.byReference( | |
| 1800 Name name, Arguments arguments, Reference interfaceTargetReference) | |
| 1801 : super.byReference(name, arguments, interfaceTargetReference); | |
| 1802 | |
| 1803 @override | 1795 @override |
| 1804 void _collectDependencies(KernelDependencyCollector collector) { | 1796 void _collectDependencies(KernelDependencyCollector collector) { |
| 1805 // Super expressions should never occur in top level type inference. | 1797 // Super expressions should never occur in top level type inference. |
| 1806 // TODO(paulberry): but could they occur due to invalid code? | 1798 // TODO(paulberry): but could they occur due to invalid code? |
| 1807 assert(false); | 1799 assert(false); |
| 1808 } | 1800 } |
| 1809 | 1801 |
| 1810 @override | 1802 @override |
| 1811 DartType _inferExpression( | 1803 DartType _inferExpression( |
| 1812 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { | 1804 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
| 1813 inferrer.instrumentation?.record(Uri.parse(inferrer.uri), fileOffset, | 1805 inferrer.instrumentation?.record(Uri.parse(inferrer.uri), fileOffset, |
| 1814 'target', new InstrumentationValueForMember(interfaceTarget)); | 1806 'target', new InstrumentationValueForMember(interfaceTarget)); |
| 1815 return inferrer.inferMethodInvocation(this, new KernelThisExpression(), | 1807 return inferrer.inferMethodInvocation(this, new KernelThisExpression(), |
| 1816 fileOffset, false, typeContext, typeNeeded, | 1808 fileOffset, false, typeContext, typeNeeded, |
| 1817 interfaceMember: interfaceTarget, | 1809 interfaceMember: interfaceTarget, |
| 1818 methodName: name, | 1810 methodName: name, |
| 1819 arguments: arguments); | 1811 arguments: arguments); |
| 1820 } | 1812 } |
| 1821 } | 1813 } |
| 1822 | 1814 |
| 1823 /// Shadow object for [SuperPropertyGet]. | 1815 /// Shadow object for [SuperPropertyGet]. |
| 1824 class KernelSuperPropertyGet extends SuperPropertyGet | 1816 class KernelSuperPropertyGet extends SuperPropertyGet |
| 1825 implements KernelExpression { | 1817 implements KernelExpression { |
| 1826 KernelSuperPropertyGet(Name name, [Member interfaceTarget]) | 1818 KernelSuperPropertyGet(Name name, [Member interfaceTarget]) |
| 1827 : super(name, interfaceTarget); | 1819 : super(name, interfaceTarget); |
| 1828 | 1820 |
| 1829 KernelSuperPropertyGet.byReference( | |
| 1830 Name name, Reference interfaceTargetReference) | |
| 1831 : super.byReference(name, interfaceTargetReference); | |
| 1832 | |
| 1833 @override | 1821 @override |
| 1834 void _collectDependencies(KernelDependencyCollector collector) { | 1822 void _collectDependencies(KernelDependencyCollector collector) { |
| 1835 // Super expressions should never occur in top level type inference. | 1823 // Super expressions should never occur in top level type inference. |
| 1836 // TODO(paulberry): but could they occur due to invalid code? | 1824 // TODO(paulberry): but could they occur due to invalid code? |
| 1837 assert(false); | 1825 assert(false); |
| 1838 } | 1826 } |
| 1839 | 1827 |
| 1840 @override | 1828 @override |
| 1841 DartType _inferExpression( | 1829 DartType _inferExpression( |
| 1842 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { | 1830 KernelTypeInferrer inferrer, DartType typeContext, bool typeNeeded) { |
| 1843 // TODO(scheglov): implement. | 1831 return inferrer.inferPropertyGet( |
| 1844 return typeNeeded ? const DynamicType() : null; | 1832 this, new KernelThisExpression(), fileOffset, typeContext, typeNeeded, |
| 1833 propertyName: name); |
| 1845 } | 1834 } |
| 1846 } | 1835 } |
| 1847 | 1836 |
| 1848 /// Concrete shadow object representing a switch statement in kernel form. | 1837 /// Concrete shadow object representing a switch statement in kernel form. |
| 1849 class KernelSwitchStatement extends SwitchStatement implements KernelStatement { | 1838 class KernelSwitchStatement extends SwitchStatement implements KernelStatement { |
| 1850 KernelSwitchStatement(Expression expression, List<SwitchCase> cases) | 1839 KernelSwitchStatement(Expression expression, List<SwitchCase> cases) |
| 1851 : super(expression, cases); | 1840 : super(expression, cases); |
| 1852 | 1841 |
| 1853 @override | 1842 @override |
| 1854 void _inferStatement(KernelTypeInferrer inferrer) { | 1843 void _inferStatement(KernelTypeInferrer inferrer) { |
| (...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2332 } | 2321 } |
| 2333 | 2322 |
| 2334 transformChildren(v) { | 2323 transformChildren(v) { |
| 2335 return internalError("Internal error: Unsupported operation."); | 2324 return internalError("Internal error: Unsupported operation."); |
| 2336 } | 2325 } |
| 2337 | 2326 |
| 2338 visitChildren(v) { | 2327 visitChildren(v) { |
| 2339 return internalError("Internal error: Unsupported operation."); | 2328 return internalError("Internal error: Unsupported operation."); |
| 2340 } | 2329 } |
| 2341 } | 2330 } |
| OLD | NEW |