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

Unified Diff: compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java

Issue 10665014: Issue 3712. Infer closure parameters, 2-nd pass (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
diff --git a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
index a61026939ab733be609214a1317f45a8e3583de4..d758b76662a5b33206f6e49d127a61cf1b280125 100644
--- a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
+++ b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
@@ -780,21 +780,28 @@ public class TypeAnalyzer implements DartCompilationPhase {
* {@link FunctionAliasType}.
*/
private static void inferFunctionLiteralParametersTypes(DartExpression mayBeLiteral,
- Type mayBeFunctionAliasType) {
- if (mayBeLiteral instanceof DartFunctionExpression
- && TypeKind.of(mayBeFunctionAliasType) == TypeKind.FUNCTION_ALIAS) {
- // prepare required function literal type
- FunctionAliasType functionAliasType = (FunctionAliasType) mayBeFunctionAliasType;
- FunctionType requiredType = Types.asFunctionType(functionAliasType);
- // prepare actual function literal
- DartFunctionExpression literal = (DartFunctionExpression) mayBeLiteral;
- List<DartParameter> parameterNodes = literal.getFunction().getParameters();
- // try to infer types of "normal" parameters
- List<Type> requiredNormalParameterTypes = requiredType.getParameterTypes();
- for (int i = 0; i < requiredNormalParameterTypes.size(); i++) {
- DartParameter parameterNode = parameterNodes.get(i);
- Type requiredNormalParameterType = requiredNormalParameterTypes.get(i);
- inferVariableDeclarationType(parameterNode, requiredNormalParameterType);
+ Type mayBeFunctionType) {
+ if (mayBeLiteral instanceof DartFunctionExpression) {
+ // prepare required type of function literal
+ FunctionType requiredType = null;
+ if (TypeKind.of(mayBeFunctionType) == TypeKind.FUNCTION) {
+ requiredType = (FunctionType) mayBeFunctionType;
+ }
+ if (TypeKind.of(mayBeFunctionType) == TypeKind.FUNCTION_ALIAS) {
+ FunctionAliasType functionAliasType = (FunctionAliasType) mayBeFunctionType;
+ requiredType = Types.asFunctionType(functionAliasType);
+ }
+ // OK, we can try to infer parameter types
+ if (requiredType != null) {
+ DartFunctionExpression literal = (DartFunctionExpression) mayBeLiteral;
+ List<DartParameter> parameterNodes = literal.getFunction().getParameters();
+ // try to infer types of "normal" parameters
+ List<Type> requiredNormalParameterTypes = requiredType.getParameterTypes();
+ for (int i = 0; i < requiredNormalParameterTypes.size(); i++) {
+ DartParameter parameterNode = parameterNodes.get(i);
+ Type requiredNormalParameterType = requiredNormalParameterTypes.get(i);
+ inferVariableDeclarationType(parameterNode, requiredNormalParameterType);
+ }
}
}
}
« no previous file with comments | « no previous file | compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698