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 library kernel.type_propagation.builder; | 4 library kernel.type_propagation.builder; |
5 | 5 |
6 import '../ast.dart'; | 6 import '../ast.dart'; |
7 import '../class_hierarchy.dart'; | 7 import '../class_hierarchy.dart'; |
8 import '../core_types.dart'; | 8 import '../core_types.dart'; |
9 import 'canonicalizer.dart'; | 9 import 'canonicalizer.dart'; |
10 import 'constraints.dart'; | 10 import 'constraints.dart'; |
(...skipping 1818 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1829 | 1829 |
1830 int visitFunctionType(FunctionType node) { | 1830 int visitFunctionType(FunctionType node) { |
1831 // TODO: Handle arity range. | 1831 // TODO: Handle arity range. |
1832 int arity = node.positionalParameters.length; | 1832 int arity = node.positionalParameters.length; |
1833 int function = builder.functionValueNode; | 1833 int function = builder.functionValueNode; |
1834 for (int i = 0; i < node.positionalParameters.length; ++i) { | 1834 for (int i = 0; i < node.positionalParameters.length; ++i) { |
1835 int field = fieldNames.getPositionalParameterField(arity, i); | 1835 int field = fieldNames.getPositionalParameterField(arity, i); |
1836 int argument = environment.getLoad(function, field); | 1836 int argument = environment.getLoad(function, field); |
1837 visitContravariant(node.positionalParameters[i], argument); | 1837 visitContravariant(node.positionalParameters[i], argument); |
1838 } | 1838 } |
1839 node.namedParameters.forEach((String name, DartType type) { | 1839 for (int i = 0; i < node.namedParameters.length; ++i) { |
1840 int field = fieldNames.getNamedParameterField(arity, name); | 1840 var parameter = node.namedParameters[i]; |
| 1841 int field = fieldNames.getNamedParameterField(arity, parameter.name); |
1841 int argument = environment.getLoad(function, field); | 1842 int argument = environment.getLoad(function, field); |
1842 visitContravariant(type, argument); | 1843 visitContravariant(parameter.type, argument); |
1843 }); | 1844 } |
1844 int returnVariable = visit(node.returnType); | 1845 int returnVariable = visit(node.returnType); |
1845 environment.addStore( | 1846 environment.addStore( |
1846 function, fieldNames.getReturnField(arity), returnVariable); | 1847 function, fieldNames.getReturnField(arity), returnVariable); |
1847 return function; | 1848 return function; |
1848 } | 1849 } |
1849 | 1850 |
1850 /// Equivalent to visiting the FunctionType for the given function. | 1851 /// Equivalent to visiting the FunctionType for the given function. |
1851 int buildFunctionNode(FunctionNode node) { | 1852 int buildFunctionNode(FunctionNode node) { |
1852 int minArity = node.requiredParameterCount; | 1853 int minArity = node.requiredParameterCount; |
1853 int maxArity = node.positionalParameters.length; | 1854 int maxArity = node.positionalParameters.length; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1927 visitFunctionType(FunctionType node) { | 1928 visitFunctionType(FunctionType node) { |
1928 int minArity = node.requiredParameterCount; | 1929 int minArity = node.requiredParameterCount; |
1929 int maxArity = node.positionalParameters.length; | 1930 int maxArity = node.positionalParameters.length; |
1930 for (int i = 0; i < node.positionalParameters.length; ++i) { | 1931 for (int i = 0; i < node.positionalParameters.length; ++i) { |
1931 int argument = visitCovariant(node.positionalParameters[i]); | 1932 int argument = visitCovariant(node.positionalParameters[i]); |
1932 for (int arity = minArity; arity <= maxArity; ++arity) { | 1933 for (int arity = minArity; arity <= maxArity; ++arity) { |
1933 int field = fieldNames.getPositionalParameterField(arity, i); | 1934 int field = fieldNames.getPositionalParameterField(arity, i); |
1934 environment.addStore(input, field, argument); | 1935 environment.addStore(input, field, argument); |
1935 } | 1936 } |
1936 } | 1937 } |
1937 node.namedParameters.forEach((String name, DartType type) { | 1938 for (var parameter in node.namedParameters) { |
1938 int argument = visitCovariant(type); | 1939 int argument = visitCovariant(parameter.type); |
1939 for (int arity = minArity; arity <= maxArity; ++arity) { | 1940 for (int arity = minArity; arity <= maxArity; ++arity) { |
1940 int field = fieldNames.getNamedParameterField(arity, name); | 1941 int field = fieldNames.getNamedParameterField(arity, parameter.name); |
1941 environment.addStore(input, field, argument); | 1942 environment.addStore(input, field, argument); |
1942 } | 1943 } |
1943 }); | 1944 } |
1944 for (int arity = minArity; arity <= maxArity; ++arity) { | 1945 for (int arity = minArity; arity <= maxArity; ++arity) { |
1945 int returnLocation = | 1946 int returnLocation = |
1946 environment.getLoad(input, fieldNames.getReturnField(arity)); | 1947 environment.getLoad(input, fieldNames.getReturnField(arity)); |
1947 visitContravariant(node.returnType, returnLocation); | 1948 visitContravariant(node.returnType, returnLocation); |
1948 } | 1949 } |
1949 } | 1950 } |
1950 | 1951 |
1951 /// Equivalent to visiting the FunctionType for the given function. | 1952 /// Equivalent to visiting the FunctionType for the given function. |
1952 void buildFunctionNode(FunctionNode node) { | 1953 void buildFunctionNode(FunctionNode node) { |
1953 int minArity = node.requiredParameterCount; | 1954 int minArity = node.requiredParameterCount; |
(...skipping 13 matching lines...) Expand all Loading... |
1967 environment.addStore(input, field, argument); | 1968 environment.addStore(input, field, argument); |
1968 } | 1969 } |
1969 } | 1970 } |
1970 for (int arity = minArity; arity <= maxArity; ++arity) { | 1971 for (int arity = minArity; arity <= maxArity; ++arity) { |
1971 int returnLocation = | 1972 int returnLocation = |
1972 environment.getLoad(input, fieldNames.getReturnField(arity)); | 1973 environment.getLoad(input, fieldNames.getReturnField(arity)); |
1973 visitContravariant(node.returnType, returnLocation); | 1974 visitContravariant(node.returnType, returnLocation); |
1974 } | 1975 } |
1975 } | 1976 } |
1976 } | 1977 } |
OLD | NEW |