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 | 4 |
5 library fasta.body_builder; | 5 library fasta.body_builder; |
6 | 6 |
7 import '../fasta_codes.dart' | 7 import '../fasta_codes.dart' |
8 show FastaMessage, codeExpectedButGot, codeExpectedFunctionBody; | 8 show FastaMessage, codeExpectedButGot, codeExpectedFunctionBody; |
9 | 9 |
10 import '../parser/parser.dart' show FormalParameterType, MemberKind, optional; | 10 import '../parser/parser.dart' show FormalParameterType, MemberKind, optional; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 | 77 |
78 final bool isInstanceMember; | 78 final bool isInstanceMember; |
79 | 79 |
80 final Map<String, FieldInitializer> fieldInitializers = | 80 final Map<String, FieldInitializer> fieldInitializers = |
81 <String, FieldInitializer>{}; | 81 <String, FieldInitializer>{}; |
82 | 82 |
83 final Scope enclosingScope; | 83 final Scope enclosingScope; |
84 | 84 |
85 final bool enableNative; | 85 final bool enableNative; |
86 | 86 |
87 final bool isPlatformLibrary; | 87 final bool isBuiltinLibrary; |
88 | 88 |
89 @override | 89 @override |
90 final Uri uri; | 90 final Uri uri; |
91 | 91 |
92 final TypeInferrer _typeInferrer; | 92 final TypeInferrer _typeInferrer; |
93 | 93 |
94 @override | 94 @override |
95 final TypePromoter<Expression, VariableDeclaration> typePromoter; | 95 final TypePromoter<Expression, VariableDeclaration> typePromoter; |
96 | 96 |
97 /// Only used when [member] is a constructor. It tracks if an implicit super | 97 /// Only used when [member] is a constructor. It tracks if an implicit super |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 this.formalParameterScope, | 139 this.formalParameterScope, |
140 this.hierarchy, | 140 this.hierarchy, |
141 this.coreTypes, | 141 this.coreTypes, |
142 this.classBuilder, | 142 this.classBuilder, |
143 this.isInstanceMember, | 143 this.isInstanceMember, |
144 this.uri, | 144 this.uri, |
145 this._typeInferrer) | 145 this._typeInferrer) |
146 : enclosingScope = scope, | 146 : enclosingScope = scope, |
147 library = library, | 147 library = library, |
148 enableNative = library.loader.target.enableNative(library), | 148 enableNative = library.loader.target.enableNative(library), |
149 isPlatformLibrary = library.uri.scheme == 'dart', | 149 isBuiltinLibrary = |
| 150 library.uri.scheme == 'dart' && library.uri.path == "_builtin", |
150 needsImplicitSuperInitializer = | 151 needsImplicitSuperInitializer = |
151 coreTypes.objectClass != classBuilder?.cls, | 152 coreTypes.objectClass != classBuilder?.cls, |
152 typePromoter = _typeInferrer.typePromoter, | 153 typePromoter = _typeInferrer.typePromoter, |
153 super(scope); | 154 super(scope); |
154 | 155 |
155 bool get hasParserError => recoverableErrors.isNotEmpty; | 156 bool get hasParserError => recoverableErrors.isNotEmpty; |
156 | 157 |
157 bool get inConstructor { | 158 bool get inConstructor { |
158 return functionNestingLevel == 0 && member is KernelConstructorBuilder; | 159 return functionNestingLevel == 0 && member is KernelConstructorBuilder; |
159 } | 160 } |
(...skipping 737 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
897 builder == null && | 898 builder == null && |
898 "loadLibrary" == name) { | 899 "loadLibrary" == name) { |
899 return buildCompileTimeError( | 900 return buildCompileTimeError( |
900 "Deferred loading isn't implemented yet.", offsetForToken(token)); | 901 "Deferred loading isn't implemented yet.", offsetForToken(token)); |
901 } else if (!isQualified && isInstanceContext) { | 902 } else if (!isQualified && isInstanceContext) { |
902 assert(builder == null); | 903 assert(builder == null); |
903 if (constantExpressionRequired) { | 904 if (constantExpressionRequired) { |
904 return new UnresolvedAccessor(this, n, token); | 905 return new UnresolvedAccessor(this, n, token); |
905 } | 906 } |
906 return new ThisPropertyAccessor(this, token, n, null, null); | 907 return new ThisPropertyAccessor(this, token, n, null, null); |
907 } else if ( | 908 } else if (isBuiltinLibrary && |
908 // Optimization, if [isPlatformLibrary] is false, this can't be | 909 name == "main" && |
909 // dart:_builtin. | 910 member?.name == "_getMainClosure") { |
910 isPlatformLibrary && | |
911 name == "main" && | |
912 library.uri.path == "_builtin" && | |
913 member?.name == "_getMainClosure") { | |
914 // TODO(ahe): https://github.com/dart-lang/sdk/issues/28989 | 911 // TODO(ahe): https://github.com/dart-lang/sdk/issues/28989 |
915 return new KernelNullLiteral()..fileOffset = offsetForToken(token); | 912 return new KernelNullLiteral()..fileOffset = offsetForToken(token); |
916 } else { | 913 } else { |
917 return new UnresolvedAccessor(this, n, token); | 914 return new UnresolvedAccessor(this, n, token); |
918 } | 915 } |
919 } else if (builder.isTypeDeclaration) { | 916 } else if (builder.isTypeDeclaration) { |
920 if (constantExpressionRequired && | 917 if (constantExpressionRequired && |
921 builder.isTypeVariable && | 918 builder.isTypeVariable && |
922 !member.isConstructor) { | 919 !member.isConstructor) { |
923 addCompileTimeError( | 920 addCompileTimeError( |
(...skipping 2351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3275 if (starToken == null) { | 3272 if (starToken == null) { |
3276 return AsyncMarker.Async; | 3273 return AsyncMarker.Async; |
3277 } else { | 3274 } else { |
3278 assert(identical(starToken.stringValue, "*")); | 3275 assert(identical(starToken.stringValue, "*")); |
3279 return AsyncMarker.AsyncStar; | 3276 return AsyncMarker.AsyncStar; |
3280 } | 3277 } |
3281 } else { | 3278 } else { |
3282 return internalError("Unknown async modifier: $asyncToken"); | 3279 return internalError("Unknown async modifier: $asyncToken"); |
3283 } | 3280 } |
3284 } | 3281 } |
OLD | NEW |