Skip to content

Commit 04d508b

Browse files
authored
Disable enabling reference types by default with the bundler target (#4235)
Update reference files to Rust v1.82.
1 parent 2f2ac1a commit 04d508b

24 files changed

+80
-158
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
* Optimized ABI performance for `Option<{i32,u32,isize,usize,f32,*const T,*mut T}>`.
2929
[#4183](https://github.com/rustwasm/wasm-bindgen/pull/4183)
3030

31+
* Reference type proposal transformations are not applied by default when detecting it in the Wasm module for the bundler target because currently `webpack` doesn't support it.
32+
[#4235](https://github.com/rustwasm/wasm-bindgen/pull/4235)
33+
3134
### Fixed
3235

3336
* Fixed methods with `self: &Self` consuming the object.

crates/cli-support/src/lib.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,10 @@ impl Bindgen {
324324
};
325325

326326
// Enable reference type transformations if the module is already using it.
327-
if let Ok(true) = wasm_bindgen_wasm_conventions::target_feature(&module, "reference-types")
327+
// Currently `webpack` does not support reference types.
328+
if !matches!(self.mode, OutputMode::Bundler { .. })
329+
&& wasm_bindgen_wasm_conventions::target_feature(&module, "reference-types").ok()
330+
== Some(true)
328331
{
329332
self.externref = true;
330333
}

crates/cli/tests/reference/add.wat

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
(export "memory" (memory 0))
77
(export "add_u32" (func $add_u32))
88
(export "add_i32" (func $add_i32))
9-
(@custom "target_features" (after code) "\02+\0fmutable-globals+\08sign-ext")
9+
(@custom "target_features" (after code) "\04+\0amultivalue+\0fmutable-globals+\0freference-types+\08sign-ext")
1010
)
1111

crates/cli/tests/reference/anyref-empty.wat

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
(export "memory" (memory 0))
77
(export "__wbindgen_export_0" (table 0))
88
(export "__wbindgen_start" (func 0))
9-
(@custom "target_features" (after export) "\03+\0fmutable-globals+\08sign-ext+\0freference-types")
9+
(@custom "target_features" (after export) "\04+\0amultivalue+\0fmutable-globals+\0freference-types+\08sign-ext")
1010
)
1111

crates/cli/tests/reference/anyref-import-catch.js

+3-19
Original file line numberDiff line numberDiff line change
@@ -39,32 +39,16 @@ function getStringFromWasm0(ptr, len) {
3939
return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
4040
}
4141

42-
let cachedDataViewMemory0 = null;
43-
44-
function getDataViewMemory0() {
45-
if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
46-
cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
47-
}
48-
return cachedDataViewMemory0;
49-
}
50-
5142
function takeFromExternrefTable0(idx) {
5243
const value = wasm.__wbindgen_export_2.get(idx);
5344
wasm.__externref_table_dealloc(idx);
5445
return value;
5546
}
5647

5748
export function exported() {
58-
try {
59-
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
60-
wasm.exported(retptr);
61-
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
62-
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
63-
if (r1) {
64-
throw takeFromExternrefTable0(r0);
65-
}
66-
} finally {
67-
wasm.__wbindgen_add_to_stack_pointer(16);
49+
const ret = wasm.exported();
50+
if (ret[1]) {
51+
throw takeFromExternrefTable0(ret[0]);
6852
}
6953
}
7054

Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
11
(module $reference_test.wasm
22
(type (;0;) (func))
33
(type (;1;) (func (result i32)))
4-
(type (;2;) (func (param i32)))
5-
(type (;3;) (func (param i32) (result i32)))
4+
(type (;2;) (func (result i32 i32)))
5+
(type (;3;) (func (param i32)))
66
(import "./reference_test_bg.js" "__wbindgen_init_externref_table" (func (;0;) (type 0)))
7-
(func $exported (;1;) (type 2) (param i32))
8-
(func $__externref_table_dealloc (;2;) (type 2) (param i32))
9-
(func $__externref_table_alloc (;3;) (type 1) (result i32))
10-
(func $__wbindgen_exn_store (;4;) (type 2) (param i32))
11-
(func $__wbindgen_add_to_stack_pointer (;5;) (type 3) (param i32) (result i32))
7+
(func $__externref_table_dealloc (;1;) (type 3) (param i32))
8+
(func $__externref_table_alloc (;2;) (type 1) (result i32))
9+
(func $__wbindgen_exn_store (;3;) (type 3) (param i32))
10+
(func $"exported multivalue shim" (;4;) (type 2) (result i32 i32))
1211
(table (;0;) 128 externref)
1312
(memory (;0;) 17)
1413
(export "memory" (memory 0))
15-
(export "exported" (func $exported))
14+
(export "exported" (func $"exported multivalue shim"))
1615
(export "__wbindgen_exn_store" (func $__wbindgen_exn_store))
1716
(export "__externref_table_alloc" (func $__externref_table_alloc))
1817
(export "__wbindgen_export_2" (table 0))
19-
(export "__wbindgen_add_to_stack_pointer" (func $__wbindgen_add_to_stack_pointer))
2018
(export "__externref_table_dealloc" (func $__externref_table_dealloc))
2119
(export "__wbindgen_start" (func 0))
22-
(@custom "target_features" (after code) "\03+\0fmutable-globals+\08sign-ext+\0freference-types")
20+
(@custom "target_features" (after code) "\04+\0amultivalue+\0fmutable-globals+\0freference-types+\08sign-ext")
2321
)
2422

crates/cli/tests/reference/anyref-nop.wat

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@
88
(export "foo" (func $foo))
99
(export "__wbindgen_export_0" (table 0))
1010
(export "__wbindgen_start" (func 0))
11-
(@custom "target_features" (after code) "\03+\0fmutable-globals+\08sign-ext+\0freference-types")
11+
(@custom "target_features" (after code) "\04+\0amultivalue+\0fmutable-globals+\0freference-types+\08sign-ext")
1212
)
1313

