// Copyright 2016 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Flags: --expose-wasm load("test/mjsunit/wasm/wasm-module-builder.js"); function testAddGetter(object, name, val) { Object.defineProperty(object, name, { get: function() { return val; } }); assertSame(val, object[name]); } function testAddGetterFails(object, name, val) { function assign() { Object.defineProperty(object, name, { get: function() { return val; } }); } assertThrows(assign, TypeError); } function testAddGetterBothWays(object, name, val) { print("Object.defineProperty"); Object.defineProperty(object, name, { get: function() { return val; } }); print("object.__defineGetter__"); object.__defineGetter__(name, () => val); assertSame(val, object[name]); } function testFailToAddGetter(object, name, val) { assertThrows(() => Object.defineProperty(object, name, { get: function() { return val; } })); } testAddGetter(testAddGetter, "name", 11); function makeBuilder() { var builder = new WasmModuleBuilder(); builder.addFunction("f", kSig_v_v) .addBody([]) .exportFunc(); return builder; } (function TestAddGetterToFunction() { print("TestAddGetterToFunction..."); var builder = makeBuilder(); var f = builder.instantiate().exports.f; testAddGetterBothWays(f, "name", "foo"); testAddGetter(f, "blam", "baz"); })(); (function TestAddGetterToModule() { print("TestAddGetterToModule..."); var builder = makeBuilder(); var module = new WebAssembly.Module(builder.toBuffer()); testAddGetter(module, "exports", 290); testAddGetter(module, "xyz", new Object()); })(); (function TestAddGetterToInstance() { print("TestAddGetterToInstance..."); var builder = makeBuilder(); var instance = builder.instantiate(); testAddGetter(instance, "exports", 290); testAddGetter(instance, "xyz", new Object()); })(); (function TestAddGetterToExports() { print("TestAddGetterToExports..."); var builder = makeBuilder(); var exports = builder.instantiate().exports; testFailToAddGetter(exports, "f", 9834); testAddGetterFails(exports, "nag", new Number(2)); })();