@@ -42,6 +42,8 @@ class NameApplier : public ExprVisitor::DelegateNop {
4242 Result OnBrTableExpr (BrTableExpr*) override ;
4343 Result OnCallExpr (CallExpr*) override ;
4444 Result OnCallIndirectExpr (CallIndirectExpr*) override ;
45+ Result OnReturnCallExpr (ReturnCallExpr*) override ;
46+ Result OnReturnCallIndirectExpr (ReturnCallIndirectExpr*) override ;
4547 Result OnGetGlobalExpr (GetGlobalExpr*) override ;
4648 Result OnGetLocalExpr (GetLocalExpr*) override ;
4749 Result BeginIfExpr (IfExpr*) override ;
@@ -50,8 +52,12 @@ class NameApplier : public ExprVisitor::DelegateNop {
5052 Result EndIfExceptExpr (IfExceptExpr*) override ;
5153 Result BeginLoopExpr (LoopExpr*) override ;
5254 Result EndLoopExpr (LoopExpr*) override ;
55+ Result OnMemoryDropExpr (MemoryDropExpr*) override ;
56+ Result OnMemoryInitExpr (MemoryInitExpr*) override ;
5357 Result OnSetGlobalExpr (SetGlobalExpr*) override ;
5458 Result OnSetLocalExpr (SetLocalExpr*) override ;
59+ Result OnTableDropExpr (TableDropExpr*) override ;
60+ Result OnTableInitExpr (TableInitExpr*) override ;
5561 Result OnTeeLocalExpr (TeeLocalExpr*) override ;
5662 Result BeginTryExpr (TryExpr*) override ;
5763 Result EndTryExpr (TryExpr*) override ;
@@ -68,6 +74,8 @@ class NameApplier : public ExprVisitor::DelegateNop {
6874 Result UseNameForTableVar (Var* var);
6975 Result UseNameForMemoryVar (Var* var);
7076 Result UseNameForExceptVar (Var* var);
77+ Result UseNameForDataSegmentVar (Var* var);
78+ Result UseNameForElemSegmentVar (Var* var);
7179 Result UseNameForParamAndLocalVar (Func* func, Var* var);
7280 Result VisitFunc (Index func_index, Func* func);
7381 Result VisitGlobal (Global* global);
@@ -78,9 +86,7 @@ class NameApplier : public ExprVisitor::DelegateNop {
7886 Module* module_ = nullptr ;
7987 Func* current_func_ = nullptr ;
8088 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_;
8490 std::vector<std::string> labels_;
8591};
8692
@@ -176,32 +182,38 @@ Result NameApplier::UseNameForExceptVar(Var* var) {
176182 return Result::Ok;
177183}
178184
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+
179203Result NameApplier::UseNameForParamAndLocalVar (Func* func, Var* var) {
180204 Index local_index = func->GetLocalIndex (*var);
181205 if (local_index >= func->GetNumParamsAndLocals ()) {
182206 return Result::Error;
183207 }
184208
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];
198210 if (var->is_name ()) {
199- assert (* name == var->name ());
211+ assert (name == var->name ());
200212 return Result::Ok;
201213 }
202214
203- if (!name-> empty ()) {
204- var->set_name (* name);
215+ if (!name. empty ()) {
216+ var->set_name (name);
205217 }
206218 return Result::Ok;
207219}
@@ -226,6 +238,26 @@ Result NameApplier::EndLoopExpr(LoopExpr* expr) {
226238 return Result::Ok;
227239}
228240
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+
229261Result NameApplier::OnBrExpr (BrExpr* expr) {
230262 string_view label = FindLabelByVar (&expr->var );
231263 UseNameForVar (label, &expr->var );
@@ -276,6 +308,18 @@ Result NameApplier::OnCallIndirectExpr(CallIndirectExpr* expr) {
276308 return Result::Ok;
277309}
278310
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+
279323Result NameApplier::OnGetGlobalExpr (GetGlobalExpr* expr) {
280324 CHECK_RESULT (UseNameForGlobalVar (&expr->var ));
281325 return Result::Ok;
@@ -328,11 +372,8 @@ Result NameApplier::VisitFunc(Index func_index, Func* func) {
328372 CHECK_RESULT (UseNameForFuncTypeVar (&func->decl .type_var ));
329373 }
330374
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_);
336377
337378 CHECK_RESULT (visitor_.VisitFunc (func));
338379 current_func_ = nullptr ;
0 commit comments