diff options
Diffstat (limited to 'src/apply-names.cc')
-rw-r--r-- | src/apply-names.cc | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/src/apply-names.cc b/src/apply-names.cc index 7262131e..c2dabe40 100644 --- a/src/apply-names.cc +++ b/src/apply-names.cc @@ -35,15 +35,22 @@ typedef Label* LabelPtr; WABT_DEFINE_VECTOR(label_ptr, LabelPtr); struct Context { - Module* module; - Func* current_func; + Context(); + + Module* module = nullptr; + Func* current_func = nullptr; ExprVisitor visitor; /* mapping from param index to its name, if any, for the current func */ - StringSliceVector param_index_to_name; - StringSliceVector local_index_to_name; + std::vector<std::string> param_index_to_name; + std::vector<std::string> local_index_to_name; LabelPtrVector labels; }; +Context::Context() { + WABT_ZERO_MEMORY(visitor); + WABT_ZERO_MEMORY(labels); +} + void push_label(Context* ctx, Label* label) { append_label_ptr_value(&ctx->labels, &label); } @@ -126,26 +133,26 @@ Result use_name_for_param_and_local_var(Context* ctx, Func* func, Var* var) { return Result::Error; uint32_t num_params = get_num_params(func); - StringSlice* name; + std::string* name; if (static_cast<uint32_t>(local_index) < num_params) { /* param */ - assert(static_cast<size_t>(local_index) < ctx->param_index_to_name.size); - name = &ctx->param_index_to_name.data[local_index]; + assert(static_cast<size_t>(local_index) < ctx->param_index_to_name.size()); + name = &ctx->param_index_to_name[local_index]; } else { /* local */ local_index -= num_params; - assert(static_cast<size_t>(local_index) < ctx->local_index_to_name.size); - name = &ctx->local_index_to_name.data[local_index]; + assert(static_cast<size_t>(local_index) < ctx->local_index_to_name.size()); + name = &ctx->local_index_to_name[local_index]; } if (var->type == VarType::Name) { - assert(string_slices_are_equal(name, &var->name)); + assert(*name == string_slice_to_string(var->name)); return Result::Ok; } - if (name->start) { + if (!name->empty()) { var->type = VarType::Name; - var->name = dup_string_slice(*name); + var->name = dup_string_slice(string_to_string_slice(*name)); return var->name.start ? Result::Ok : Result::Error; } return Result::Ok; @@ -267,11 +274,11 @@ Result visit_func(Context* ctx, uint32_t func_index, Func* func) { CHECK_RESULT(use_name_for_func_type_var(ctx->module, &func->decl.type_var)); } - make_type_binding_reverse_mapping(&func->decl.sig.param_types, - &func->param_bindings, + make_type_binding_reverse_mapping(func->decl.sig.param_types, + func->param_bindings, &ctx->param_index_to_name); - make_type_binding_reverse_mapping(&func->local_types, &func->local_bindings, + make_type_binding_reverse_mapping(func->local_types, func->local_bindings, &ctx->local_index_to_name); CHECK_RESULT(visit_func(func, &ctx->visitor)); @@ -319,7 +326,6 @@ Result visit_module(Context* ctx, Module* module) { Result apply_names(Module* module) { Context ctx; - WABT_ZERO_MEMORY(ctx); ctx.module = module; ctx.visitor.user_data = &ctx; ctx.visitor.begin_block_expr = begin_block_expr; @@ -339,8 +345,6 @@ Result apply_names(Module* module) { ctx.visitor.on_set_local_expr = on_set_local_expr; ctx.visitor.on_tee_local_expr = on_tee_local_expr; Result result = visit_module(&ctx, module); - destroy_string_slice_vector(&ctx.param_index_to_name); - destroy_string_slice_vector(&ctx.local_index_to_name); destroy_label_ptr_vector(&ctx.labels); return result; } |