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

Side by Side Diff: pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Issue 2969053002: Implement type variables on old style function-typed formal parameters. (Closed)
Patch Set: Created 3 years, 5 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
OLDNEW
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 8 show
9 FastaMessage, 9 FastaMessage,
10 codeConstFieldWithoutInitializer, 10 codeConstFieldWithoutInitializer,
(...skipping 1682 matching lines...) Expand 10 before | Expand all | Expand 10 after
1693 } else if (name is String) { 1693 } else if (name is String) {
1694 push(kernelTypeFromString(name, arguments, beginToken.charOffset)); 1694 push(kernelTypeFromString(name, arguments, beginToken.charOffset));
1695 } else { 1695 } else {
1696 internalError("Unhandled: '${name.runtimeType}'."); 1696 internalError("Unhandled: '${name.runtimeType}'.");
1697 } 1697 }
1698 } 1698 }
1699 1699
1700 @override 1700 @override
1701 void beginFunctionType(Token beginToken) { 1701 void beginFunctionType(Token beginToken) {
1702 debugEvent("beginFunctionType"); 1702 debugEvent("beginFunctionType");
1703 enterFunctionTypeScope();
1704 }
1705
1706 void enterFunctionTypeScope() {
1703 List typeVariables = pop(); 1707 List typeVariables = pop();
1704 enterLocalScope(scope.createNestedScope(isModifiable: false)); 1708 enterLocalScope(scope.createNestedScope(isModifiable: false));
1705 push(typeVariables ?? NullValue.TypeVariables); 1709 push(typeVariables ?? NullValue.TypeVariables);
1706 if (typeVariables != null) { 1710 if (typeVariables != null) {
1707 ScopeBuilder scopeBuilder = new ScopeBuilder(scope); 1711 ScopeBuilder scopeBuilder = new ScopeBuilder(scope);
1708 for (KernelTypeVariableBuilder builder in typeVariables) { 1712 for (KernelTypeVariableBuilder builder in typeVariables) {
1709 String name = builder.name; 1713 String name = builder.name;
1710 KernelTypeVariableBuilder existing = scopeBuilder[name]; 1714 KernelTypeVariableBuilder existing = scopeBuilder[name];
1711 if (existing == null) { 1715 if (existing == null) {
1712 scopeBuilder.addMember(name, builder); 1716 scopeBuilder.addMember(name, builder);
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1850 FormalParameterType kind = optional("{", beginToken) 1854 FormalParameterType kind = optional("{", beginToken)
1851 ? FormalParameterType.NAMED 1855 ? FormalParameterType.NAMED
1852 : FormalParameterType.POSITIONAL; 1856 : FormalParameterType.POSITIONAL;
1853 push(new OptionalFormals(kind, popList(count) ?? [])); 1857 push(new OptionalFormals(kind, popList(count) ?? []));
1854 } 1858 }
1855 1859
1856 @override 1860 @override
1857 void beginFunctionTypedFormalParameter(Token token) { 1861 void beginFunctionTypedFormalParameter(Token token) {
1858 debugEvent("beginFunctionTypedFormalParameter"); 1862 debugEvent("beginFunctionTypedFormalParameter");
1859 functionNestingLevel++; 1863 functionNestingLevel++;
1864 enterFunctionTypeScope();
1860 } 1865 }
1861 1866
1862 @override 1867 @override
1863 void endFunctionTypedFormalParameter( 1868 void endFunctionTypedFormalParameter() {
1864 Token thisKeyword, FormalParameterType kind) {
1865 debugEvent("FunctionTypedFormalParameter"); 1869 debugEvent("FunctionTypedFormalParameter");
1866 if (inCatchClause || functionNestingLevel != 0) { 1870 if (inCatchClause || functionNestingLevel != 0) {
1867 exitLocalScope(); 1871 exitLocalScope();
1868 } 1872 }
1869 FormalParameters formals = pop(); 1873 FormalParameters formals = pop();
1870 ignore(Unhandled.TypeVariables);
1871 Identifier name = pop();
1872 DartType returnType = pop(); 1874 DartType returnType = pop();
1873 push(formals.toFunctionType(returnType)); 1875 List<TypeParameter> typeVariables = typeVariableBuildersToKernel(pop());
1874 push(name); 1876 FunctionType type = formals.toFunctionType(returnType, typeVariables);
1877 exitLocalScope();
1878 push(type);
1875 functionNestingLevel--; 1879 functionNestingLevel--;
1876 } 1880 }
1877 1881
1878 @override 1882 @override
1879 void handleValuedFormalParameter(Token equals, Token token) { 1883 void handleValuedFormalParameter(Token equals, Token token) {
1880 debugEvent("ValuedFormalParameter"); 1884 debugEvent("ValuedFormalParameter");
1881 Expression initializer = popForValue(); 1885 Expression initializer = popForValue();
1882 Identifier name = pop(); 1886 Identifier name = pop();
1883 push(new InitializedIdentifier(name.token, initializer)); 1887 push(new InitializedIdentifier(name.token, initializer));
1884 } 1888 }
(...skipping 1834 matching lines...) Expand 10 before | Expand all | Expand 10 after
3719 if (starToken == null) { 3723 if (starToken == null) {
3720 return AsyncMarker.Async; 3724 return AsyncMarker.Async;
3721 } else { 3725 } else {
3722 assert(identical(starToken.stringValue, "*")); 3726 assert(identical(starToken.stringValue, "*"));
3723 return AsyncMarker.AsyncStar; 3727 return AsyncMarker.AsyncStar;
3724 } 3728 }
3725 } else { 3729 } else {
3726 return internalError("Unknown async modifier: $asyncToken"); 3730 return internalError("Unknown async modifier: $asyncToken");
3727 } 3731 }
3728 } 3732 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698