crates/cli/tests/reference/builder.wat

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
(export "memory" (memory 0))
88
(export "__wbg_classbuilder_free" (func $__wbg_classbuilder_free))
99
(export "classbuilder_builder" (func $classbuilder_builder))
10-
(@custom "target_features" (after code) "\02+\0fmutable-globals+\08sign-ext")
10+
(@custom "target_features" (after code) "\04+\0amultivalue+\0fmutable-globals+\0freference-types+\08sign-ext")
1111
)
1212

crates/cli/tests/reference/constructor.wat

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
(export "memory" (memory 0))
88
(export "__wbg_classconstructor_free" (func $__wbg_classconstructor_free))
99
(export "classconstructor_new" (func $classconstructor_new))
10-
(@custom "target_features" (after code) "\02+\0fmutable-globals+\08sign-ext")
10+
(@custom "target_features" (after code) "\04+\0amultivalue+\0fmutable-globals+\0freference-types+\08sign-ext")
1111
)
1212

crates/cli/tests/reference/empty.wat

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
(module $reference_test.wasm
22
(memory (;0;) 16)
33
(export "memory" (memory 0))
4-
(@custom "target_features" (after export) "\02+\0fmutable-globals+\08sign-ext")
4+
(@custom "target_features" (after export) "\04+\0amultivalue+\0fmutable-globals+\0freference-types+\08sign-ext")
55
)
66

crates/cli/tests/reference/enums.wat

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
(export "option_enum_echo" (func $option_enum_echo))
1111
(export "get_name" (func $get_name))
1212
(export "option_string_enum_echo" (func $option_string_enum_echo))
13-
(@custom "target_features" (after code) "\02+\0fmutable-globals+\08sign-ext")
13+
(@custom "target_features" (after code) "\04+\0amultivalue+\0fmutable-globals+\0freference-types+\08sign-ext")
1414
)
1515

crates/cli/tests/reference/getter-setter.js

+9-39
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,6 @@ function getStringFromWasm0(ptr, len) {
2424
return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
2525
}
2626

