| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 /** | 5 /** |
| 6 * This library is capable of producing linked summaries from unlinked | 6 * This library is capable of producing linked summaries from unlinked |
| 7 * ones (or prelinked ones). It functions by building a miniature | 7 * ones (or prelinked ones). It functions by building a miniature |
| 8 * element model to represent the contents of the summaries, and then | 8 * element model to represent the contents of the summaries, and then |
| 9 * scanning the element model to gather linked information and adding | 9 * scanning the element model to gather linked information and adding |
| 10 * it to the summary data structures. | 10 * it to the summary data structures. |
| (...skipping 1612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1623 */ | 1623 */ |
| 1624 final VariableElementForLink variableElement; | 1624 final VariableElementForLink variableElement; |
| 1625 | 1625 |
| 1626 ConstVariableNode(this.variableElement); | 1626 ConstVariableNode(this.variableElement); |
| 1627 | 1627 |
| 1628 @override | 1628 @override |
| 1629 List<ConstNode> computeDependencies() { | 1629 List<ConstNode> computeDependencies() { |
| 1630 List<ConstNode> dependencies = <ConstNode>[]; | 1630 List<ConstNode> dependencies = <ConstNode>[]; |
| 1631 collectDependencies( | 1631 collectDependencies( |
| 1632 dependencies, | 1632 dependencies, |
| 1633 variableElement.unlinkedVariable.constExpr, | 1633 variableElement.unlinkedVariable.initializer?.bodyExpr, |
| 1634 variableElement.compilationUnit); | 1634 variableElement.compilationUnit); |
| 1635 return dependencies; | 1635 return dependencies; |
| 1636 } | 1636 } |
| 1637 } | 1637 } |
| 1638 | 1638 |
| 1639 /** | 1639 /** |
| 1640 * Stub implementation of [AnalysisContext] which provides just those methods | 1640 * Stub implementation of [AnalysisContext] which provides just those methods |
| 1641 * needed during linking. | 1641 * needed during linking. |
| 1642 */ | 1642 */ |
| 1643 class ContextForLink implements AnalysisContext { | 1643 class ContextForLink implements AnalysisContext { |
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1986 int strPtr = 0; | 1986 int strPtr = 0; |
| 1987 int assignmentOperatorPtr = 0; | 1987 int assignmentOperatorPtr = 0; |
| 1988 | 1988 |
| 1989 ExprTypeComputer(VariableElementForLink variableElement) { | 1989 ExprTypeComputer(VariableElementForLink variableElement) { |
| 1990 this.variable = variableElement; | 1990 this.variable = variableElement; |
| 1991 initializer = variableElement.initializer; | 1991 initializer = variableElement.initializer; |
| 1992 unit = variableElement.compilationUnit; | 1992 unit = variableElement.compilationUnit; |
| 1993 library = unit.enclosingElement; | 1993 library = unit.enclosingElement; |
| 1994 linker = library._linker; | 1994 linker = library._linker; |
| 1995 typeProvider = linker.typeProvider; | 1995 typeProvider = linker.typeProvider; |
| 1996 unlinkedConst = variableElement.unlinkedVariable.constExpr; | 1996 unlinkedConst = variableElement.unlinkedVariable.initializer?.bodyExpr; |
| 1997 } | 1997 } |
| 1998 | 1998 |
| 1999 DartType compute() { | 1999 DartType compute() { |
| 2000 // Perform RPN evaluation of the constant, using a stack of inferred types. | 2000 // Perform RPN evaluation of the constant, using a stack of inferred types. |
| 2001 for (UnlinkedConstOperation operation in unlinkedConst.operations) { | 2001 for (UnlinkedConstOperation operation in unlinkedConst.operations) { |
| 2002 switch (operation) { | 2002 switch (operation) { |
| 2003 case UnlinkedConstOperation.pushInt: | 2003 case UnlinkedConstOperation.pushInt: |
| 2004 intPtr++; | 2004 intPtr++; |
| 2005 stack.add(typeProvider.intType); | 2005 stack.add(typeProvider.intType); |
| 2006 break; | 2006 break; |
| (...skipping 2374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4381 } | 4381 } |
| 4382 } | 4382 } |
| 4383 assert(refPtr == unlinkedConst.references.length); | 4383 assert(refPtr == unlinkedConst.references.length); |
| 4384 } | 4384 } |
| 4385 | 4385 |
| 4386 @override | 4386 @override |
| 4387 List<TypeInferenceNode> computeDependencies() { | 4387 List<TypeInferenceNode> computeDependencies() { |
| 4388 List<TypeInferenceNode> dependencies = <TypeInferenceNode>[]; | 4388 List<TypeInferenceNode> dependencies = <TypeInferenceNode>[]; |
| 4389 collectDependencies( | 4389 collectDependencies( |
| 4390 dependencies, | 4390 dependencies, |
| 4391 variableElement.unlinkedVariable.constExpr, | 4391 variableElement.unlinkedVariable.initializer?.bodyExpr, |
| 4392 variableElement.compilationUnit); | 4392 variableElement.compilationUnit); |
| 4393 return dependencies; | 4393 return dependencies; |
| 4394 } | 4394 } |
| 4395 | 4395 |
| 4396 void evaluate(bool inCycle) { | 4396 void evaluate(bool inCycle) { |
| 4397 if (inCycle) { | 4397 if (inCycle) { |
| 4398 variableElement._inferredType = DynamicTypeImpl.instance; | 4398 variableElement._inferredType = DynamicTypeImpl.instance; |
| 4399 } else { | 4399 } else { |
| 4400 variableElement._inferredType = | 4400 variableElement._inferredType = |
| 4401 new ExprTypeComputer(variableElement).compute(); | 4401 new ExprTypeComputer(variableElement).compute(); |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4595 DartType _declaredType; | 4595 DartType _declaredType; |
| 4596 PropertyAccessorElementForLink_Variable _getter; | 4596 PropertyAccessorElementForLink_Variable _getter; |
| 4597 PropertyAccessorElementForLink_Variable _setter; | 4597 PropertyAccessorElementForLink_Variable _setter; |
| 4598 | 4598 |
| 4599 /** | 4599 /** |
| 4600 * The compilation unit in which this variable appears. | 4600 * The compilation unit in which this variable appears. |
| 4601 */ | 4601 */ |
| 4602 final CompilationUnitElementForLink compilationUnit; | 4602 final CompilationUnitElementForLink compilationUnit; |
| 4603 | 4603 |
| 4604 VariableElementForLink(this.unlinkedVariable, this.compilationUnit) { | 4604 VariableElementForLink(this.unlinkedVariable, this.compilationUnit) { |
| 4605 if (compilationUnit.isInBuildUnit && unlinkedVariable.constExpr != null) { | 4605 if (compilationUnit.isInBuildUnit && |
| 4606 unlinkedVariable.initializer?.bodyExpr != null) { |
| 4606 _constNode = new ConstVariableNode(this); | 4607 _constNode = new ConstVariableNode(this); |
| 4607 if (unlinkedVariable.type == null) { | 4608 if (unlinkedVariable.type == null) { |
| 4608 _typeInferenceNode = new TypeInferenceNode(this); | 4609 _typeInferenceNode = new TypeInferenceNode(this); |
| 4609 } | 4610 } |
| 4610 } | 4611 } |
| 4611 } | 4612 } |
| 4612 | 4613 |
| 4613 /** | 4614 /** |
| 4614 * If the variable has an explicitly declared return type, return it. | 4615 * If the variable has an explicitly declared return type, return it. |
| 4615 * Otherwise return `null`. | 4616 * Otherwise return `null`. |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4711 * there are no type parameters in scope. | 4712 * there are no type parameters in scope. |
| 4712 */ | 4713 */ |
| 4713 TypeParameterizedElementMixin get _typeParameterContext; | 4714 TypeParameterizedElementMixin get _typeParameterContext; |
| 4714 | 4715 |
| 4715 @override | 4716 @override |
| 4716 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 4717 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
| 4717 | 4718 |
| 4718 @override | 4719 @override |
| 4719 String toString() => '$enclosingElement.$name'; | 4720 String toString() => '$enclosingElement.$name'; |
| 4720 } | 4721 } |
| OLD | NEW |