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

Side by Side Diff: pkg/compiler/lib/src/resolution/send_structure.dart

Issue 1047673002: Add SemanticDeclVisitor. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: More renaming Created 5 years, 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/send_resolver.dart ('k') | pkg/compiler/lib/src/use_unused_api.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698