27-
let cachedDataViewMemory0 = null;
28-
29-
function getDataViewMemory0() {
30-
if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
31-
cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
32-
}
33-
return cachedDataViewMemory0;
34-
}
35-
3627
function isLikeNone(x) {
3728
return x === undefined || x === null;
3829
}
@@ -129,61 +120,40 @@ export class Foo {
129120
* @returns {number | undefined}
130121
*/
131122
get y() {
132-
try {
133-
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
134-
wasm.__wbg_get_foo_y(retptr, this.__wbg_ptr);
135-
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
136-
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
137-
return r0 === 0 ? undefined : r1 >>> 0;
138-
} finally {
139-
wasm.__wbindgen_add_to_stack_pointer(16);
140-
}
123+
const ret = wasm.__wbg_get_foo_y(this.__wbg_ptr);
124+
return ret === 0x100000001 ? undefined : ret;
141125
}
142126
/**
143127
* @param {number | undefined} [arg0]
144128
*/
145129
set y(arg0) {
146-
wasm.__wbg_set_foo_y(this.__wbg_ptr, !isLikeNone(arg0), isLikeNone(arg0) ? 0 : arg0);
130+
wasm.__wbg_set_foo_y(this.__wbg_ptr, isLikeNone(arg0) ? 0x100000001 : (arg0) >>> 0);
147131
}
148132
/**
149133
* @returns {number | undefined}
150134
*/
151135
get z() {
152-
try {
153-
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
154-
wasm.foo_z(retptr, this.__wbg_ptr);
155-
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
156-
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
157-
return r0 === 0 ? undefined : r1 >>> 0;
158-
} finally {
159-
wasm.__wbindgen_add_to_stack_pointer(16);
160-
}
136+
const ret = wasm.foo_z(this.__wbg_ptr);
137+
return ret === 0x100000001 ? undefined : ret;
161138
}
162139
/**
163140
* @param {number | undefined} [z]
164141
*/
165142
set z(z) {
166-
wasm.foo_set_z(this.__wbg_ptr, !isLikeNone(z), isLikeNone(z) ? 0 : z);
143+
wasm.foo_set_z(this.__wbg_ptr, isLikeNone(z) ? 0x100000001 : (z) >>> 0);
167144
}
168145
/**
169146
* @returns {number | undefined}
170147
*/
171148
get lone_getter() {
172-
try {
173-
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
174-
wasm.foo_lone_getter(retptr, this.__wbg_ptr);
175-
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
176-
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
177-
return r0 === 0 ? undefined : r1 >>> 0;
178-
} finally {
179-
wasm.__wbindgen_add_to_stack_pointer(16);
180-
}
149+
const ret = wasm.foo_lone_getter(this.__wbg_ptr);
150+
return ret === 0x100000001 ? undefined : ret;
181151
}
182152
/**
183153
* @param {number | undefined} [value]
184154
*/
185155
set lone_setter(value) {
186-
wasm.foo_set_lone_setter(this.__wbg_ptr, !isLikeNone(value), isLikeNone(value) ? 0 : value);
156+
wasm.foo_set_lone_setter(this.__wbg_ptr, isLikeNone(value) ? 0x100000001 : (value) >>> 0);
187157
}
188158
/**
189159
* You will only read numbers.

crates/cli/tests/reference/getter-setter.wat

+19-19
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,27 @@
22
(type (;0;) (func (result i32)))
33
(type (;1;) (func (param i32)))
44
(type (;2;) (func (param i32) (result i32)))
5-
(type (;3;) (func (param i32 i32)))
6-
(type (;4;) (func (param i32 i32) (result i32)))
7-
(type (;5;) (func (param i32 i32 i32)))
8-
(type (;6;) (func (param i32 i32 i32 i32) (result i32)))
9-
(func $__wbindgen_realloc (;0;) (type 6) (param i32 i32 i32 i32) (result i32))
10-
(func $__wbindgen_malloc (;1;) (type 4) (param i32 i32) (result i32))
11-
(func $__wbg_set_foo_y (;2;) (type 5) (param i32 i32 i32))
12-
(func $__wbg_get_foo_y (;3;) (type 3) (param i32 i32))
13-
(func $foo_z (;4;) (type 3) (param i32 i32))
14-
(func $foo_lone_getter (;5;) (type 3) (param i32 i32))
15-
(func $foo_set_weird (;6;) (type 5) (param i32 i32 i32))
16-
(func $foo_set_z (;7;) (type 5) (param i32 i32 i32))
17-
(func $foo_set_lone_setter (;8;) (type 5) (param i32 i32 i32))
18-
(func $__wbg_get_foo_x (;9;) (type 2) (param i32) (result i32))
19-
(func $__wbg_set_foo_x (;10;) (type 3) (param i32 i32))
5+
(type (;3;) (func (param i32) (result f64)))
6+
(type (;4;) (func (param i32 i32)))
7+
(type (;5;) (func (param i32 i32) (result i32)))
8+
(type (;6;) (func (param i32 i32 i32)))
9+
(type (;7;) (func (param i32 i32 i32 i32) (result i32)))
10+
(type (;8;) (func (param i32 f64)))
11+
(func $__wbindgen_realloc (;0;) (type 7) (param i32 i32 i32 i32) (result i32))
12+
(func $__wbindgen_malloc (;1;) (type 5) (param i32 i32) (result i32))
13+
(func $foo_set_weird (;2;) (type 6) (param i32 i32 i32))
14+
(func $__wbg_set_foo_y (;3;) (type 8) (param i32 f64))
15+
(func $__wbg_get_foo_y (;4;) (type 3) (param i32) (result f64))
16+
(func $__wbg_get_foo_x (;5;) (type 2) (param i32) (result i32))
17+
(func $foo_set_z (;6;) (type 8) (param i32 f64))
18+
(func $foo_set_lone_setter (;7;) (type 8) (param i32 f64))
19+
(func $foo_z (;8;) (type 3) (param i32) (result f64))
20+
(func $foo_lone_getter (;9;) (type 3) (param i32) (result f64))
21+
(func $__wbg_set_foo_x (;10;) (type 4) (param i32 i32))
2022
(func $foo_weird (;11;) (type 2) (param i32) (result i32))
2123
(func $foo_x_static (;12;) (type 0) (result i32))
22-
(func $__wbg_foo_free (;13;) (type 3) (param i32 i32))
24+
(func $__wbg_foo_free (;13;) (type 4) (param i32 i32))
2325
(func $foo_set_x_static (;14;) (type 1) (param i32))
24-
(func $__wbindgen_add_to_stack_pointer (;15;) (type 2) (param i32) (result i32))
2526
(memory (;0;) 17)
2627
(export "memory" (memory 0))
2728
(export "__wbg_foo_free" (func $__wbg_foo_free))
@@ -37,9 +38,8 @@
3738
(export "foo_set_weird" (func $foo_set_weird))
3839
(export "foo_x_static" (func $foo_x_static))
3940
(export "foo_set_x_static" (func $foo_set_x_static))
40-
(export "__wbindgen_add_to_stack_pointer" (func $__wbindgen_add_to_stack_pointer))
4141
(export "__wbindgen_malloc" (func $__wbindgen_malloc))
4242
(export "__wbindgen_realloc" (func $__wbindgen_realloc))
43-
(@custom "target_features" (after code) "\02+\0fmutable-globals+\08sign-ext")
43+
(@custom "target_features" (after code) "\04+\0amultivalue+\0fmutable-globals+\0freference-types+\08sign-ext")
4444
)
4545

crates/cli/tests/reference/import-catch.js

+3-19
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,6 @@ function handleError(f, args) {
2727
}
2828
}
2929

30-
let cachedDataViewMemory0 = null;
31-
32-
function getDataViewMemory0() {
33-
if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
34-
cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
35-
}
36-
return cachedDataViewMemory0;
37-
}
38-
3930
function getObject(idx) { return heap[idx]; }
4031

4132
function dropObject(idx) {
@@ -51,16 +42,9 @@ function takeObject(idx) {
5142
}
5243

5344
export function exported() {
54-
try {
55-
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
56-
wasm.exported(retptr);
57-
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
58-
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
59-
if (r1) {
60-
throw takeObject(r0);
61-
}
62-
} finally {
63-
wasm.__wbindgen_add_to_stack_pointer(16);
45+
const ret = wasm.exported();
46+
if (ret[1]) {
47+
throw takeObject(ret[0]);
6448
}
6549
}
6650

+6-8
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
(module $reference_test.wasm
2-
(type (;0;) (func (param i32)))
3-
(type (;1;) (func (param i32) (result i32)))
4-
(func $exported (;0;) (type 0) (param i32))
5-
(func $__wbindgen_exn_store (;1;) (type 0) (param i32))
6-
(func $__wbindgen_add_to_stack_pointer (;2;) (type 1) (param i32) (result i32))
2+
(type (;0;) (func (result i32 i32)))
3+
(type (;1;) (func (param i32)))
4+
(func $__wbindgen_exn_store (;0;) (type 1) (param i32))
5+
(func $"exported multivalue shim" (;1;) (type 0) (result i32 i32))
76
(memory (;0;) 17)
87
(export "memory" (memory 0))
9-
(export "exported" (func $exported))
8+
(export "exported" (func $"exported multivalue shim"))
109
(export "__wbindgen_exn_store" (func $__wbindgen_exn_store))
11-
(export "__wbindgen_add_to_stack_pointer" (func $__wbindgen_add_to_stack_pointer))
12-
(@custom "target_features" (after code) "\02+\0fmutable-globals+\08sign-ext")
10+
(@custom "target_features" (after code) "\04+\0amultivalue+\0fmutable-globals+\0freference-types+\08sign-ext")
1311
)
1412

crates/cli/tests/reference/nop.wat

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
(memory (;0;) 17)
55
(export "memory" (memory 0))
66
(export "nop" (func $nop))
7-
(@custom "target_features" (after code) "\02+\0fmutable-globals+\08sign-ext")
7+
(@custom "target_features" (after code) "\04+\0amultivalue+\0fmutable-globals+\0freference-types+\08sign-ext")
88
)
99

crates/cli/tests/reference/pointers.wat

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
(export "memory" (memory 0))
77
(export "const_pointer" (func $const_pointer))
88
(export "mut_pointer" (func $mut_pointer))
9-
(@custom "target_features" (after code) "\02+\0fmutable-globals+\08sign-ext")
9+
(@custom "target_features" (after code) "\04+\0amultivalue+\0fmutable-globals+\0freference-types+\08sign-ext")
1010
)
1111

crates/cli/tests/reference/raw.wat

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@
1111
(export "__wbg_test_free" (func $__wbg_test_free))
1212
(export "test_test1" (func $test_test1))
1313
(export "test_test2" (func $test_test2))
14-
(@custom "target_features" (after code) "\02+\0fmutable-globals+\08sign-ext")
14+
(@custom "target_features" (after code) "\04+\0amultivalue+\0fmutable-globals+\0freference-types+\08sign-ext")
1515
)
1616

0 commit comments

Comments
 (0)