Chromium Code Reviews| 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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 85 | 85 |
| 86 final CoreTypes coreTypes; | 86 final CoreTypes coreTypes; |
| 87 | 87 |
| 88 final bool isInstanceMember; | 88 final bool isInstanceMember; |
| 89 | 89 |
| 90 final Map<String, FieldInitializer> fieldInitializers = | 90 final Map<String, FieldInitializer> fieldInitializers = |
| 91 <String, FieldInitializer>{}; | 91 <String, FieldInitializer>{}; |
| 92 | 92 |
| 93 final Scope enclosingScope; | 93 final Scope enclosingScope; |
| 94 | 94 |
| 95 final bool isDartLibrary; | 95 final bool enableNative; |
| 96 | 96 |
| 97 @override | 97 @override |
| 98 final Uri uri; | 98 final Uri uri; |
| 99 | 99 |
| 100 final TypeInferrer _typeInferrer; | 100 final TypeInferrer _typeInferrer; |
| 101 | 101 |
| 102 @override | 102 @override |
| 103 final AstFactory astFactory; | 103 final AstFactory astFactory; |
| 104 | 104 |
| 105 @override | 105 @override |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 156 this.hierarchy, | 156 this.hierarchy, |
| 157 this.coreTypes, | 157 this.coreTypes, |
| 158 this.classBuilder, | 158 this.classBuilder, |
| 159 this.isInstanceMember, | 159 this.isInstanceMember, |
| 160 this.uri, | 160 this.uri, |
| 161 this._typeInferrer, | 161 this._typeInferrer, |
| 162 this.astFactory, | 162 this.astFactory, |
| 163 {this.fieldDependencies}) | 163 {this.fieldDependencies}) |
| 164 : enclosingScope = scope, | 164 : enclosingScope = scope, |
| 165 library = library, | 165 library = library, |
| 166 isDartLibrary = library.uri.scheme == "dart", | 166 enableNative = (library.uri.scheme == "dart" || library.isPatch), |
| 167 needsImplicitSuperInitializer = | 167 needsImplicitSuperInitializer = |
| 168 coreTypes.objectClass != classBuilder?.cls, | 168 coreTypes.objectClass != classBuilder?.cls, |
| 169 typePromoter = _typeInferrer.typePromoter, | 169 typePromoter = _typeInferrer.typePromoter, |
| 170 super(scope); | 170 super(scope); |
| 171 | 171 |
| 172 bool get hasParserError => recoverableErrors.isNotEmpty; | 172 bool get hasParserError => recoverableErrors.isNotEmpty; |
| 173 | 173 |
| 174 bool get inConstructor { | 174 bool get inConstructor { |
| 175 return functionNestingLevel == 0 && member is KernelConstructorBuilder; | 175 return functionNestingLevel == 0 && member is KernelConstructorBuilder; |
| 176 } | 176 } |
| (...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 863 builder == null && | 863 builder == null && |
| 864 "loadLibrary" == name) { | 864 "loadLibrary" == name) { |
| 865 return buildCompileTimeError( | 865 return buildCompileTimeError( |
| 866 "Deferred loading isn't implemented yet.", offsetForToken(token)); | 866 "Deferred loading isn't implemented yet.", offsetForToken(token)); |
| 867 } else if (!isQualified && isInstanceContext) { | 867 } else if (!isQualified && isInstanceContext) { |
| 868 assert(builder == null); | 868 assert(builder == null); |
| 869 if (constantExpressionRequired) { | 869 if (constantExpressionRequired) { |
| 870 return new UnresolvedAccessor(this, n, token); | 870 return new UnresolvedAccessor(this, n, token); |
| 871 } | 871 } |
| 872 return new ThisPropertyAccessor(this, token, n, null, null); | 872 return new ThisPropertyAccessor(this, token, n, null, null); |
| 873 } else if (isDartLibrary && | 873 } else if (enableNative && |
|
Siggi Cherem (dart-lang)
2017/05/22 16:21:15
you probably don't need this one here
ahe
2017/05/22 16:26:47
It's an optimization.
| |
| 874 name == "main" && | 874 name == "main" && |
| 875 library.uri.scheme == "dart" && | |
| 875 library.uri.path == "_builtin" && | 876 library.uri.path == "_builtin" && |
| 876 member?.name == "_getMainClosure") { | 877 member?.name == "_getMainClosure") { |
|
Siggi Cherem (dart-lang)
2017/05/22 16:21:15
actually - can this be deleted now that we no long
ahe
2017/05/22 16:26:47
I'll investigate.
ahe
2017/05/24 16:09:46
No. The method still exists and refers to main (wh
| |
| 877 // TODO(ahe): https://github.com/dart-lang/sdk/issues/28989 | 878 // TODO(ahe): https://github.com/dart-lang/sdk/issues/28989 |
| 878 return astFactory.nullLiteral(token); | 879 return astFactory.nullLiteral(token); |
| 879 } else { | 880 } else { |
| 880 return new UnresolvedAccessor(this, n, token); | 881 return new UnresolvedAccessor(this, n, token); |
| 881 } | 882 } |
| 882 } else if (builder.isTypeDeclaration) { | 883 } else if (builder.isTypeDeclaration) { |
| 883 if (constantExpressionRequired && | 884 if (constantExpressionRequired && |
| 884 builder.isTypeVariable && | 885 builder.isTypeVariable && |
| 885 !member.isConstructor) { | 886 !member.isConstructor) { |
| 886 addCompileTimeError( | 887 addCompileTimeError( |
| (...skipping 1647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2534 } | 2535 } |
| 2535 | 2536 |
| 2536 @override | 2537 @override |
| 2537 void handleRecoverableError(Token token, FastaMessage message) { | 2538 void handleRecoverableError(Token token, FastaMessage message) { |
| 2538 bool silent = hasParserError; | 2539 bool silent = hasParserError; |
| 2539 addCompileTimeError(message.charOffset, message.message, silent: silent); | 2540 addCompileTimeError(message.charOffset, message.message, silent: silent); |
| 2540 } | 2541 } |
| 2541 | 2542 |
| 2542 @override | 2543 @override |
| 2543 Token handleUnrecoverableError(Token token, FastaMessage message) { | 2544 Token handleUnrecoverableError(Token token, FastaMessage message) { |
| 2544 if (isDartLibrary && message.code == codeExpectedFunctionBody) { | 2545 if (enableNative && message.code == codeExpectedFunctionBody) { |
| 2545 Token recover = library.loader.target.skipNativeClause(token); | 2546 Token recover = library.loader.target.skipNativeClause(token); |
| 2546 if (recover != null) return recover; | 2547 if (recover != null) return recover; |
| 2547 } else if (message.code == codeExpectedButGot) { | 2548 } else if (message.code == codeExpectedButGot) { |
| 2548 String expected = message.arguments["string"]; | 2549 String expected = message.arguments["string"]; |
| 2549 const List<String> trailing = const <String>[")", "}", ";", ","]; | 2550 const List<String> trailing = const <String>[")", "}", ";", ","]; |
| 2550 if (trailing.contains(token.stringValue) && trailing.contains(expected)) { | 2551 if (trailing.contains(token.stringValue) && trailing.contains(expected)) { |
| 2551 handleRecoverableError(token, message); | 2552 handleRecoverableError(token, message); |
| 2552 return newSyntheticToken(token); | 2553 return newSyntheticToken(token); |
| 2553 } | 2554 } |
| 2554 } | 2555 } |
| (...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3166 if (starToken == null) { | 3167 if (starToken == null) { |
| 3167 return AsyncMarker.Async; | 3168 return AsyncMarker.Async; |
| 3168 } else { | 3169 } else { |
| 3169 assert(identical(starToken.stringValue, "*")); | 3170 assert(identical(starToken.stringValue, "*")); |
| 3170 return AsyncMarker.AsyncStar; | 3171 return AsyncMarker.AsyncStar; |
| 3171 } | 3172 } |
| 3172 } else { | 3173 } else { |
| 3173 return internalError("Unknown async modifier: $asyncToken"); | 3174 return internalError("Unknown async modifier: $asyncToken"); |
| 3174 } | 3175 } |
| 3175 } | 3176 } |
| OLD | NEW |