OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 _js_helper; | 5 library _js_helper; |
6 | 6 |
7 import 'dart:_async_await_error_codes' as async_error_codes; | 7 import 'dart:_async_await_error_codes' as async_error_codes; |
8 | 8 |
9 import 'dart:_js_embedded_names' show | 9 import 'dart:_js_embedded_names' show |
10 DEFERRED_LIBRARY_URIS, | 10 DEFERRED_LIBRARY_URIS, |
(...skipping 2034 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2045 } | 2045 } |
2046 | 2046 |
2047 /** | 2047 /** |
2048 * Called by generated code to fetch the stack trace from an | 2048 * Called by generated code to fetch the stack trace from an |
2049 * exception. Should never return null. | 2049 * exception. Should never return null. |
2050 */ | 2050 */ |
2051 StackTrace getTraceFromException(exception) { | 2051 StackTrace getTraceFromException(exception) { |
2052 if (exception is ExceptionAndStackTrace) { | 2052 if (exception is ExceptionAndStackTrace) { |
2053 return exception.stackTrace; | 2053 return exception.stackTrace; |
2054 } | 2054 } |
2055 return new _StackTrace(exception); | 2055 if (exception == null) return new _StackTrace(exception); |
| 2056 _StackTrace trace = JS('_StackTrace|Null', r'#.$cachedTrace', exception); |
| 2057 if (trace != null) return trace; |
| 2058 trace = new _StackTrace(exception); |
| 2059 return JS('_StackTrace', r'#.$cachedTrace = #', exception, trace); |
2056 } | 2060 } |
2057 | 2061 |
2058 class _StackTrace implements StackTrace { | 2062 class _StackTrace implements StackTrace { |
2059 var _exception; | 2063 var _exception; |
2060 String _trace; | 2064 String _trace; |
2061 _StackTrace(this._exception); | 2065 _StackTrace(this._exception); |
2062 | 2066 |
2063 String toString() { | 2067 String toString() { |
2064 if (_trace != null) return JS('String', '#', _trace); | 2068 if (_trace != null) return JS('String', '#', _trace); |
2065 | 2069 |
(...skipping 2023 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4089 // This is a function that will return a helper function that does the | 4093 // This is a function that will return a helper function that does the |
4090 // iteration of the sync*. | 4094 // iteration of the sync*. |
4091 // | 4095 // |
4092 // Each invocation should give a body with fresh state. | 4096 // Each invocation should give a body with fresh state. |
4093 final dynamic /* js function */ _outerHelper; | 4097 final dynamic /* js function */ _outerHelper; |
4094 | 4098 |
4095 SyncStarIterable(this._outerHelper); | 4099 SyncStarIterable(this._outerHelper); |
4096 | 4100 |
4097 Iterator get iterator => new SyncStarIterator(JS('', '#()', _outerHelper)); | 4101 Iterator get iterator => new SyncStarIterator(JS('', '#()', _outerHelper)); |
4098 } | 4102 } |
OLD | NEW |