| // API Surface Test: check that mutating prototypes |
| // of type objects has no effect, and that mutating |
| // the prototypes of typed objects is an error. |
| |
| if (!this.hasOwnProperty("TypedObject")) |
| quit(); |
| |
| load(libdir + "asserts.js"); |
| |
| var {StructType, uint32, Object, Any, storage, objectType} = TypedObject; |
| |
| function main() { // once a C programmer, always a C programmer. |
| var Uints = new StructType({f: uint32, g: uint32}); |
| var p = Uints.prototype; |
| Uints.prototype = {}; // no effect |
| assertEq(p, Uints.prototype); |
| |
| var uints = new Uints(); |
| assertEq(uints.__proto__, p); |
| assertThrowsInstanceOf(() => uints.__proto__ = {}, |
| TypeError); |
| assertThrowsInstanceOf(() => Object.setPrototypeOf(uints, {}), |
| TypeError); |
| assertEq(uints.__proto__, p); |
| |
| var Uintss = Uints.array(2); |
| var p = Uintss.prototype; |
| Uintss.prototype = {}; // no effect |
| assertEq(p, Uintss.prototype); |
| |
| print("Tests complete"); |
| } |
| |
| main(); |