OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 /// This library defines runtime operations on objects used by the code | 5 /// This library defines runtime operations on objects used by the code |
6 /// generator. | 6 /// generator. |
7 part of dart._runtime; | 7 part of dart._runtime; |
8 | 8 |
9 class InvocationImpl extends Invocation { | 9 class InvocationImpl extends Invocation { |
10 final Symbol memberName; | 10 final Symbol memberName; |
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
743 // tools. | 743 // tools. |
744 stackPrint(exception) { | 744 stackPrint(exception) { |
745 var error = recordJsError(exception); | 745 var error = recordJsError(exception); |
746 JS('', 'console.log(#.stack ? #.stack : "No stack trace for: " + #)', error, | 746 JS('', 'console.log(#.stack ? #.stack : "No stack trace for: " + #)', error, |
747 error, error); | 747 error, error); |
748 } | 748 } |
749 | 749 |
750 // Forward to dart:_js_helper to create a _StackTrace object. | 750 // Forward to dart:_js_helper to create a _StackTrace object. |
751 stackTrace(exception) => getTraceFromException(exception); | 751 stackTrace(exception) => getTraceFromException(exception); |
752 | 752 |
753 /// | |
754 /// Implements a sequence of .? operations. | |
755 /// | |
756 /// Will call each successive callback, unless one returns null, which stops | |
757 /// the sequence. | |
758 /// | |
759 nullSafe(obj, @rest callbacks) => JS( | |
760 '', | |
761 '''(() => { | |
762 if ($obj == null) return $obj; | |
763 for (let callback of $callbacks) { | |
764 $obj = callback($obj); | |
765 if ($obj == null) break; | |
766 } | |
767 return $obj; | |
768 })()'''); | |
769 | |
770 final _value = JS('', 'Symbol("_value")'); | 753 final _value = JS('', 'Symbol("_value")'); |
771 | 754 |
772 /// | 755 /// |
773 /// Looks up a sequence of [keys] in [map], recursively, and | 756 /// Looks up a sequence of [keys] in [map], recursively, and |
774 /// returns the result. If the value is not found, [valueFn] will be called to | 757 /// returns the result. If the value is not found, [valueFn] will be called to |
775 /// add it. For example: | 758 /// add it. For example: |
776 /// | 759 /// |
777 /// let map = new Map(); | 760 /// let map = new Map(); |
778 /// putIfAbsent(map, [1, 2, 'hi ', 'there '], () => 'world'); | 761 /// putIfAbsent(map, [1, 2, 'hi ', 'there '], () => 'world'); |
779 /// | 762 /// |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1012 JS('', '# = "+" + #', name, name); | 995 JS('', '# = "+" + #', name, name); |
1013 } | 996 } |
1014 return name; | 997 return name; |
1015 } | 998 } |
1016 | 999 |
1017 /// Emulates the implicit "loadLibrary" function provided by a deferred library. | 1000 /// Emulates the implicit "loadLibrary" function provided by a deferred library. |
1018 /// | 1001 /// |
1019 /// Libraries are not actually deferred in DDC, so this just returns a future | 1002 /// Libraries are not actually deferred in DDC, so this just returns a future |
1020 /// that completes immediately. | 1003 /// that completes immediately. |
1021 Future loadLibrary() => new Future.value(); | 1004 Future loadLibrary() => new Future.value(); |
OLD | NEW |