Skip to content

Commit 60e6028

Browse files
authored
Remove externref (#4633)
Remove `Type::externref` and `HeapType::ext` and replace them with uses of anyref and any, respectively, now that we have unified these types in the GC proposal. For backwards compatibility, continue to parse `extern` and `externref` and maintain their relevant C API functions.
1 parent 737f65a commit 60e6028

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+415
-591
lines changed

scripts/wasm2js.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,6 @@ var asmLibraryArg = {
124124
console.log('get_f64 ' + [loc, index, value]);
125125
return value;
126126
},
127-
get_externref: function(loc, index, value) {
128-
console.log('get_externref ' + [loc, index, value]);
129-
return value;
130-
},
131127
set_i32: function(loc, index, value) {
132128
console.log('set_i32 ' + [loc, index, value]);
133129
return value;
@@ -145,10 +141,6 @@ var asmLibraryArg = {
145141
console.log('set_f64 ' + [loc, index, value]);
146142
return value;
147143
},
148-
set_externref: function(loc, index, value) {
149-
console.log('set_externref ' + [loc, index, value]);
150-
return value;
151-
},
152144
load_ptr: function(loc, bytes, offset, ptr) {
153145
console.log('load_ptr ' + [loc, bytes, offset, ptr]);
154146
return ptr;

src/asmjs/asm_v_wasm.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ JsType wasmToJsType(Type type) {
3434
case Type::v128:
3535
WASM_UNREACHABLE("v128 not implemented yet");
3636
case Type::funcref:
37-
case Type::externref:
3837
case Type::anyref:
3938
case Type::eqref:
4039
case Type::i31ref:
@@ -63,8 +62,6 @@ char getSig(Type type) {
6362
return 'V';
6463
case Type::funcref:
6564
return 'F';
66-
case Type::externref:
67-
return 'X';
6865
case Type::anyref:
6966
return 'A';
7067
case Type::eqref:

src/binaryen-c.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ BinaryenLiteral toBinaryenLiteral(Literal x) {
7070
case Type::funcref:
7171
ret.func = x.isNull() ? nullptr : x.getFunc().c_str();
7272
break;
73-
case Type::externref:
7473
case Type::anyref:
7574
case Type::eqref:
7675
assert(x.isNull() && "unexpected non-null reference type literal");
@@ -100,7 +99,6 @@ Literal fromBinaryenLiteral(BinaryenLiteral x) {
10099
return Literal(x.v128);
101100
case Type::funcref:
102101
return Literal::makeFunc(x.func);
103-
case Type::externref:
104102
case Type::anyref:
105103
case Type::eqref:
106104
return Literal::makeNull(Type(x.type));
@@ -132,6 +130,7 @@ extern "C" {
132130
//
133131

134132
// Core types
133+
// TODO: Deprecate BinaryenTypeExternref?
135134

136135
BinaryenType BinaryenTypeNone(void) { return Type::none; }
137136
BinaryenType BinaryenTypeInt32(void) { return Type::i32; }
@@ -140,7 +139,7 @@ BinaryenType BinaryenTypeFloat32(void) { return Type::f32; }
140139
BinaryenType BinaryenTypeFloat64(void) { return Type::f64; }
141140
BinaryenType BinaryenTypeVec128(void) { return Type::v128; }
142141
BinaryenType BinaryenTypeFuncref(void) { return Type::funcref; }
143-
BinaryenType BinaryenTypeExternref(void) { return Type::externref; }
142+
BinaryenType BinaryenTypeExternref(void) { return Type::anyref; }
144143
BinaryenType BinaryenTypeAnyref(void) { return Type::anyref; }
145144
BinaryenType BinaryenTypeEqref(void) { return Type::eqref; }
146145
BinaryenType BinaryenTypeI31ref(void) { return Type::i31ref; }

src/ir/abstract.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ inline UnaryOp getUnary(Type type, Op op) {
122122
}
123123
case Type::v128:
124124
case Type::funcref:
125-
case Type::externref:
126125
case Type::anyref:
127126
case Type::eqref:
128127
case Type::i31ref:
@@ -295,7 +294,6 @@ inline BinaryOp getBinary(Type type, Op op) {
295294
}
296295
case Type::v128:
297296
case Type::funcref:
298-
case Type::externref:
299297
case Type::anyref:
300298
case Type::eqref:
301299
case Type::i31ref:

src/literal.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ class Literal {
6363
// To support the experimental RttFreshSub instruction, we not only store
6464
// the type, but also a reference to an allocation.
6565
std::unique_ptr<RttSupers> rttSupers;
66-
// TODO: Literals of type `externref` can only be `null` currently but we
67-
// will need to represent extern values eventually, to
66+
// TODO: Literals of type `anyref` can only be `null` currently but we
67+
// will need to represent external values eventually, to
6868
// 1) run the spec tests and fuzzer with reference types enabled and
6969
// 2) avoid bailing out when seeing a reference typed value in precompute
7070
};
@@ -765,8 +765,7 @@ template<> struct hash<wasm::Literal> {
765765
return digest;
766766
}
767767
// other non-null reference type literals cannot represent concrete
768-
// values, i.e. there is no concrete externref, anyref or eqref other than
769-
// null.
768+
// values, i.e. there is no concrete anyref or eqref other than null.
770769
WASM_UNREACHABLE("unexpected type");
771770
};
772771
if (a.type.isBasic()) {
@@ -790,7 +789,6 @@ template<> struct hash<wasm::Literal> {
790789
wasm::rehash(digest, chunks[1]);
791790
return digest;
792791
case wasm::Type::funcref:
793-
case wasm::Type::externref:
794792
case wasm::Type::anyref:
795793
case wasm::Type::eqref:
796794
case wasm::Type::dataref:

src/passes/ConstHoisting.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ struct ConstHoisting : public WalkerPass<PostWalker<ConstHoisting>> {
9292
// not implemented yet
9393
case Type::v128:
9494
case Type::funcref:
95-
case Type::externref:
9695
case Type::anyref:
9796
case Type::eqref:
9897
case Type::i31ref:

src/passes/FuncCastEmulation.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ static Expression* toABI(Expression* value, Module* module) {
6363
WASM_UNREACHABLE("v128 not implemented yet");
6464
}
6565
case Type::funcref:
66-
case Type::externref:
6766
case Type::anyref:
6867
case Type::eqref:
6968
case Type::i31ref:
@@ -109,7 +108,6 @@ static Expression* fromABI(Expression* value, Type type, Module* module) {
109108
WASM_UNREACHABLE("v128 not implemented yet");
110109
}
111110
case Type::funcref:
112-
case Type::externref:
113111
case Type::anyref:
114112
case Type::eqref:
115113
case Type::i31ref:

src/passes/InstrumentLocals.cpp

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ Name get_f32("get_f32");
5757
Name get_f64("get_f64");
5858
Name get_v128("get_v128");
5959
Name get_funcref("get_funcref");
60-
Name get_externref("get_externref");
6160
Name get_anyref("get_anyref");
6261
Name get_eqref("get_eqref");
6362
Name get_i31ref("get_i31ref");
@@ -69,7 +68,6 @@ Name set_f32("set_f32");
6968
Name set_f64("set_f64");
7069
Name set_v128("set_v128");
7170
Name set_funcref("set_funcref");
72-
Name set_externref("set_externref");
7371
Name set_anyref("set_anyref");
7472
Name set_eqref("set_eqref");
7573
Name set_i31ref("set_i31ref");
@@ -98,9 +96,6 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> {
9896
case Type::funcref:
9997
import = get_funcref;
10098
break;
101-
case Type::externref:
102-
import = get_externref;
103-
break;
10499
case Type::anyref:
105100
import = get_anyref;
106101
break;
@@ -158,9 +153,6 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> {
158153
case Type::funcref:
159154
import = set_funcref;
160155
break;
161-
case Type::externref:
162-
import = set_externref;
163-
break;
164156
case Type::anyref:
165157
import = set_anyref;
166158
break;
@@ -204,19 +196,11 @@ struct InstrumentLocals : public WalkerPass<PostWalker<InstrumentLocals>> {
204196
set_funcref,
205197
{Type::i32, Type::i32, Type::funcref},
206198
Type::funcref);
207-
addImport(curr,
208-
get_externref,
209-
{Type::i32, Type::i32, Type::externref},
210-
Type::externref);
211-
addImport(curr,
212-
set_externref,
213-
{Type::i32, Type::i32, Type::externref},
214-
Type::externref);
199+
addImport(
200+
curr, get_anyref, {Type::i32, Type::i32, Type::anyref}, Type::anyref);
201+
addImport(
202+
curr, set_anyref, {Type::i32, Type::i32, Type::anyref}, Type::anyref);
215203
if (curr->features.hasGC()) {
216-
addImport(
217-
curr, get_anyref, {Type::i32, Type::i32, Type::anyref}, Type::anyref);
218-
addImport(
219-
curr, set_anyref, {Type::i32, Type::i32, Type::anyref}, Type::anyref);
220204
addImport(
221205
curr, get_eqref, {Type::i32, Type::i32, Type::eqref}, Type::eqref);
222206
addImport(

src/tools/fuzzing/fuzzing.cpp

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ TranslateToFuzzReader::TranslateToFuzzReader(Module& wasm,
3232
: wasm(wasm), builder(wasm), random(std::move(input), wasm.features) {
3333
// - funcref cannot be logged because referenced functions can be inlined or
3434
// removed during optimization
35-
// - there's no point in logging externref or anyref because these are opaque
35+
// - there's no point in logging anyref because it is opaque
3636
// - don't bother logging tuples
3737
loggableTypes = {Type::i32, Type::i64, Type::f32, Type::f64};
3838
if (wasm.features.hasSIMD()) {
@@ -1460,7 +1460,6 @@ Expression* TranslateToFuzzReader::makeNonAtomicLoad(Type type) {
14601460
16, false, offset, pick(1, 2, 4, 8, 16), ptr, type);
14611461
}
14621462
case Type::funcref:
1463-
case Type::externref:
14641463
case Type::anyref:
14651464
case Type::eqref:
14661465
case Type::i31ref:
@@ -1564,7 +1563,6 @@ Expression* TranslateToFuzzReader::makeNonAtomicStore(Type type) {
15641563
16, offset, pick(1, 2, 4, 8, 16), ptr, value, type);
15651564
}
15661565
case Type::funcref:
1567-
case Type::externref:
15681566
case Type::anyref:
15691567
case Type::eqref:
15701568
case Type::i31ref:
@@ -1700,7 +1698,6 @@ Literal TranslateToFuzzReader::makeLiteral(Type type) {
17001698
return Literal(getDouble());
17011699
case Type::v128:
17021700
case Type::funcref:
1703-
case Type::externref:
17041701
case Type::anyref:
17051702
case Type::eqref:
17061703
case Type::i31ref:
@@ -1747,7 +1744,6 @@ Literal TranslateToFuzzReader::makeLiteral(Type type) {
17471744
return Literal(double(small));
17481745
case Type::v128:
17491746
case Type::funcref:
1750-
case Type::externref:
17511747
case Type::anyref:
17521748
case Type::eqref:
17531749
case Type::i31ref:
@@ -1817,7 +1813,6 @@ Literal TranslateToFuzzReader::makeLiteral(Type type) {
18171813
break;
18181814
case Type::v128:
18191815
case Type::funcref:
1820-
case Type::externref:
18211816
case Type::anyref:
18221817
case Type::eqref:
18231818
case Type::i31ref:
@@ -1846,7 +1841,6 @@ Literal TranslateToFuzzReader::makeLiteral(Type type) {
18461841
break;
18471842
case Type::v128:
18481843
case Type::funcref:
1849-
case Type::externref:
18501844
case Type::anyref:
18511845
case Type::eqref:
18521846
case Type::i31ref:
@@ -1919,9 +1913,6 @@ Expression* TranslateToFuzzReader::makeConst(Type type) {
19191913
switch (heapType.getBasic()) {
19201914
case HeapType::func:
19211915
return makeRefFuncConst(type);
1922-
case HeapType::ext:
1923-
// No trivial way to create an externref.
1924-
break;
19251916
case HeapType::any: {
19261917
// Choose a subtype we can materialize a constant for. We cannot
19271918
// materialize non-nullable refs to func or i31 in global contexts.
@@ -2067,7 +2058,6 @@ Expression* TranslateToFuzzReader::makeUnary(Type type) {
20672058
make(Type::v128)});
20682059
}
20692060
case Type::funcref:
2070-
case Type::externref:
20712061
case Type::anyref:
20722062
case Type::eqref:
20732063
case Type::i31ref:
@@ -2208,7 +2198,6 @@ Expression* TranslateToFuzzReader::makeUnary(Type type) {
22082198
WASM_UNREACHABLE("invalid value");
22092199
}
22102200
case Type::funcref:
2211-
case Type::externref:
22122201
case Type::anyref:
22132202
case Type::eqref:
22142203
case Type::i31ref:
@@ -2447,7 +2436,6 @@ Expression* TranslateToFuzzReader::makeBinary(Type type) {
24472436
make(Type::v128)});
24482437
}
24492438
case Type::funcref:
2450-
case Type::externref:
24512439
case Type::anyref:
24522440
case Type::eqref:
24532441
case Type::i31ref:
@@ -2655,7 +2643,6 @@ Expression* TranslateToFuzzReader::makeSIMDExtract(Type type) {
26552643
break;
26562644
case Type::v128:
26572645
case Type::funcref:
2658-
case Type::externref:
26592646
case Type::anyref:
26602647
case Type::eqref:
26612648
case Type::i31ref:
@@ -2913,12 +2900,10 @@ Type TranslateToFuzzReader::getSingleConcreteType() {
29132900
WeightedOption{Type::f32, VeryImportant},
29142901
WeightedOption{Type::f64, VeryImportant})
29152902
.add(FeatureSet::SIMD, WeightedOption{Type::v128, Important})
2916-
.add(FeatureSet::ReferenceTypes, Type::funcref, Type::externref)
2903+
.add(FeatureSet::ReferenceTypes, Type::funcref, Type::anyref)
29172904
.add(FeatureSet::ReferenceTypes | FeatureSet::GC,
29182905
// Type(HeapType::func, NonNullable),
2919-
// Type(HeapType::ext, NonNullable),
2920-
Type(HeapType::any, Nullable),
2921-
Type(HeapType::any, NonNullable),
2906+
// Type(HeapType::any, NonNullable),
29222907
Type(HeapType::eq, Nullable),
29232908
Type(HeapType::eq, NonNullable),
29242909
Type(HeapType::i31, Nullable),
@@ -2929,11 +2914,9 @@ Type TranslateToFuzzReader::getSingleConcreteType() {
29292914

29302915
Type TranslateToFuzzReader::getReferenceType() {
29312916
return pick(FeatureOptions<Type>()
2932-
.add(FeatureSet::ReferenceTypes, Type::funcref, Type::externref)
2917+
.add(FeatureSet::ReferenceTypes, Type::funcref, Type::anyref)
29332918
.add(FeatureSet::ReferenceTypes | FeatureSet::GC,
29342919
Type(HeapType::func, NonNullable),
2935-
Type(HeapType::ext, NonNullable),
2936-
Type(HeapType::any, Nullable),
29372920
Type(HeapType::any, NonNullable),
29382921
Type(HeapType::eq, Nullable),
29392922
Type(HeapType::eq, NonNullable),
@@ -3016,12 +2999,9 @@ HeapType TranslateToFuzzReader::getSubType(HeapType type) {
30162999
case HeapType::func:
30173000
// TODO: Typed function references.
30183001
return HeapType::func;
3019-
case HeapType::ext:
3020-
return HeapType::ext;
30213002
case HeapType::any:
30223003
// TODO: nontrivial types as well.
30233004
return pick(HeapType::func,
3024-
HeapType::ext,
30253005
HeapType::any,
30263006
HeapType::eq,
30273007
HeapType::i31,

src/tools/fuzzing/heap-types.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,6 @@ struct HeapTypeGeneratorImpl {
153153

154154
HeapType::BasicHeapType generateBasicHeapType() {
155155
return rand.pick(HeapType::func,
156-
HeapType::ext,
157156
HeapType::any,
158157
HeapType::eq,
159158
HeapType::i31,
@@ -167,7 +166,6 @@ struct HeapTypeGeneratorImpl {
167166
.add(FeatureSet::SIMD, Type::v128)
168167
.add(FeatureSet::ReferenceTypes | FeatureSet::GC,
169168
Type::funcref,
170-
Type::externref,
171169
Type::anyref,
172170
Type::eqref,
173171
Type::i31ref,
@@ -294,7 +292,6 @@ struct HeapTypeGeneratorImpl {
294292
return type;
295293
} else {
296294
switch (type) {
297-
case HeapType::ext:
298295
case HeapType::i31:
299296
// No other subtypes.
300297
return type;
@@ -385,8 +382,6 @@ struct HeapTypeGeneratorImpl {
385382
switch (type.getBasic()) {
386383
case HeapType::func:
387384
return pickSubFunc();
388-
case HeapType::ext:
389-
return HeapType::ext;
390385
case HeapType::any:
391386
return pickSubAny();
392387
case HeapType::eq:
@@ -496,7 +491,6 @@ struct HeapTypeGeneratorImpl {
496491
switch (*basic) {
497492
case HeapType::func:
498493
return SignatureKind{};
499-
case HeapType::ext:
500494
case HeapType::i31:
501495
return super;
502496
case HeapType::any:

0 commit comments

Comments
 (0)