@@ -42,6 +42,8 @@ class NameApplier : public ExprVisitor::DelegateNop {
42
42
Result OnBrTableExpr (BrTableExpr*) override ;
43
43
Result OnCallExpr (CallExpr*) override ;
44
44
Result OnCallIndirectExpr (CallIndirectExpr*) override ;
45
+ Result OnReturnCallExpr (ReturnCallExpr*) override ;
46
+ Result OnReturnCallIndirectExpr (ReturnCallIndirectExpr*) override ;
45
47
Result OnGetGlobalExpr (GetGlobalExpr*) override ;
46
48
Result OnGetLocalExpr (GetLocalExpr*) override ;
47
49
Result BeginIfExpr (IfExpr*) override ;
@@ -50,8 +52,12 @@ class NameApplier : public ExprVisitor::DelegateNop {
50
52
Result EndIfExceptExpr (IfExceptExpr*) override ;
51
53
Result BeginLoopExpr (LoopExpr*) override ;
52
54
Result EndLoopExpr (LoopExpr*) override ;
55
+ Result OnMemoryDropExpr (MemoryDropExpr*) override ;
56
+ Result OnMemoryInitExpr (MemoryInitExpr*) override ;
53
57
Result OnSetGlobalExpr (SetGlobalExpr*) override ;
54
58
Result OnSetLocalExpr (SetLocalExpr*) override ;
59
+ Result OnTableDropExpr (TableDropExpr*) override ;
60
+ Result OnTableInitExpr (TableInitExpr*) override ;
55
61
Result OnTeeLocalExpr (TeeLocalExpr*) override ;
56
62
Result BeginTryExpr (TryExpr*) override ;
57
63
Result EndTryExpr (TryExpr*) override ;
@@ -68,6 +74,8 @@ class NameApplier : public ExprVisitor::DelegateNop {
68
74
Result UseNameForTableVar (Var* var);
69
75
Result UseNameForMemoryVar (Var* var);
70
76
Result UseNameForExceptVar (Var* var);
77
+ Result UseNameForDataSegmentVar (Var* var);
78
+ Result UseNameForElemSegmentVar (Var* var);
71
79
Result UseNameForParamAndLocalVar (Func* func, Var* var);
72
80
Result VisitFunc (Index func_index, Func* func);
73
81
Result VisitGlobal (Global* global);
@@ -78,9 +86,7 @@ class NameApplier : public ExprVisitor::DelegateNop {
78
86
Module* module_ = nullptr ;
79
87
Func* current_func_ = nullptr ;
80
88
ExprVisitor visitor_;
81
- /* mapping from param index to its name, if any, for the current func */
82
- std::vector<std::string> param_index_to_name_;
83
- std::vector<std::string> local_index_to_name_;
89
+ std::vector<std::string> param_and_local_index_to_name_;
84
90
std::vector<std::string> labels_;
85
91
};
86
92
@@ -176,32 +182,38 @@ Result NameApplier::UseNameForExceptVar(Var* var) {
176
182
return Result::Ok;
177
183
}
178
184
185
+ Result NameApplier::UseNameForDataSegmentVar (Var* var) {
186
+ DataSegment* data_segment = module_->GetDataSegment (*var);
187
+ if (!data_segment) {
188
+ return Result::Error;
189
+ }
190
+ UseNameForVar (data_segment->name , var);
191
+ return Result::Ok;
192
+ }
193
+
194
+ Result NameApplier::UseNameForElemSegmentVar (Var* var) {
195
+ ElemSegment* elem_segment = module_->GetElemSegment (*var);
196
+ if (!elem_segment) {
197
+ return Result::Error;
198
+ }
199
+ UseNameForVar (elem_segment->name , var);
200
+ return Result::Ok;
201
+ }
202
+
179
203
Result NameApplier::UseNameForParamAndLocalVar (Func* func, Var* var) {
180
204
Index local_index = func->GetLocalIndex (*var);
181
205
if (local_index >= func->GetNumParamsAndLocals ()) {
182
206
return Result::Error;
183
207
}
184
208
185
- Index num_params = func->GetNumParams ();
186
- std::string* name;
187
- if (local_index < num_params) {
188
- /* param */
189
- assert (local_index < param_index_to_name_.size ());
190
- name = ¶m_index_to_name_[local_index];
191
- } else {
192
- /* local */
193
- local_index -= num_params;
194
- assert (local_index < local_index_to_name_.size ());
195
- name = &local_index_to_name_[local_index];
196
- }
197
-
209
+ std::string name = param_and_local_index_to_name_[local_index];
198
210
if (var->is_name ()) {
199
- assert (* name == var->name ());
211
+ assert (name == var->name ());
200
212
return Result::Ok;
201
213
}
202
214
203
- if (!name-> empty ()) {
204
- var->set_name (* name);
215
+ if (!name. empty ()) {
216
+ var->set_name (name);
205
217
}
206
218
return Result::Ok;
207
219
}
@@ -226,6 +238,26 @@ Result NameApplier::EndLoopExpr(LoopExpr* expr) {
226
238
return Result::Ok;
227
239
}
228
240
241
+ Result NameApplier::OnMemoryDropExpr (MemoryDropExpr* expr) {
242
+ CHECK_RESULT (UseNameForDataSegmentVar (&expr->var ));
243
+ return Result::Ok;
244
+ }
245
+
246
+ Result NameApplier::OnMemoryInitExpr (MemoryInitExpr* expr) {
247
+ CHECK_RESULT (UseNameForDataSegmentVar (&expr->var ));
248
+ return Result::Ok;
249
+ }
250
+
251
+ Result NameApplier::OnTableDropExpr (TableDropExpr* expr) {
252
+ CHECK_RESULT (UseNameForElemSegmentVar (&expr->var ));
253
+ return Result::Ok;
254
+ }
255
+
256
+ Result NameApplier::OnTableInitExpr (TableInitExpr* expr) {
257
+ CHECK_RESULT (UseNameForElemSegmentVar (&expr->var ));
258
+ return Result::Ok;
259
+ }
260
+
229
261
Result NameApplier::OnBrExpr (BrExpr* expr) {
230
262
string_view label = FindLabelByVar (&expr->var );
231
263
UseNameForVar (label, &expr->var );
@@ -276,6 +308,18 @@ Result NameApplier::OnCallIndirectExpr(CallIndirectExpr* expr) {
276
308
return Result::Ok;
277
309
}
278
310
311
+ Result NameApplier::OnReturnCallExpr (ReturnCallExpr* expr) {
312
+ CHECK_RESULT (UseNameForFuncVar (&expr->var ));
313
+ return Result::Ok;
314
+ }
315
+
316
+ Result NameApplier::OnReturnCallIndirectExpr (ReturnCallIndirectExpr* expr) {
317
+ if (expr->decl .has_func_type ) {
318
+ CHECK_RESULT (UseNameForFuncTypeVar (&expr->decl .type_var ));
319
+ }
320
+ return Result::Ok;
321
+ }
322
+
279
323
Result NameApplier::OnGetGlobalExpr (GetGlobalExpr* expr) {
280
324
CHECK_RESULT (UseNameForGlobalVar (&expr->var ));
281
325
return Result::Ok;
@@ -328,11 +372,8 @@ Result NameApplier::VisitFunc(Index func_index, Func* func) {
328
372
CHECK_RESULT (UseNameForFuncTypeVar (&func->decl .type_var ));
329
373
}
330
374
331
- MakeTypeBindingReverseMapping (func->decl .sig .param_types .size (),
332
- func->param_bindings , ¶m_index_to_name_);
333
-
334
- MakeTypeBindingReverseMapping (func->local_types .size (), func->local_bindings ,
335
- &local_index_to_name_);
375
+ MakeTypeBindingReverseMapping (func->GetNumParamsAndLocals (), func->bindings ,
376
+ ¶m_and_local_index_to_name_);
336
377
337
378
CHECK_RESULT (visitor_.VisitFunc (func));
338
379
current_func_ = nullptr ;
0 commit comments