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, _js_primitives; | 5 var dart, _js_helper, _js_primitives; |
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 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
862 // initializing them, but easier to not depend on that. | 867 // initializing them, but easier to not depend on that. |
863 for (let name of getOwnNamesAndSymbols(obj)) { | 868 for (let name of getOwnNamesAndSymbols(obj)) { |
864 // TODO(jmesserly): we can make this faster if needed. | 869 // TODO(jmesserly): we can make this faster if needed. |
865 objectKey.push(name); | 870 objectKey.push(name); |
866 objectKey.push(obj[name]); | 871 objectKey.push(obj[name]); |
867 } | 872 } |
868 return multiKeyPutIfAbsent(constants, objectKey, () => obj); | 873 return multiKeyPutIfAbsent(constants, objectKey, () => obj); |
869 } | 874 } |
870 dart.const = constant; | 875 dart.const = constant; |
871 | 876 |
872 /** Sets the runtime type of `obj` to be `type` */ | 877 /** Sets the type of `obj` to be `type` */ |
873 function setType(obj, type) { | 878 function setType(obj, type) { |
| 879 obj.__proto__ = type.prototype; |
| 880 } |
| 881 dart.setType = setType; |
| 882 |
| 883 /** Sets the internal runtime type of `obj` to be `type` */ |
| 884 function setRuntimeType(obj, type) { |
874 obj[_runtimeType] = type; | 885 obj[_runtimeType] = type; |
875 } | 886 } |
876 dart.setType = setType; | 887 dart.setRuntimeType = setRuntimeType; |
877 | 888 |
878 // The following are helpers for Object methods when the receiver | 889 // The following are helpers for Object methods when the receiver |
879 // may be null or primitive. These should only be generated by | 890 // may be null or primitive. These should only be generated by |
880 // the compiler. | 891 // the compiler. |
881 function hashCode(obj) { | 892 function hashCode(obj) { |
882 if (obj == null) { | 893 if (obj == null) { |
883 return 0; | 894 return 0; |
884 } | 895 } |
885 // TODO(vsm): What should we do for primitives and non-Dart objects? | 896 // TODO(vsm): What should we do for primitives and non-Dart objects? |
886 switch (typeof obj) { | 897 switch (typeof obj) { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
936 dart.JsSymbol = Symbol; | 947 dart.JsSymbol = Symbol; |
937 | 948 |
938 // TODO(jmesserly): hack to bootstrap the SDK | 949 // TODO(jmesserly): hack to bootstrap the SDK |
939 _js_helper = _js_helper || {}; | 950 _js_helper = _js_helper || {}; |
940 _js_helper.checkNum = notNull; | 951 _js_helper.checkNum = notNull; |
941 | 952 |
942 _js_primitives = _js_primitives || {}; | 953 _js_primitives = _js_primitives || {}; |
943 _js_primitives.printString = (s) => console.log(s); | 954 _js_primitives.printString = (s) => console.log(s); |
944 | 955 |
945 })(dart || (dart = {})); | 956 })(dart || (dart = {})); |
OLD | NEW |