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

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

Issue 2954823002: Implement type inference for try/catch blocks. (Closed)
Patch Set: Created 3 years, 6 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
« no previous file with comments | « no previous file | pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1922 matching lines...) Expand 10 before | Expand all | Expand 10 after
1933 if (catchKeyword != null) { 1933 if (catchKeyword != null) {
1934 exitLocalScope(); 1934 exitLocalScope();
1935 } 1935 }
1936 FormalParameters catchParameters = popIfNotNull(catchKeyword); 1936 FormalParameters catchParameters = popIfNotNull(catchKeyword);
1937 DartType type = popIfNotNull(onKeyword) ?? const DynamicType(); 1937 DartType type = popIfNotNull(onKeyword) ?? const DynamicType();
1938 VariableDeclaration exception; 1938 VariableDeclaration exception;
1939 VariableDeclaration stackTrace; 1939 VariableDeclaration stackTrace;
1940 if (catchParameters != null) { 1940 if (catchParameters != null) {
1941 if (catchParameters.required.length > 0) { 1941 if (catchParameters.required.length > 0) {
1942 exception = catchParameters.required[0]; 1942 exception = catchParameters.required[0];
1943 exception.type = type;
1943 } 1944 }
1944 if (catchParameters.required.length > 1) { 1945 if (catchParameters.required.length > 1) {
1945 stackTrace = catchParameters.required[1]; 1946 stackTrace = catchParameters.required[1];
1947 stackTrace.type = coreTypes.stackTraceClass.rawType;
1946 } 1948 }
1947 if (catchParameters.required.length > 2 || 1949 if (catchParameters.required.length > 2 ||
1948 catchParameters.optional != null) { 1950 catchParameters.optional != null) {
1949 body = new Block(<Statement>[ 1951 body = new Block(<Statement>[
1950 compileTimeErrorInTry ??= buildCompileTimeErrorStatement( 1952 compileTimeErrorInTry ??= buildCompileTimeErrorStatement(
1951 "Invalid catch arguments.", catchKeyword.next.charOffset) 1953 "Invalid catch arguments.", catchKeyword.next.charOffset)
1952 ]); 1954 ]);
1953 } 1955 }
1954 } 1956 }
1955 push(new Catch(exception, body, guard: type, stackTrace: stackTrace)); 1957 push(new Catch(exception, body, guard: type, stackTrace: stackTrace));
1956 } 1958 }
1957 1959
1958 @override 1960 @override
1959 void endTryStatement(int catchCount, Token tryKeyword, Token finallyKeyword) { 1961 void endTryStatement(int catchCount, Token tryKeyword, Token finallyKeyword) {
1960 Statement finallyBlock = popStatementIfNotNull(finallyKeyword); 1962 Statement finallyBlock = popStatementIfNotNull(finallyKeyword);
1961 List<Catch> catches = popList(catchCount); 1963 List<Catch> catches = popList(catchCount);
1962 Statement tryBlock = popStatement(); 1964 Statement tryBlock = popStatement();
1963 if (compileTimeErrorInTry == null) { 1965 if (compileTimeErrorInTry == null) {
1964 if (catches != null) { 1966 if (catches != null) {
1965 tryBlock = new TryCatch(tryBlock, catches); 1967 tryBlock = new KernelTryCatch(tryBlock, catches);
1966 } 1968 }
1967 if (finallyBlock != null) { 1969 if (finallyBlock != null) {
1968 tryBlock = new TryFinally(tryBlock, finallyBlock); 1970 tryBlock = new KernelTryFinally(tryBlock, finallyBlock);
1969 } 1971 }
1970 push(tryBlock); 1972 push(tryBlock);
1971 } else { 1973 } else {
1972 push(compileTimeErrorInTry); 1974 push(compileTimeErrorInTry);
1973 compileTimeErrorInTry = null; 1975 compileTimeErrorInTry = null;
1974 } 1976 }
1975 } 1977 }
1976 1978
1977 @override 1979 @override
1978 void handleNoExpression(Token token) { 1980 void handleNoExpression(Token token) {
(...skipping 1709 matching lines...) Expand 10 before | Expand all | Expand 10 after
3688 if (starToken == null) { 3690 if (starToken == null) {
3689 return AsyncMarker.Async; 3691 return AsyncMarker.Async;
3690 } else { 3692 } else {
3691 assert(identical(starToken.stringValue, "*")); 3693 assert(identical(starToken.stringValue, "*"));
3692 return AsyncMarker.AsyncStar; 3694 return AsyncMarker.AsyncStar;
3693 } 3695 }
3694 } else { 3696 } else {
3695 return internalError("Unknown async modifier: $asyncToken"); 3697 return internalError("Unknown async modifier: $asyncToken");
3696 } 3698 }
3697 } 3699 }
OLDNEW
« no previous file with comments | « no previous file | pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698