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 | 8 show |
9 FastaMessage, | 9 FastaMessage, |
10 codeConstFieldWithoutInitializer, | 10 codeConstFieldWithoutInitializer, |
(...skipping 1922 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 } |
OLD | NEW |