Skip to content

Commit 03c850b

Browse files
author
Zoltan Herczeg
committed
Implement return_call_ref, ref.as_non_null, br_on_[non_]null instructions
1 parent 8440624 commit 03c850b

34 files changed

+1179
-612
lines changed

include/wabt/binary-reader-logging.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,8 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
174174
Result OnBlockExpr(Type sig_type) override;
175175
Result OnBrExpr(Index depth) override;
176176
Result OnBrIfExpr(Index depth) override;
177+
Result OnBrOnNonNullExpr(Index depth) override;
178+
Result OnBrOnNullExpr(Index depth) override;
177179
Result OnBrTableExpr(Index num_targets,
178180
Index* target_depths,
179181
Index default_target_depth) override;
@@ -218,12 +220,14 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
218220
Result OnTableGrowExpr(Index table) override;
219221
Result OnTableSizeExpr(Index table) override;
220222
Result OnTableFillExpr(Index table) override;
223+
Result OnRefAsNonNullExpr() override;
221224
Result OnRefFuncExpr(Index index) override;
222225
Result OnRefNullExpr(Type type) override;
223226
Result OnRefIsNullExpr() override;
224227
Result OnNopExpr() override;
225228
Result OnRethrowExpr(Index depth) override;
226229
Result OnReturnCallExpr(Index func_index) override;
230+
Result OnReturnCallRefExpr(Type sig_type) override;
227231
Result OnReturnCallIndirectExpr(Index sig_index, Index table_index) override;
228232
Result OnReturnExpr() override;
229233
Result OnSelectExpr(Index result_count, Type* result_types) override;

