| 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  */ | 7  */ | 
| 8 dart_library.library('dart_runtime/_operations', null, /* Imports */[ | 8 dart_library.library('dart_runtime/_operations', null, /* Imports */[ | 
| 9 ], /* Lazy Imports */[ | 9 ], /* Lazy Imports */[ | 
| 10   'dart/async', | 10   'dart/async', | 
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 55     } | 55     } | 
| 56         return result; | 56         return result; | 
| 57   } | 57   } | 
| 58   exports.dload = dload; | 58   exports.dload = dload; | 
| 59 | 59 | 
| 60   function dput(obj, field, value) { | 60   function dput(obj, field, value) { | 
| 61     field = _canonicalFieldName(obj, field, [value], field); | 61     field = _canonicalFieldName(obj, field, [value], field); | 
| 62     // TODO(vsm): Implement NSM and type checks. | 62     // TODO(vsm): Implement NSM and type checks. | 
| 63     // See: https://github.com/dart-lang/dev_compiler/issues/170 | 63     // See: https://github.com/dart-lang/dev_compiler/issues/170 | 
| 64     obj[field] = value; | 64     obj[field] = value; | 
|  | 65     return value; | 
| 65   } | 66   } | 
| 66   exports.dput = dput; | 67   exports.dput = dput; | 
| 67 | 68 | 
| 68 | 69 | 
| 69   /// Check that a function of a given type can be applied to | 70   /// Check that a function of a given type can be applied to | 
| 70   /// actuals. | 71   /// actuals. | 
| 71   function checkApply(type, actuals) { | 72   function checkApply(type, actuals) { | 
| 72     if (actuals.length < type.args.length) return false; | 73     if (actuals.length < type.args.length) return false; | 
| 73     let index = 0; | 74     let index = 0; | 
| 74     for(let i = 0; i < type.args.length; ++i) { | 75     for(let i = 0; i < type.args.length; ++i) { | 
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 161     return callMethod(obj, method, slice.call(arguments, 2), method); | 162     return callMethod(obj, method, slice.call(arguments, 2), method); | 
| 162   } | 163   } | 
| 163   exports.dsend = dsend; | 164   exports.dsend = dsend; | 
| 164 | 165 | 
| 165   function dindex(obj, index) { | 166   function dindex(obj, index) { | 
| 166     return callMethod(obj, 'get', [index], '[]'); | 167     return callMethod(obj, 'get', [index], '[]'); | 
| 167   } | 168   } | 
| 168   exports.dindex = dindex; | 169   exports.dindex = dindex; | 
| 169 | 170 | 
| 170   function dsetindex(obj, index, value) { | 171   function dsetindex(obj, index, value) { | 
| 171     return callMethod(obj, 'set', [index, value], '[]='); | 172     callMethod(obj, 'set', [index, value], '[]='); | 
|  | 173     return value; | 
| 172   } | 174   } | 
| 173   exports.dsetindex = dsetindex; | 175   exports.dsetindex = dsetindex; | 
| 174 | 176 | 
| 175   function _ignoreTypeFailure(actual, type) { | 177   function _ignoreTypeFailure(actual, type) { | 
| 176     // TODO(vsm): Remove this hack ... | 178     // TODO(vsm): Remove this hack ... | 
| 177     // This is primarily due to the lack of generic methods, | 179     // This is primarily due to the lack of generic methods, | 
| 178     // but we need to triage all the errors. | 180     // but we need to triage all the errors. | 
| 179     let isSubtype = types.isSubtype; | 181     let isSubtype = types.isSubtype; | 
| 180     if (isSubtype(type, core.Iterable) && isSubtype(actual, core.Iterable) || | 182     if (isSubtype(type, core.Iterable) && isSubtype(actual, core.Iterable) || | 
| 181         isSubtype(type, async.Future) && isSubtype(actual, async.Future) || | 183         isSubtype(type, async.Future) && isSubtype(actual, async.Future) || | 
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 311     console.log(error.stack ? error.stack : 'No stack trace for: ' + error); | 313     console.log(error.stack ? error.stack : 'No stack trace for: ' + error); | 
| 312   } | 314   } | 
| 313   exports.stackPrint = stackPrint; | 315   exports.stackPrint = stackPrint; | 
| 314 | 316 | 
| 315   function stackTrace(exception) { | 317   function stackTrace(exception) { | 
| 316     var error = getError(exception); | 318     var error = getError(exception); | 
| 317     return _js_helper.getTraceFromException(error); | 319     return _js_helper.getTraceFromException(error); | 
| 318   } | 320   } | 
| 319   exports.stackTrace = stackTrace; | 321   exports.stackTrace = stackTrace; | 
| 320 | 322 | 
|  | 323   /** | 
|  | 324    * Implements a sequence of .? operations. | 
|  | 325    * | 
|  | 326    * Will call each successive callback, unless one returns null, which stops | 
|  | 327    * the sequence. | 
|  | 328    */ | 
|  | 329   function nullSafe(obj /*, ...callbacks*/) { | 
|  | 330     let callbacks = slice.call(arguments, 1); | 
|  | 331     if (obj == null) return obj; | 
|  | 332     for (const callback of callbacks) { | 
|  | 333       obj = callback(obj); | 
|  | 334       if (obj == null) break; | 
|  | 335     } | 
|  | 336     return obj; | 
|  | 337   } | 
|  | 338   exports.nullSafe = nullSafe; | 
|  | 339 | 
| 321   let _value = Symbol('_value'); | 340   let _value = Symbol('_value'); | 
| 322   /** | 341   /** | 
| 323    * Looks up a sequence of [keys] in [map], recursively, and | 342    * Looks up a sequence of [keys] in [map], recursively, and | 
| 324    * returns the result. If the value is not found, [valueFn] will be called to | 343    * returns the result. If the value is not found, [valueFn] will be called to | 
| 325    * add it. For example: | 344    * add it. For example: | 
| 326    * | 345    * | 
| 327    *     let map = new Map(); | 346    *     let map = new Map(); | 
| 328    *     putIfAbsent(map, [1, 2, 'hi ', 'there '], () => 'world'); | 347    *     putIfAbsent(map, [1, 2, 'hi ', 'there '], () => 'world'); | 
| 329    * | 348    * | 
| 330    * ... will create a Map with a structure like: | 349    * ... will create a Map with a structure like: | 
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 429     next() { | 448     next() { | 
| 430       let i = this.dartIterator; | 449       let i = this.dartIterator; | 
| 431       let done = !i.moveNext(); | 450       let done = !i.moveNext(); | 
| 432       return { done: done, value: done ? void 0 : i.current }; | 451       return { done: done, value: done ? void 0 : i.current }; | 
| 433     } | 452     } | 
| 434   } | 453   } | 
| 435   exports.JsIterator = JsIterator; | 454   exports.JsIterator = JsIterator; | 
| 436 | 455 | 
| 437 | 456 | 
| 438 }); | 457 }); | 
| OLD | NEW | 
|---|