| 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 var dart, _js_helper; | 5 var dart, _js_helper; |
| 6 (function (dart) { | 6 (function (dart) { |
| 7 'use strict'; | 7 'use strict'; |
| 8 | 8 |
| 9 let defineProperty = Object.defineProperty; | 9 let defineProperty = Object.defineProperty; |
| 10 let getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; | 10 let getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; |
| (...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 624 return to; | 624 return to; |
| 625 } | 625 } |
| 626 | 626 |
| 627 /** | 627 /** |
| 628 * Copy properties from source to destination object. | 628 * Copy properties from source to destination object. |
| 629 * This operation is commonly called `mixin` in JS. | 629 * This operation is commonly called `mixin` in JS. |
| 630 */ | 630 */ |
| 631 function copyProperties(to, from) { | 631 function copyProperties(to, from) { |
| 632 return copyPropertiesHelper(to, from, getOwnNamesAndSymbols(from)); | 632 return copyPropertiesHelper(to, from, getOwnNamesAndSymbols(from)); |
| 633 } | 633 } |
| 634 dart.copyProperties = copyProperties; |
| 634 | 635 |
| 635 /** | 636 /** |
| 636 * Copy symbols from the prototype of the source to destination. | 637 * Copy symbols from the prototype of the source to destination. |
| 637 * These are the only properties safe to copy onto an existing public | 638 * These are the only properties safe to copy onto an existing public |
| 638 * JavaScript class. | 639 * JavaScript class. |
| 639 */ | 640 */ |
| 640 function registerExtension(to, from) { | 641 function registerExtension(to, from) { |
| 641 return copyPropertiesHelper(to.prototype, from.prototype, | 642 return copyPropertiesHelper(to.prototype, from.prototype, |
| 642 getOwnPropertySymbols(from.prototype)); | 643 getOwnPropertySymbols(from.prototype)); |
| 643 } | 644 } |
| 645 dart.registerExtension = registerExtension; |
| 644 | 646 |
| 645 dart.copyProperties = copyProperties; | 647 function setBaseClass(derived, base) { |
| 646 dart.registerExtension = registerExtension; | 648 // Link the extension to the type it's extending as a base class. |
| 649 derived.prototype.__proto__ = base.prototype; |
| 650 } |
| 651 dart.setBaseClass = setBaseClass; |
| 647 | 652 |
| 648 /** | 653 /** |
| 649 * This is called whenever a derived class needs to introduce a new field, | 654 * This is called whenever a derived class needs to introduce a new field, |
| 650 * shadowing a field or getter/setter pair on its parent. | 655 * shadowing a field or getter/setter pair on its parent. |
| 651 * | 656 * |
| 652 * This is important because otherwise, trying to read or write the field | 657 * This is important because otherwise, trying to read or write the field |
| 653 * would end up calling the getter or setter, and one of those might not even | 658 * would end up calling the getter or setter, and one of those might not even |
| 654 * exist, resulting in a runtime error. Even if they did exist, that's the | 659 * exist, resulting in a runtime error. Even if they did exist, that's the |
| 655 * wrong behavior if a new field was declared. | 660 * wrong behavior if a new field was declared. |
| 656 */ | 661 */ |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 860 // initializing them, but easier to not depend on that. | 865 // initializing them, but easier to not depend on that. |
| 861 for (let name of getOwnNamesAndSymbols(obj)) { | 866 for (let name of getOwnNamesAndSymbols(obj)) { |
| 862 // TODO(jmesserly): we can make this faster if needed. | 867 // TODO(jmesserly): we can make this faster if needed. |
| 863 objectKey.push(name); | 868 objectKey.push(name); |
| 864 objectKey.push(obj[name]); | 869 objectKey.push(obj[name]); |
| 865 } | 870 } |
| 866 return multiKeyPutIfAbsent(constants, objectKey, () => obj); | 871 return multiKeyPutIfAbsent(constants, objectKey, () => obj); |
| 867 } | 872 } |
| 868 dart.const = constant; | 873 dart.const = constant; |
| 869 | 874 |
| 870 /** Sets the runtime type of `obj` to be `type` */ | 875 /** Sets the type of `obj` to be `type` */ |
| 871 function setType(obj, type) { | 876 function setType(obj, type) { |
| 877 obj.__proto__ = type.prototype; |
| 878 } |
| 879 dart.setType = setType; |
| 880 |
| 881 /** Sets the internal runtime type of `obj` to be `type` */ |
| 882 function setRuntimeType(obj, type) { |
| 872 obj[_runtimeType] = type; | 883 obj[_runtimeType] = type; |
| 873 } | 884 } |
| 874 dart.setType = setType; | 885 dart.setRuntimeType = setRuntimeType; |
| 875 | 886 |
| 876 // The following are helpers for Object methods when the receiver | 887 // The following are helpers for Object methods when the receiver |
| 877 // may be null or primitive. These should only be generated by | 888 // may be null or primitive. These should only be generated by |
| 878 // the compiler. | 889 // the compiler. |
| 879 function hashCode(obj) { | 890 function hashCode(obj) { |
| 880 if (obj == null) { | 891 if (obj == null) { |
| 881 return 0; | 892 return 0; |
| 882 } | 893 } |
| 883 // TODO(vsm): What should we do for primitives and non-Dart objects? | 894 // TODO(vsm): What should we do for primitives and non-Dart objects? |
| 884 switch (typeof obj) { | 895 switch (typeof obj) { |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 931 dart.bottom = { toString() { return 'bottom'; } }; | 942 dart.bottom = { toString() { return 'bottom'; } }; |
| 932 | 943 |
| 933 dart.global = window || global; | 944 dart.global = window || global; |
| 934 dart.JsSymbol = Symbol; | 945 dart.JsSymbol = Symbol; |
| 935 | 946 |
| 936 // TODO(jmesserly): hack to bootstrap the SDK | 947 // TODO(jmesserly): hack to bootstrap the SDK |
| 937 _js_helper = _js_helper || {}; | 948 _js_helper = _js_helper || {}; |
| 938 _js_helper.checkNum = notNull; | 949 _js_helper.checkNum = notNull; |
| 939 | 950 |
| 940 })(dart || (dart = {})); | 951 })(dart || (dart = {})); |
| OLD | NEW |