include/wabt/binary-reader-nop.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,8 @@ class BinaryReaderNop : public BinaryReaderDelegate {
241241
Result OnBlockExpr(Type sig_type) override { return Result::Ok; }
242242
Result OnBrExpr(Index depth) override { return Result::Ok; }
243243
Result OnBrIfExpr(Index depth) override { return Result::Ok; }
244+
Result OnBrOnNonNullExpr(Index depth) override { return Result::Ok; }
245+
Result OnBrOnNullExpr(Index depth) override { return Result::Ok; }
244246
Result OnBrTableExpr(Index num_targets,
245247
Index* target_depths,
246248
Index default_target_depth) override {
@@ -299,6 +301,7 @@ class BinaryReaderNop : public BinaryReaderDelegate {
299301
Result OnTableGrowExpr(Index table_index) override { return Result::Ok; }
300302
Result OnTableSizeExpr(Index table_index) override { return Result::Ok; }
301303
Result OnTableFillExpr(Index table_index) override { return Result::Ok; }
304+
Result OnRefAsNonNullExpr() override { return Result::Ok; }
302305
Result OnRefFuncExpr(Index func_index) override { return Result::Ok; }
303306
Result OnRefNullExpr(Type type) override { return Result::Ok; }
304307
Result OnRefIsNullExpr() override { return Result::Ok; }
@@ -308,6 +311,7 @@ class BinaryReaderNop : public BinaryReaderDelegate {
308311
Result OnReturnCallIndirectExpr(Index sig_index, Index table_index) override {
309312
return Result::Ok;
310313
}
314+
Result OnReturnCallRefExpr(Type sig_type) override { return Result::Ok; }
311315
Result OnReturnExpr() override { return Result::Ok; }
312316
Result OnSelectExpr(Index result_count, Type* result_types) override {
313317
return Result::Ok;

include/wabt/binary-reader.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,8 @@ class BinaryReaderDelegate {
250250
virtual Result OnBlockExpr(Type sig_type) = 0;
251251
virtual Result OnBrExpr(Index depth) = 0;
252252
virtual Result OnBrIfExpr(Index depth) = 0;
253+
virtual Result OnBrOnNonNullExpr(Index depth) = 0;
254+
virtual Result OnBrOnNullExpr(Index depth) = 0;
253255
virtual Result OnBrTableExpr(Index num_targets,
254256
Index* target_depths,
255257
Index default_target_depth) = 0;
@@ -294,6 +296,7 @@ class BinaryReaderDelegate {
294296
virtual Result OnTableGrowExpr(Index table_index) = 0;
295297
virtual Result OnTableSizeExpr(Index table_index) = 0;
296298
virtual Result OnTableFillExpr(Index table_index) = 0;
299+
virtual Result OnRefAsNonNullExpr() = 0;
297300
virtual Result OnRefFuncExpr(Index func_index) = 0;
298301
virtual Result OnRefNullExpr(Type type) = 0;
299302
virtual Result OnRefIsNullExpr() = 0;
@@ -303,6 +306,7 @@ class BinaryReaderDelegate {
303306
virtual Result OnReturnCallExpr(Index func_index) = 0;
304307
virtual Result OnReturnCallIndirectExpr(Index sig_index,
305308
Index table_index) = 0;
309+
virtual Result OnReturnCallRefExpr(Type sig_type) = 0;
306310
virtual Result OnSelectExpr(Index result_count, Type* result_types) = 0;
307311
virtual Result OnStoreExpr(Opcode opcode,
308312
Index memidx,

include/wabt/expr-visitor.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ class ExprVisitor::Delegate {
7373
virtual Result EndBlockExpr(BlockExpr*) = 0;
7474
virtual Result OnBrExpr(BrExpr*) = 0;
7575
virtual Result OnBrIfExpr(BrIfExpr*) = 0;
76+
virtual Result OnBrOnNonNullExpr(BrOnNonNullExpr*) = 0;
77+
virtual Result OnBrOnNullExpr(BrOnNullExpr*) = 0;
7678
virtual Result OnBrTableExpr(BrTableExpr*) = 0;
7779
virtual Result BeginTryTableExpr(TryTableExpr*) = 0;
7880
virtual Result EndTryTableExpr(TryTableExpr*) = 0;
@@ -109,13 +111,15 @@ class ExprVisitor::Delegate {
109111
virtual Result OnTableGrowExpr(TableGrowExpr*) = 0;
110112
virtual Result OnTableSizeExpr(TableSizeExpr*) = 0;
111113
virtual Result OnTableFillExpr(TableFillExpr*) = 0;
114+
virtual Result OnRefAsNonNullExpr(RefAsNonNullExpr*) = 0;
112115
virtual Result OnRefFuncExpr(RefFuncExpr*) = 0;
113116
virtual Result OnRefNullExpr(RefNullExpr*) = 0;
114117
virtual Result OnRefIsNullExpr(RefIsNullExpr*) = 0;
115118
virtual Result OnNopExpr(NopExpr*) = 0;
116119
virtual Result OnReturnExpr(ReturnExpr*) = 0;
117120
virtual Result OnReturnCallExpr(ReturnCallExpr*) = 0;
118121
virtual Result OnReturnCallIndirectExpr(ReturnCallIndirectExpr*) = 0;
122+
virtual Result OnReturnCallRefExpr(ReturnCallRefExpr*) = 0;
119123
virtual Result OnSelectExpr(SelectExpr*) = 0;
120124
virtual Result OnStoreExpr(StoreExpr*) = 0;
121125
virtual Result OnUnaryExpr(UnaryExpr*) = 0;
@@ -150,6 +154,8 @@ class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
150154
Result EndBlockExpr(BlockExpr*) override { return Result::Ok; }
151155
Result OnBrExpr(BrExpr*) override { return Result::Ok; }
152156
Result OnBrIfExpr(BrIfExpr*) override { return Result::Ok; }
157+
Result OnBrOnNonNullExpr(BrOnNonNullExpr*) override { return Result::Ok; };
158+
Result OnBrOnNullExpr(BrOnNullExpr*) override { return Result::Ok; };
153159
Result OnBrTableExpr(BrTableExpr*) override { return Result::Ok; }
154160
Result BeginTryTableExpr(TryTableExpr*) override { return Result::Ok; }
155161
Result EndTryTableExpr(TryTableExpr*) override { return Result::Ok; }
@@ -186,6 +192,7 @@ class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
186192
Result OnTableGrowExpr(TableGrowExpr*) override { return Result::Ok; }
187193
Result OnTableSizeExpr(TableSizeExpr*) override { return Result::Ok; }
188194
Result OnTableFillExpr(TableFillExpr*) override { return Result::Ok; }
195+
Result OnRefAsNonNullExpr(RefAsNonNullExpr*) override { return Result::Ok; }
189196
Result OnRefFuncExpr(RefFuncExpr*) override { return Result::Ok; }
190197
Result OnRefNullExpr(RefNullExpr*) override { return Result::Ok; }
191198
Result OnRefIsNullExpr(RefIsNullExpr*) override { return Result::Ok; }
@@ -195,6 +202,7 @@ class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
195202
Result OnReturnCallIndirectExpr(ReturnCallIndirectExpr*) override {
196203
return Result::Ok;
197204
}
205+
Result OnReturnCallRefExpr(ReturnCallRefExpr*) override { return Result::Ok; }
198206
Result OnSelectExpr(SelectExpr*) override { return Result::Ok; }
199207
Result OnStoreExpr(StoreExpr*) override { return Result::Ok; }
200208
Result OnUnaryExpr(UnaryExpr*) override { return Result::Ok; }

include/wabt/ir.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,8 @@ enum class ExprType {
392392
Block,
393393
Br,
394394
BrIf,
395+
BrOnNonNull,
396+
BrOnNull,
395397
BrTable,
396398
Call,
397399
CallIndirect,
@@ -416,13 +418,15 @@ enum class ExprType {
416418
MemoryInit,
417419
MemorySize,
418420
Nop,
421+
RefAsNonNull,
419422
RefIsNull,
420423
RefFunc,
421424
RefNull,
422425
Rethrow,
423426
Return,
424427
ReturnCall,
425428
ReturnCallIndirect,
429+
ReturnCallRef,
426430
Select,
427431
SimdLaneOp,
428432
SimdLoadLane,
@@ -586,6 +590,7 @@ using CompareExpr = OpcodeExpr<ExprType::Compare>;
586590
using ConvertExpr = OpcodeExpr<ExprType::Convert>;
587591
using UnaryExpr = OpcodeExpr<ExprType::Unary>;
588592
using TernaryExpr = OpcodeExpr<ExprType::Ternary>;
593+
using RefAsNonNullExpr = OpcodeExpr<ExprType::RefAsNonNull>;
589594

590595
class SimdLaneOpExpr : public ExprMixin<ExprType::SimdLaneOp> {
591596
public:
@@ -665,6 +670,8 @@ class MemoryVarExpr : public MemoryExpr<TypeEnum> {
665670

666671
using BrExpr = VarExpr<ExprType::Br>;
667672
using BrIfExpr = VarExpr<ExprType::BrIf>;
673+
using BrOnNonNullExpr = VarExpr<ExprType::BrOnNonNull>;
674+
using BrOnNullExpr = VarExpr<ExprType::BrOnNull>;
668675
using CallExpr = VarExpr<ExprType::Call>;
669676
using RefFuncExpr = VarExpr<ExprType::RefFunc>;
670677
using GlobalGetExpr = VarExpr<ExprType::GlobalGet>;
@@ -756,6 +763,14 @@ class CallRefExpr : public ExprMixin<ExprType::CallRef> {
756763
Var sig_type;
757764
};
758765

766+
class ReturnCallRefExpr : public ExprMixin<ExprType::ReturnCallRef> {
767+
public:
768+
explicit ReturnCallRefExpr(const Location& loc = Location())
769+
: ExprMixin<ExprType::ReturnCallRef>(loc) {}
770+
771+
Var sig_type;
772+
};
773+
759774
template <ExprType TypeEnum>
760775
class BlockExprBase : public ExprMixin<TypeEnum> {
761776
public:

include/wabt/opcode.def

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x11, CallIndirect, "call_indirect
5656
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x12, ReturnCall, "return_call", "")
5757
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x13, ReturnCallIndirect, "return_call_indirect", "")
5858
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x14, CallRef, "call_ref", "")
59+
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x15, ReturnCallRef, "return_call_ref", "")
5960
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x18, Delegate, "delegate", "")
6061
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x19, CatchAll, "catch_all", "")
6162
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x1a, Drop, "drop", "")
@@ -267,6 +268,9 @@ WABT_OPCODE(___, I32, ___, I32, 0, 0xfc, 0x11, TableFill, "table.fill", "")
267268
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0xd0, RefNull, "ref.null", "")
268269
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0xd1, RefIsNull, "ref.is_null", "")
269270
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0xd2, RefFunc, "ref.func", "")
271+
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0xd4, RefAsNonNull, "ref.as_non_null", "")
272+
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0xd5, BrOnNull, "br_on_null", "")
273+
WABT_OPCODE(___, ___, ___, ___, 0, 0, 0xd6, BrOnNonNull, "br_on_non_null", "")
270274

271275
/* Simd opcodes */
272276
WABT_OPCODE(V128, I32, ___, ___, 16, 0xfd, 0x00, V128Load, "v128.load", "")

include/wabt/shared-validator.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,8 @@ class SharedValidator {
137137
Result OnBlock(const Location&, Type sig_type);
138138
Result OnBr(const Location&, Var depth);
139139
Result OnBrIf(const Location&, Var depth);
140+
Result OnBrOnNonNull(const Location&, Var depth);
141+
Result OnBrOnNull(const Location&, Var depth);
140142
Result BeginBrTable(const Location&);
141143
Result OnBrTableTarget(const Location&, Var depth);
142144
Result EndBrTable(const Location&);
@@ -177,12 +179,14 @@ class SharedValidator {
177179
Result OnMemoryInit(const Location&, Var segment_var, Var memidx);
178180
Result OnMemorySize(const Location&, Var memidx);
179181
Result OnNop(const Location&);
182+
Result OnRefAsNonNull(const Location&);
180183
Result OnRefFunc(const Location&, Var func_var);
181184
Result OnRefIsNull(const Location&);
182185
Result OnRefNull(const Location&, Var func_type_var);
183186
Result OnRethrow(const Location&, Var depth);
184187
Result OnReturnCall(const Location&, Var func_var);
185188
Result OnReturnCallIndirect(const Location&, Var sig_var, Var table_var);
189+
Result OnReturnCallRef(const Location&, Var function_type_var);
186190
Result OnReturn(const Location&);
187191
Result OnSelect(const Location&, Index result_count, Type* result_types);
188192
Result OnSimdLaneOp(const Location&, Opcode, uint64_t lane_idx);

include/wabt/token.def

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,14 @@ WABT_TOKEN(Binary, "BINARY")
9999
WABT_TOKEN(Block, "block")
100100
WABT_TOKEN(Br, "br")
101101
WABT_TOKEN(BrIf, "br_if")
102+
WABT_TOKEN(BrOnNonNull, "br_on_non_null")
103+
WABT_TOKEN(BrOnNull, "br_on_null")
102104
WABT_TOKEN(BrTable, "br_table")
103105
WABT_TOKEN(Code, "code")
104106
WABT_TOKEN(Call, "call")
105107
WABT_TOKEN(CallIndirect, "call_indirect")
106108
WABT_TOKEN(CallRef, "call_ref")
109+
WABT_TOKEN(ReturnCallRef, "return_call_ref")
107110
WABT_TOKEN(Catch, "catch")
108111
WABT_TOKEN(CatchAll, "catch_all")
109112
WABT_TOKEN(CatchRef, "catch_ref")
@@ -130,6 +133,7 @@ WABT_TOKEN(MemoryGrow, "memory.grow")
130133
WABT_TOKEN(MemoryInit, "memory.init")
131134
WABT_TOKEN(MemorySize, "memory.size")
132135
WABT_TOKEN(Nop, "nop")
136+
WABT_TOKEN(RefAsNonNull, "ref.as_non_null")
133137
WABT_TOKEN(RefExtern, "ref.extern")
134138
WABT_TOKEN(RefFunc, "ref.func")
135139
WABT_TOKEN(RefIsNull, "ref.is_null")

include/wabt/type-checker.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ class TypeChecker {
8888
Result OnBlock(const TypeVector& param_types, const TypeVector& result_types);
8989
Result OnBr(Index depth);
9090
Result OnBrIf(Index depth);
91+
Result OnBrOnNonNull(Index depth);
92+
Result OnBrOnNull(Index depth);
9193
Result BeginBrTable();
9294
Result OnBrTableTarget(Index depth);
9395
Result EndBrTable();
@@ -100,6 +102,7 @@ class TypeChecker {
100102
const TypeVector& result_types);
101103
Result OnReturnCallIndirect(const TypeVector& param_types,
102104
const TypeVector& result_types);
105+
Result OnReturnCallRef(Type);
103106
Result OnCatch(const TypeVector& sig);
104107
Result OnCompare(Opcode);
105108
Result OnConst(Type);
@@ -130,6 +133,7 @@ class TypeChecker {
130133
Result OnTableGrow(Type elem_type, const Limits& limits);
131134
Result OnTableSize(const Limits& limits);
132135
Result OnTableFill(Type elem_type, const Limits& limits);
136+
Result OnRefAsNonNullExpr();
133137
Result OnRefFuncExpr(Index func_type, bool force_generic_funcref);
134138
Result OnRefNullExpr(Type type);
135139
Result OnRefIsNullExpr();
@@ -193,6 +197,7 @@ class TypeChecker {
193197
Type expected2,
194198
Type expected3,
195199
const char* desc);
200+
Result PopAndCheckReference(Type* actual, const char* desc);
196201
Result CheckOpcode1(Opcode opcode, const Limits* limits = nullptr);
197202
Result CheckOpcode2(Opcode opcode, const Limits* limits = nullptr);
198203
Result CheckOpcode3(Opcode opcode,

src/apply-names.cc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ class NameApplier : public ExprVisitor::DelegateNop {
4040
Result EndBlockExpr(BlockExpr*) override;
4141
Result OnBrExpr(BrExpr*) override;
4242
Result OnBrIfExpr(BrIfExpr*) override;
43+
Result OnBrOnNonNullExpr(BrOnNonNullExpr*) override;
44+
Result OnBrOnNullExpr(BrOnNullExpr*) override;
4345
Result OnBrTableExpr(BrTableExpr*) override;
4446
Result OnCallExpr(CallExpr*) override;
4547
Result OnRefFuncExpr(RefFuncExpr*) override;
@@ -350,6 +352,18 @@ Result NameApplier::OnBrIfExpr(BrIfExpr* expr) {
350352
return Result::Ok;
351353
}
352354

355+
Result NameApplier::OnBrOnNonNullExpr(BrOnNonNullExpr* expr) {
356+
std::string_view label = FindLabelByVar(&expr->var);
357+
UseNameForVar(label, &expr->var);
358+
return Result::Ok;
359+
}
360+
361+
Result NameApplier::OnBrOnNullExpr(BrOnNullExpr* expr) {
362+
std::string_view label = FindLabelByVar(&expr->var);
363+
UseNameForVar(label, &expr->var);
364+
return Result::Ok;
365+
}
366+
353367
Result NameApplier::OnBrTableExpr(BrTableExpr* expr) {
354368
for (Var& target : expr->targets) {
355369
std::string_view label = FindLabelByVar(&target);

src/binary-reader-ir.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,8 @@ class BinaryReaderIR : public BinaryReaderNop {
200200
Result OnBlockExpr(Type sig_type) override;
201201
Result OnBrExpr(Index depth) override;
202202
Result OnBrIfExpr(Index depth) override;
203+
Result OnBrOnNonNullExpr(Index depth) override;
204+
Result OnBrOnNullExpr(Index depth) override;
203205
Result OnBrTableExpr(Index num_targets,
204206
Index* target_depths,
205207
Index default_target_depth) override;
@@ -210,6 +212,7 @@ class BinaryReaderIR : public BinaryReaderNop {
210212
Result OnCallRefExpr(Type sig_type) override;
211213
Result OnReturnCallExpr(Index func_index) override;
212214
Result OnReturnCallIndirectExpr(Index sig_index, Index table_index) override;
215+
Result OnReturnCallRefExpr(Type sig_type) override;
213216
Result OnCompareExpr(Opcode opcode) override;
214217
Result OnConvertExpr(Opcode opcode) override;
215218
Result OnDelegateExpr(Index depth) override;
@@ -246,6 +249,7 @@ class BinaryReaderIR : public BinaryReaderNop {
246249
Result OnTableGrowExpr(Index table_index) override;
247250
Result OnTableSizeExpr(Index table_index) override;
248251
Result OnTableFillExpr(Index table_index) override;
252+
Result OnRefAsNonNullExpr() override;
249253
Result OnRefFuncExpr(Index func_index) override;
250254
Result OnRefNullExpr(Type type) override;
251255
Result OnRefIsNullExpr() override;
@@ -897,6 +901,15 @@ Result BinaryReaderIR::OnBrIfExpr(Index depth) {
897901
return AppendExpr(std::make_unique<BrIfExpr>(Var(depth, GetLocation())));
898902
}
899903

904+
Result BinaryReaderIR::OnBrOnNonNullExpr(Index depth) {
905+
return AppendExpr(
906+
std::make_unique<BrOnNonNullExpr>(Var(depth, GetLocation())));
907+
}
908+
909+
Result BinaryReaderIR::OnBrOnNullExpr(Index depth) {
910+
return AppendExpr(std::make_unique<BrOnNullExpr>(Var(depth, GetLocation())));
911+
}
912+
900913
Result BinaryReaderIR::OnBrTableExpr(Index num_targets,
901914
Index* target_depths,
902915
Index default_target_depth) {
@@ -953,6 +966,12 @@ Result BinaryReaderIR::OnReturnCallIndirectExpr(Index sig_index,
953966
return AppendExpr(std::move(expr));
954967
}
955968

969+
Result BinaryReaderIR::OnReturnCallRefExpr(Type sig_type) {
970+
auto expr = std::make_unique<ReturnCallRefExpr>();
971+
expr->sig_type = Var(sig_type, GetLocation());
972+
return AppendExpr(std::move(expr));
973+
}
974+
956975
Result BinaryReaderIR::OnCompareExpr(Opcode opcode) {
957976
return AppendExpr(std::make_unique<CompareExpr>(opcode));
958977
}
@@ -1147,6 +1166,11 @@ Result BinaryReaderIR::OnTableFillExpr(Index table_index) {
11471166
std::make_unique<TableFillExpr>(Var(table_index, GetLocation())));
11481167
}
11491168

1169+
Result BinaryReaderIR::OnRefAsNonNullExpr() {
1170+
return AppendExpr(
1171+
std::make_unique<RefAsNonNullExpr>(Opcode::RefAsNonNull, GetLocation()));
1172+
}
1173+
11501174
Result BinaryReaderIR::OnRefFuncExpr(Index func_index) {
11511175
module_->used_func_refs.insert(func_index);
11521176
return AppendExpr(

0 commit comments

Comments
 (0)