mirror of
https://github.com/rustwasm/wasm-bindgen.git
synced 2024-12-14 12:02:23 +03:00
cc36bdc00d
Make sure they reset their internal pointer to null after we call Rust since it invalidates the Rust pointer after being called! Closes #2168
44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
const wasm = require('wasm-bindgen-test.js');
|
|
const assert = require('assert');
|
|
|
|
// NB: `wasm-pack` uses the presence of checks for moved values as a way to test
|
|
// whether it is correctly enabling `--debug` when configured to do so, so don't
|
|
// change this expected debug output without also updating `wasm-pack`'s tests.
|
|
const assertMovedPtrThrows = process.env.WASM_BINDGEN_NO_DEBUG == null
|
|
? f => assert.throws(f, /Attempt to use a moved value/)
|
|
: f => assert.throws(f, /null pointer passed to rust/);
|
|
|
|
const useMoved = () => {
|
|
const apple = new wasm.Fruit('apple');
|
|
apple.name();
|
|
wasm.eat(apple);
|
|
assertMovedPtrThrows(() => apple.name());
|
|
};
|
|
|
|
const moveMoved = () => {
|
|
const pear = new wasm.Fruit('pear');
|
|
pear.name();
|
|
wasm.eat(pear);
|
|
assertMovedPtrThrows(() => wasm.eat(pear));
|
|
};
|
|
|
|
const methodMoved = () => {
|
|
const quince = new wasm.Fruit('quince');
|
|
quince.name();
|
|
quince.rot();
|
|
assertMovedPtrThrows(() => quince.rot());
|
|
};
|
|
|
|
exports.js_works = () => {
|
|
useMoved();
|
|
moveMoved();
|
|
methodMoved();
|
|
|
|
const a = new wasm.Fruit('a');
|
|
a.prop;
|
|
assertMovedPtrThrows(() => a.prop);
|
|
const b = new wasm.Fruit('a');
|
|
b.prop = 3;
|
|
assertMovedPtrThrows(() => { b.prop = 4; });
|
|
};
|