Skip to content

Commit d8184ba

Browse files
authored
Code improvements for call ref and br_on_[non_]null (#2663)
This is just a small set of changes which should follow #2567.
1 parent 8be9a01 commit d8184ba

File tree

7 files changed

+125
-115
lines changed

7 files changed

+125
-115
lines changed

include/wabt/type-checker.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,16 @@ class TypeChecker {
9797
Result OnCallIndirect(const TypeVector& param_types,
9898
const TypeVector& result_types,
9999
const Limits& table_limits);
100-
Result OnCallRef(Type);
100+
Result OnCallRef(Type type,
101+
const TypeVector& param_types,
102+
const TypeVector& result_types);
101103
Result OnReturnCall(const TypeVector& param_types,
102104
const TypeVector& result_types);
103105
Result OnReturnCallIndirect(const TypeVector& param_types,
104106
const TypeVector& result_types);
105-
Result OnReturnCallRef(Type);
107+
Result OnReturnCallRef(Type type,
108+
const TypeVector& param_types,
109+
const TypeVector& result_types);
106110
Result OnCatch(const TypeVector& sig);
107111
Result OnCompare(Opcode);
108112
Result OnConst(Type);
@@ -191,6 +195,8 @@ class TypeChecker {
191195
Result PopAndCheckCall(const TypeVector& param_types,
192196
const TypeVector& result_types,
193197
const char* desc);
198+
Result PopAndCheckReturnCall(const TypeVector& result_types,
199+
const char* desc);
194200
Result PopAndCheck1Type(Type expected, const char* desc);
195201
Result PopAndCheck2Types(Type expected1, Type expected2, const char* desc);
196202
Result PopAndCheck3Types(Type expected1,

src/apply-names.cc

Lines changed: 49 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class NameApplier : public ExprVisitor::DelegateNop {
9898
Result UseNameForDataSegmentVar(Var* var);
9999
Result UseNameForElemSegmentVar(Var* var);
100100
Result UseNameForParamAndLocalVar(Func* func, Var* var);
101+
Result UseNameForLabelVar(Var* var);
101102
Result VisitFunc(Index func_index, Func* func);
102103
Result VisitGlobal(Global* global);
103104
Result VisitTag(Tag* tag);
@@ -242,6 +243,12 @@ Result NameApplier::UseNameForParamAndLocalVar(Func* func, Var* var) {
242243
return Result::Ok;
243244
}
244245

246+
Result NameApplier::UseNameForLabelVar(Var* var) {
247+
std::string_view label = FindLabelByVar(var);
248+
UseNameForVar(label, var);
249+
return Result::Ok;
250+
}
251+
245252
Result NameApplier::BeginBlockExpr(BlockExpr* expr) {
246253
PushLabel(expr->block.label);
247254
return Result::Ok;
@@ -263,117 +270,91 @@ Result NameApplier::EndLoopExpr(LoopExpr* expr) {
263270
}
264271

265272
Result NameApplier::OnDataDropExpr(DataDropExpr* expr) {
266-
CHECK_RESULT(UseNameForDataSegmentVar(&expr->var));
267-
return Result::Ok;
273+
return UseNameForDataSegmentVar(&expr->var);
268274
}
269275

270276
Result NameApplier::OnMemoryCopyExpr(MemoryCopyExpr* expr) {
271277
CHECK_RESULT(UseNameForMemoryVar(&expr->destmemidx));
272-
CHECK_RESULT(UseNameForMemoryVar(&expr->srcmemidx));
273-
return Result::Ok;
278+
return UseNameForMemoryVar(&expr->srcmemidx);
274279
}
275280

276281
Result NameApplier::OnMemoryFillExpr(MemoryFillExpr* expr) {
277-
CHECK_RESULT(UseNameForMemoryVar(&expr->memidx));
278-
return Result::Ok;
282+
return UseNameForMemoryVar(&expr->memidx);
279283
}
280284

281285
Result NameApplier::OnMemoryGrowExpr(MemoryGrowExpr* expr) {
282-
CHECK_RESULT(UseNameForMemoryVar(&expr->memidx));
283-
return Result::Ok;
286+
return UseNameForMemoryVar(&expr->memidx);
284287
}
285288

286289
Result NameApplier::OnMemoryInitExpr(MemoryInitExpr* expr) {
287290
CHECK_RESULT(UseNameForDataSegmentVar(&expr->var));
288-
CHECK_RESULT(UseNameForMemoryVar(&expr->memidx));
289-
return Result::Ok;
291+
return UseNameForMemoryVar(&expr->memidx);
290292
}
291293

292294
Result NameApplier::OnMemorySizeExpr(MemorySizeExpr* expr) {
293-
CHECK_RESULT(UseNameForMemoryVar(&expr->memidx));
294-
return Result::Ok;
295+
return UseNameForMemoryVar(&expr->memidx);
295296
}
296297

297298
Result NameApplier::OnElemDropExpr(ElemDropExpr* expr) {
298-
CHECK_RESULT(UseNameForElemSegmentVar(&expr->var));
299-
return Result::Ok;
299+
return UseNameForElemSegmentVar(&expr->var);
300300
}
301301

302302
Result NameApplier::OnTableCopyExpr(TableCopyExpr* expr) {
303303
CHECK_RESULT(UseNameForTableVar(&expr->dst_table));
304-
CHECK_RESULT(UseNameForTableVar(&expr->src_table));
305-
return Result::Ok;
304+
return UseNameForTableVar(&expr->src_table);
306305
}
307306

308307
Result NameApplier::OnTableInitExpr(TableInitExpr* expr) {
309308
CHECK_RESULT(UseNameForElemSegmentVar(&expr->segment_index));
310-
CHECK_RESULT(UseNameForTableVar(&expr->table_index));
311-
return Result::Ok;
309+
return UseNameForTableVar(&expr->table_index);
312310
}
313311

314312
Result NameApplier::OnTableGetExpr(TableGetExpr* expr) {
315-
CHECK_RESULT(UseNameForTableVar(&expr->var));
316-
return Result::Ok;
313+
return UseNameForTableVar(&expr->var);
317314
}
318315

319316
Result NameApplier::OnTableSetExpr(TableSetExpr* expr) {
320-
CHECK_RESULT(UseNameForTableVar(&expr->var));
321-
return Result::Ok;
317+
return UseNameForTableVar(&expr->var);
322318
}
323319

324320
Result NameApplier::OnTableGrowExpr(TableGrowExpr* expr) {
325-
CHECK_RESULT(UseNameForTableVar(&expr->var));
326-
return Result::Ok;
321+
return UseNameForTableVar(&expr->var);
327322
}
328323

329324
Result NameApplier::OnTableSizeExpr(TableSizeExpr* expr) {
330-
CHECK_RESULT(UseNameForTableVar(&expr->var));
331-
return Result::Ok;
325+
return UseNameForTableVar(&expr->var);
332326
}
333327

334328
Result NameApplier::OnTableFillExpr(TableFillExpr* expr) {
335-
CHECK_RESULT(UseNameForTableVar(&expr->var));
336-
return Result::Ok;
329+
return UseNameForTableVar(&expr->var);
337330
}
338331

339332
Result NameApplier::OnStoreExpr(StoreExpr* expr) {
340-
CHECK_RESULT(UseNameForMemoryVar(&expr->memidx));
341-
return Result::Ok;
333+
return UseNameForMemoryVar(&expr->memidx);
342334
}
343335

344336
Result NameApplier::OnBrExpr(BrExpr* expr) {
345-
std::string_view label = FindLabelByVar(&expr->var);
346-
UseNameForVar(label, &expr->var);
347-
return Result::Ok;
337+
return UseNameForLabelVar(&expr->var);
348338
}
349339

350340
Result NameApplier::OnBrIfExpr(BrIfExpr* expr) {
351-
std::string_view label = FindLabelByVar(&expr->var);
352-
UseNameForVar(label, &expr->var);
353-
return Result::Ok;
341+
return UseNameForLabelVar(&expr->var);
354342
}
355343

356344
Result NameApplier::OnBrOnNonNullExpr(BrOnNonNullExpr* expr) {
357-
std::string_view label = FindLabelByVar(&expr->var);
358-
UseNameForVar(label, &expr->var);
359-
return Result::Ok;
345+
return UseNameForLabelVar(&expr->var);
360346
}
361347

362348
Result NameApplier::OnBrOnNullExpr(BrOnNullExpr* expr) {
363-
std::string_view label = FindLabelByVar(&expr->var);
364-
UseNameForVar(label, &expr->var);
365-
return Result::Ok;
349+
return UseNameForLabelVar(&expr->var);
366350
}
367351

368352
Result NameApplier::OnBrTableExpr(BrTableExpr* expr) {
369353
for (Var& target : expr->targets) {
370-
std::string_view label = FindLabelByVar(&target);
371-
UseNameForVar(label, &target);
354+
UseNameForLabelVar(&target);
372355
}
373356

374-
std::string_view label = FindLabelByVar(&expr->default_target);
375-
UseNameForVar(label, &expr->default_target);
376-
return Result::Ok;
357+
return UseNameForLabelVar(&expr->default_target);
377358
}
378359

379360
Result NameApplier::BeginTryExpr(TryExpr* expr) {
@@ -391,8 +372,7 @@ Result NameApplier::BeginTryTableExpr(TryTableExpr* expr) {
391372
if (!catch_.IsCatchAll()) {
392373
CHECK_RESULT(UseNameForTagVar(&catch_.tag));
393374
}
394-
std::string_view label = FindLabelByVar(&catch_.target);
395-
UseNameForVar(label, &catch_.target);
375+
UseNameForLabelVar(&catch_.target);
396376
}
397377
PushLabel(expr->block.label);
398378
return Result::Ok;
@@ -412,61 +392,49 @@ Result NameApplier::OnCatchExpr(TryExpr*, Catch* expr) {
412392

413393
Result NameApplier::OnDelegateExpr(TryExpr* expr) {
414394
PopLabel();
415-
std::string_view label = FindLabelByVar(&expr->delegate_target);
416-
UseNameForVar(label, &expr->delegate_target);
417-
return Result::Ok;
395+
return UseNameForLabelVar(&expr->delegate_target);
418396
}
419397

420398
Result NameApplier::OnThrowExpr(ThrowExpr* expr) {
421-
CHECK_RESULT(UseNameForTagVar(&expr->var));
422-
return Result::Ok;
399+
return UseNameForTagVar(&expr->var);
423400
}
424401

425402
Result NameApplier::OnRethrowExpr(RethrowExpr* expr) {
426-
std::string_view label = FindLabelByVar(&expr->var);
427-
UseNameForVar(label, &expr->var);
428-
return Result::Ok;
403+
return UseNameForLabelVar(&expr->var);
429404
}
430405

431406
Result NameApplier::OnCallExpr(CallExpr* expr) {
432-
CHECK_RESULT(UseNameForFuncVar(&expr->var));
433-
return Result::Ok;
407+
return UseNameForFuncVar(&expr->var);
434408
}
435409

436410
Result NameApplier::OnRefFuncExpr(RefFuncExpr* expr) {
437-
CHECK_RESULT(UseNameForFuncVar(&expr->var));
438-
return Result::Ok;
411+
return UseNameForFuncVar(&expr->var);
439412
}
440413

441414
Result NameApplier::OnCallIndirectExpr(CallIndirectExpr* expr) {
442415
if (expr->decl.has_func_type) {
443416
CHECK_RESULT(UseNameForFuncTypeVar(&expr->decl.type_var));
444417
}
445-
CHECK_RESULT(UseNameForTableVar(&expr->table));
446-
return Result::Ok;
418+
return UseNameForTableVar(&expr->table);
447419
}
448420

449421
Result NameApplier::OnReturnCallExpr(ReturnCallExpr* expr) {
450-
CHECK_RESULT(UseNameForFuncVar(&expr->var));
451-
return Result::Ok;
422+
return UseNameForFuncVar(&expr->var);
452423
}
453424

454425
Result NameApplier::OnReturnCallIndirectExpr(ReturnCallIndirectExpr* expr) {
455426
if (expr->decl.has_func_type) {
456427
CHECK_RESULT(UseNameForFuncTypeVar(&expr->decl.type_var));
457428
}
458-
CHECK_RESULT(UseNameForTableVar(&expr->table));
459-
return Result::Ok;
429+
return UseNameForTableVar(&expr->table);
460430
}
461431

462432
Result NameApplier::OnGlobalGetExpr(GlobalGetExpr* expr) {
463-
CHECK_RESULT(UseNameForGlobalVar(&expr->var));
464-
return Result::Ok;
433+
return UseNameForGlobalVar(&expr->var);
465434
}
466435

467436
Result NameApplier::OnLocalGetExpr(LocalGetExpr* expr) {
468-
CHECK_RESULT(UseNameForParamAndLocalVar(current_func_, &expr->var));
469-
return Result::Ok;
437+
return UseNameForParamAndLocalVar(current_func_, &expr->var);
470438
}
471439

472440
Result NameApplier::BeginIfExpr(IfExpr* expr) {
@@ -480,33 +448,27 @@ Result NameApplier::EndIfExpr(IfExpr* expr) {
480448
}
481449

482450
Result NameApplier::OnLoadExpr(LoadExpr* expr) {
483-
CHECK_RESULT(UseNameForMemoryVar(&expr->memidx));
484-
return Result::Ok;
451+
return UseNameForMemoryVar(&expr->memidx);
485452
}
486453

487454
Result NameApplier::OnGlobalSetExpr(GlobalSetExpr* expr) {
488-
CHECK_RESULT(UseNameForGlobalVar(&expr->var));
489-
return Result::Ok;
455+
return UseNameForGlobalVar(&expr->var);
490456
}
491457

492458
Result NameApplier::OnLocalSetExpr(LocalSetExpr* expr) {
493-
CHECK_RESULT(UseNameForParamAndLocalVar(current_func_, &expr->var));
494-
return Result::Ok;
459+
return UseNameForParamAndLocalVar(current_func_, &expr->var);
495460
}
496461

497462
Result NameApplier::OnLocalTeeExpr(LocalTeeExpr* expr) {
498-
CHECK_RESULT(UseNameForParamAndLocalVar(current_func_, &expr->var));
499-
return Result::Ok;
463+
return UseNameForParamAndLocalVar(current_func_, &expr->var);
500464
}
501465

502466
Result NameApplier::OnSimdLoadLaneExpr(SimdLoadLaneExpr* expr) {
503-
CHECK_RESULT(UseNameForMemoryVar(&expr->memidx));
504-
return Result::Ok;
467+
return UseNameForMemoryVar(&expr->memidx);
505468
}
506469

507470
Result NameApplier::OnSimdStoreLaneExpr(SimdStoreLaneExpr* expr) {
508-
CHECK_RESULT(UseNameForMemoryVar(&expr->memidx));
509-
return Result::Ok;
471+
return UseNameForMemoryVar(&expr->memidx);
510472
}
511473

512474
Result NameApplier::VisitFunc(Index func_index, Func* func) {
@@ -524,8 +486,7 @@ Result NameApplier::VisitFunc(Index func_index, Func* func) {
524486
}
525487

526488
Result NameApplier::VisitGlobal(Global* global) {
527-
CHECK_RESULT(visitor_.VisitExprList(global->init_expr));
528-
return Result::Ok;
489+
return visitor_.VisitExprList(global->init_expr);
529490
}
530491

531492
Result NameApplier::VisitTag(Tag* tag) {
@@ -561,8 +522,7 @@ Result NameApplier::VisitExport(Index export_index, Export* export_) {
561522
}
562523

563524
Result NameApplier::VisitTable(Table* table) {
564-
CHECK_RESULT(visitor_.VisitExprList(table->init_expr));
565-
return Result::Ok;
525+
return visitor_.VisitExprList(table->init_expr);
566526
}
567527

568528
Result NameApplier::VisitElemSegment(Index elem_segment_index,
@@ -581,13 +541,11 @@ Result NameApplier::VisitElemSegment(Index elem_segment_index,
581541
Result NameApplier::VisitDataSegment(Index data_segment_index,
582542
DataSegment* segment) {
583543
CHECK_RESULT(UseNameForMemoryVar(&segment->memory_var));
584-
CHECK_RESULT(visitor_.VisitExprList(segment->offset));
585-
return Result::Ok;
544+
return visitor_.VisitExprList(segment->offset);
586545
}
587546

588547
Result NameApplier::VisitStart(Var* start_var) {
589-
CHECK_RESULT(UseNameForFuncVar(start_var));
590-
return Result::Ok;
548+
return UseNameForFuncVar(start_var);
591549
}
592550

593551
Result NameApplier::VisitModule(Module* module) {

src/shared-validator.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -851,9 +851,9 @@ Result SharedValidator::OnCallIndirect(const Location& loc,
851851
Result SharedValidator::OnCallRef(const Location& loc, Var function_type_var) {
852852
Result result = CheckInstr(Opcode::CallRef, loc);
853853
FuncType func_type;
854-
result |= typechecker_.OnCallRef(function_type_var.to_type());
855854
result |= CheckFuncTypeIndex(function_type_var, &func_type);
856-
result |= typechecker_.OnCall(func_type.params, func_type.results);
855+
result |= typechecker_.OnCallRef(function_type_var.to_type(),
856+
func_type.params, func_type.results);
857857
return result;
858858
}
859859

@@ -1218,9 +1218,9 @@ Result SharedValidator::OnReturnCallRef(const Location& loc,
12181218
Var function_type_var) {
12191219
Result result = CheckInstr(Opcode::ReturnCallRef, loc);
12201220
FuncType func_type;
1221-
result |= typechecker_.OnReturnCallRef(function_type_var.to_type());
12221221
result |= CheckFuncTypeIndex(function_type_var, &func_type);
1223-
result |= typechecker_.OnReturnCall(func_type.params, func_type.results);
1222+
result |= typechecker_.OnReturnCallRef(function_type_var.to_type(),
1223+
func_type.params, func_type.results);
12241224
return result;
12251225
}
12261226

0 commit comments

Comments
 (0)