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.analyzer.ast_from_analyzer; | 4 library kernel.analyzer.ast_from_analyzer; |
5 | 5 |
6 import '../ast.dart' as ast; | 6 import '../ast.dart' as ast; |
7 import '../frontend/accessors.dart'; | 7 import '../frontend/accessors.dart'; |
8 import '../frontend/super_initializers.dart'; | 8 import '../frontend/super_initializers.dart'; |
9 import '../log.dart'; | 9 import '../log.dart'; |
10 import '../type_algebra.dart'; | 10 import '../type_algebra.dart'; |
(...skipping 2845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2856 new ast.Name("_redirecting#", scope.currentLibrary); | 2856 new ast.Name("_redirecting#", scope.currentLibrary); |
2857 ast.Field constructorsField; | 2857 ast.Field constructorsField; |
2858 for (ast.Field field in classNode.fields) { | 2858 for (ast.Field field in classNode.fields) { |
2859 if (field.name == constructors) { | 2859 if (field.name == constructors) { |
2860 constructorsField = field; | 2860 constructorsField = field; |
2861 break; | 2861 break; |
2862 } | 2862 } |
2863 } | 2863 } |
2864 if (constructorsField == null) { | 2864 if (constructorsField == null) { |
2865 ast.ListLiteral literal = new ast.ListLiteral(<ast.Expression>[]); | 2865 ast.ListLiteral literal = new ast.ListLiteral(<ast.Expression>[]); |
2866 constructorsField = new ast.Field(constructors, isStatic: true, | 2866 constructorsField = new ast.Field(constructors, |
2867 initializer: literal, fileUri: classNode.fileUri) | 2867 isStatic: true, |
2868 ..fileOffset = classNode.fileOffset; | 2868 initializer: literal, |
| 2869 fileUri: classNode.fileUri)..fileOffset = classNode.fileOffset; |
2869 classNode.addMember(constructorsField); | 2870 classNode.addMember(constructorsField); |
2870 } | 2871 } |
2871 ast.ListLiteral literal = constructorsField.initializer; | 2872 ast.ListLiteral literal = constructorsField.initializer; |
2872 literal.expressions.add(new ast.StaticGet(procedure)..parent = literal); | 2873 literal.expressions.add(new ast.StaticGet(procedure)..parent = literal); |
2873 } else { | 2874 } else { |
2874 var name = node.redirectedConstructor.type.name.name; | 2875 var name = node.redirectedConstructor.type.name.name; |
2875 if (node.redirectedConstructor.name != null) { | 2876 if (node.redirectedConstructor.name != null) { |
2876 name += '.' + node.redirectedConstructor.name.name; | 2877 name += '.' + node.redirectedConstructor.name.name; |
2877 } | 2878 } |
2878 // TODO(asgerf): Sometimes a TypeError should be thrown. | 2879 // TODO(asgerf): Sometimes a TypeError should be thrown. |
2879 expression = scope.buildThrowNoSuchMethodError( | 2880 expression = scope.buildThrowNoSuchMethodError( |
2880 new ast.NullLiteral(), name, new ast.Arguments.empty()); | 2881 new ast.NullLiteral(), name, new ast.Arguments.empty()); |
2881 } | 2882 } |
2882 var function = procedure.function; | 2883 var function = procedure.function; |
2883 function.body = new ast.ExpressionStatement(expression) | 2884 function.body = new ast.ExpressionStatement(expression) |
2884 ..parent = function; | 2885 ..parent = function; |
2885 } | 2886 } |
2886 } | 2887 } |
2887 | 2888 |
2888 visitMethodDeclaration(MethodDeclaration node) { | 2889 visitMethodDeclaration(MethodDeclaration node) { |
2889 addAnnotations(node.metadata); | 2890 addAnnotations(node.metadata); |
2890 ast.Procedure procedure = currentMember; | 2891 ast.Procedure procedure = currentMember; |
2891 procedure.function = scope.buildFunctionNode(node.parameters, node.body, | 2892 procedure.function = scope.buildFunctionNode(node.parameters, node.body, |
2892 returnType: node.returnType, | 2893 returnType: node.returnType, |
2893 inferredReturnType: scope.buildType( | 2894 inferredReturnType: scope.buildType( |
2894 resolutionMap.elementDeclaredByMethodDeclaration(node).returnType), | 2895 resolutionMap.elementDeclaredByMethodDeclaration(node).returnType), |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3039 if (list[i - 1].compareTo(item) == 0) { | 3040 if (list[i - 1].compareTo(item) == 0) { |
3040 ++deleted; | 3041 ++deleted; |
3041 } else if (deleted > 0) { | 3042 } else if (deleted > 0) { |
3042 list[i - deleted] = item; | 3043 list[i - deleted] = item; |
3043 } | 3044 } |
3044 } | 3045 } |
3045 if (deleted > 0) { | 3046 if (deleted > 0) { |
3046 list.length -= deleted; | 3047 list.length -= deleted; |
3047 } | 3048 } |
3048 } | 3049 } |
OLD | NEW |