| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 library dart2js.send_structure; | 5 library dart2js.send_structure; |
| 6 | 6 |
| 7 import 'access_semantics.dart'; | 7 import 'access_semantics.dart'; |
| 8 import 'operators.dart'; | 8 import 'operators.dart'; |
| 9 import 'semantic_visitor.dart'; | 9 import 'semantic_visitor.dart'; |
| 10 import '../dart_types.dart'; | 10 import '../dart_types.dart'; |
| (...skipping 1856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1867 class ConstInvokeStructure<R, A> extends NewStructure<R, A> { | 1867 class ConstInvokeStructure<R, A> extends NewStructure<R, A> { |
| 1868 final ConstructedConstantExpression constant; | 1868 final ConstructedConstantExpression constant; |
| 1869 | 1869 |
| 1870 ConstInvokeStructure(this.constant); | 1870 ConstInvokeStructure(this.constant); |
| 1871 | 1871 |
| 1872 R dispatch(SemanticSendVisitor<R, A> visitor, NewExpression node, A arg) { | 1872 R dispatch(SemanticSendVisitor<R, A> visitor, NewExpression node, A arg) { |
| 1873 return visitor.visitConstConstructorInvoke(node, constant, arg); | 1873 return visitor.visitConstConstructorInvoke(node, constant, arg); |
| 1874 } | 1874 } |
| 1875 } | 1875 } |
| 1876 | 1876 |
| 1877 /// The structure of a parameter declaration. |
| 1878 abstract class ParameterStructure<R, A> { |
| 1879 final VariableDefinitions definitions; |
| 1880 final Node node; |
| 1881 final ParameterElement parameter; |
| 1882 |
| 1883 ParameterStructure(this.definitions, this.node, this.parameter); |
| 1884 |
| 1885 /// Calls the matching visit method on [visitor] with [definitions] and [arg]. |
| 1886 R dispatch(SemanticDeclarationVisitor<R, A> visitor, A arg); |
| 1887 } |
| 1888 |
| 1889 /// The structure of a required parameter declaration. |
| 1890 class RequiredParameterStructure<R, A> extends ParameterStructure<R, A> { |
| 1891 final int index; |
| 1892 |
| 1893 RequiredParameterStructure( |
| 1894 VariableDefinitions definitions, |
| 1895 Node node, |
| 1896 ParameterElement parameter, |
| 1897 this.index) |
| 1898 : super(definitions, node, parameter); |
| 1899 |
| 1900 @override |
| 1901 R dispatch(SemanticDeclarationVisitor<R, A> visitor, |
| 1902 A arg) { |
| 1903 if (parameter.isInitializingFormal) { |
| 1904 return visitor.visitInitializingFormalDeclaration( |
| 1905 definitions, node, parameter, index, arg); |
| 1906 } else { |
| 1907 return visitor.visitParameterDeclaration( |
| 1908 definitions, node, parameter, index, arg); |
| 1909 } |
| 1910 } |
| 1911 } |
| 1912 |
| 1913 /// The structure of a optional positional parameter declaration. |
| 1914 class OptionalParameterStructure<R, A> extends ParameterStructure<R, A> { |
| 1915 final ConstantExpression defaultValue; |
| 1916 final int index; |
| 1917 |
| 1918 OptionalParameterStructure( |
| 1919 VariableDefinitions definitions, |
| 1920 Node node, |
| 1921 ParameterElement parameter, |
| 1922 this.defaultValue, |
| 1923 this.index) |
| 1924 : super(definitions, node, parameter); |
| 1925 |
| 1926 @override |
| 1927 R dispatch(SemanticDeclarationVisitor<R, A> visitor, |
| 1928 A arg) { |
| 1929 if (parameter.isInitializingFormal) { |
| 1930 return visitor.visitOptionalInitializingFormalDeclaration( |
| 1931 definitions, node, parameter, defaultValue, index, arg); |
| 1932 } else { |
| 1933 return visitor.visitOptionalParameterDeclaration( |
| 1934 definitions, node, parameter, defaultValue, index, arg); |
| 1935 } |
| 1936 } |
| 1937 } |
| 1938 |
| 1939 /// The structure of a optional named parameter declaration. |
| 1940 class NamedParameterStructure<R, A> extends ParameterStructure<R, A> { |
| 1941 final ConstantExpression defaultValue; |
| 1942 |
| 1943 NamedParameterStructure( |
| 1944 VariableDefinitions definitions, |
| 1945 Node node, |
| 1946 ParameterElement parameter, |
| 1947 this.defaultValue) |
| 1948 : super(definitions, node, parameter); |
| 1949 |
| 1950 @override |
| 1951 R dispatch(SemanticDeclarationVisitor<R, A> visitor, |
| 1952 A arg) { |
| 1953 if (parameter.isInitializingFormal) { |
| 1954 return visitor.visitNamedInitializingFormalDeclaration( |
| 1955 definitions, node, parameter, defaultValue, arg); |
| 1956 } else { |
| 1957 return visitor.visitNamedParameterDeclaration( |
| 1958 definitions, node, parameter, defaultValue, arg); |
| 1959 } |
| 1960 } |
| 1961 } |
| 1962 |
| 1963 |
| 1964 enum VariableKind { |
| 1965 TOP_LEVEL_FIELD, |
| 1966 STATIC_FIELD, |
| 1967 INSTANCE_FIELD, |
| 1968 LOCAL_VARIABLE, |
| 1969 } |
| 1970 |
| 1971 abstract class VariableStructure<R, A> { |
| 1972 final VariableKind kind; |
| 1973 final Node node; |
| 1974 final VariableElement variable; |
| 1975 |
| 1976 VariableStructure(this.kind, this.node, this.variable); |
| 1977 |
| 1978 R dispatch(SemanticDeclarationVisitor<R, A> visitor, |
| 1979 VariableDefinitions definitions, |
| 1980 A arg); |
| 1981 } |
| 1982 |
| 1983 class NonConstantVariableStructure<R, A> |
| 1984 extends VariableStructure<R, A> { |
| 1985 NonConstantVariableStructure( |
| 1986 VariableKind kind, Node node, VariableElement variable) |
| 1987 : super(kind, node, variable); |
| 1988 |
| 1989 R dispatch(SemanticDeclarationVisitor<R, A> visitor, |
| 1990 VariableDefinitions definitions, |
| 1991 A arg) { |
| 1992 switch (kind) { |
| 1993 case VariableKind.TOP_LEVEL_FIELD: |
| 1994 return visitor.visitTopLevelFieldDeclaration( |
| 1995 definitions, node, variable, variable.initializer, arg); |
| 1996 case VariableKind.STATIC_FIELD: |
| 1997 return visitor.visitStaticFieldDeclaration( |
| 1998 definitions, node, variable, variable.initializer, arg); |
| 1999 case VariableKind.INSTANCE_FIELD: |
| 2000 return visitor.visitInstanceFieldDeclaration( |
| 2001 definitions, node, variable, variable.initializer, arg); |
| 2002 case VariableKind.LOCAL_VARIABLE: |
| 2003 return visitor.visitLocalVariableDeclaration( |
| 2004 definitions, node, variable, variable.initializer, arg); |
| 2005 } |
| 2006 } |
| 2007 } |
| 2008 |
| 2009 class ConstantVariableStructure<R, A> |
| 2010 extends VariableStructure<R, A> { |
| 2011 final ConstantExpression constant; |
| 2012 |
| 2013 ConstantVariableStructure( |
| 2014 VariableKind kind, Node node, VariableElement variable, this.constant) |
| 2015 : super(kind, node, variable); |
| 2016 |
| 2017 R dispatch(SemanticDeclarationVisitor<R, A> visitor, |
| 2018 VariableDefinitions definitions, |
| 2019 A arg) { |
| 2020 switch (kind) { |
| 2021 case VariableKind.TOP_LEVEL_FIELD: |
| 2022 return visitor.visitTopLevelConstantDeclaration( |
| 2023 definitions, node, variable, constant, arg); |
| 2024 case VariableKind.STATIC_FIELD: |
| 2025 return visitor.visitStaticConstantDeclaration( |
| 2026 definitions, node, variable, constant, arg); |
| 2027 case VariableKind.LOCAL_VARIABLE: |
| 2028 return visitor.visitLocalConstantDeclaration( |
| 2029 definitions, node, variable, constant, arg); |
| 2030 default: |
| 2031 } |
| 2032 throw new SpannableAssertionFailure( |
| 2033 node, "Invalid constant variable: $variable"); |
| 2034 } |
| 2035 } |
| 2036 |
| 2037 abstract class InitializerStructure<R, A> { |
| 2038 R dispatch(SemanticDeclarationVisitor<R, A> visitor, Send node, A arg); |
| 2039 |
| 2040 bool get isSuperConstructorInvoke => false; |
| 2041 } |
| 2042 |
| 2043 class FieldInitializerStructure<R, A> extends InitializerStructure<R, A> { |
| 2044 final FieldElement field; |
| 2045 |
| 2046 FieldInitializerStructure(this.field); |
| 2047 |
| 2048 R dispatch(SemanticDeclarationVisitor<R, A> visitor, Send node, A arg) { |
| 2049 return visitor.visitFieldInitializer( |
| 2050 node, field, node.arguments.single, arg); |
| 2051 } |
| 2052 } |
| 2053 |
| 2054 class SuperConstructorInvokeStructure<R, A> extends InitializerStructure<R, A> { |
| 2055 final ConstructorElement constructor; |
| 2056 final InterfaceType type; |
| 2057 final Selector selector; |
| 2058 |
| 2059 SuperConstructorInvokeStructure(this.constructor, this.type, this.selector); |
| 2060 |
| 2061 R dispatch(SemanticDeclarationVisitor<R, A> visitor, Send node, A arg) { |
| 2062 return visitor.visitSuperConstructorInvoke( |
| 2063 node, constructor, type, node.argumentsNode, selector, arg); |
| 2064 } |
| 2065 |
| 2066 bool get isSuperConstructorInvoke => true; |
| 2067 } |
| 2068 |
| 2069 class ThisConstructorInvokeStructure<R, A> extends InitializerStructure<R, A> { |
| 2070 final ConstructorElement constructor; |
| 2071 final Selector selector; |
| 2072 |
| 2073 ThisConstructorInvokeStructure(this.constructor, this.selector); |
| 2074 |
| 2075 R dispatch(SemanticDeclarationVisitor<R, A> visitor, Send node, A arg) { |
| 2076 return visitor.visitThisConstructorInvoke( |
| 2077 node, constructor, node.argumentsNode, selector, arg); |
| 2078 } |
| 2079 } |
| OLD | NEW |