diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/binary-reader-ir.cc | 6 | ||||
-rw-r--r-- | src/binary-writer.cc | 19 | ||||
-rw-r--r-- | src/wat-writer.cc | 36 |
3 files changed, 40 insertions, 21 deletions
diff --git a/src/binary-reader-ir.cc b/src/binary-reader-ir.cc index f54ee354..3c547dbe 100644 --- a/src/binary-reader-ir.cc +++ b/src/binary-reader-ir.cc @@ -821,7 +821,8 @@ Result BinaryReaderIR::OnFunctionName(Index index, StringSlice name) { module->func_bindings.emplace(string_slice_to_string(name), Binding(index)); Func* func = module->funcs[index]; - func->name = dup_string_slice(name); + func->name = dup_string_slice( + string_to_string_slice(std::string("$") + string_slice_to_string(name))); return Result::Ok; } @@ -883,7 +884,8 @@ Result BinaryReaderIR::OnLocalName(Index func_index, bindings = &func->local_bindings; index = local_index - num_params; } - bindings->emplace(string_slice_to_string(name), Binding(index)); + bindings->emplace(std::string("$") + string_slice_to_string(name), + Binding(index)); return Result::Ok; } diff --git a/src/binary-writer.cc b/src/binary-writer.cc index 051b74cf..bc42543b 100644 --- a/src/binary-writer.cc +++ b/src/binary-writer.cc @@ -156,6 +156,18 @@ void write_limits(Stream* stream, const Limits* limits) { write_u32_leb128(stream, limits->max, "limits: max"); } +void write_debug_name(Stream* stream, + StringSlice name, + const char* desc) { + if (name.length > 0) { + // Strip leading $ from name + assert(*name.start == '$'); + name.start++; + name.length--; + } + write_str(stream, name.start, name.length, desc, PrintChars::Yes); +} + namespace { /* TODO(binji): better leb size guess. Some sections we know will only be 1 @@ -886,8 +898,7 @@ Result BinaryWriter::WriteModule(const Module* module) { continue; write_u32_leb128(&stream_, i, "function index"); wabt_snprintf(desc, sizeof(desc), "func name %" PRIzd, i); - write_str(&stream_, func->name.start, func->name.length, desc, - PrintChars::Yes); + write_debug_name(&stream_, func->name, desc); } EndSubsection(); } @@ -911,7 +922,7 @@ Result BinaryWriter::WriteModule(const Module* module) { const std::string& name = index_to_name[j]; wabt_snprintf(desc, sizeof(desc), "local name %" PRIzd, j); write_u32_leb128(&stream_, j, "local index"); - write_str(&stream_, name.data(), name.length(), desc, PrintChars::Yes); + write_debug_name(&stream_, string_to_string_slice(name), desc); } make_type_binding_reverse_mapping(func->local_types, func->local_bindings, @@ -920,7 +931,7 @@ Result BinaryWriter::WriteModule(const Module* module) { const std::string& name = index_to_name[j]; wabt_snprintf(desc, sizeof(desc), "local name %" PRIzd, num_params + j); write_u32_leb128(&stream_, num_params + j, "local index"); - write_str(&stream_, name.data(), name.length(), desc, PrintChars::Yes); + write_debug_name(&stream_, string_to_string_slice(name), desc); } } EndSubsection(); diff --git a/src/wat-writer.cc b/src/wat-writer.cc index d7b0dff2..9e2e40bb 100644 --- a/src/wat-writer.cc +++ b/src/wat-writer.cc @@ -84,9 +84,10 @@ class WatWriter { void WriteString(const std::string& str, NextChar next_char); void WriteStringSlice(const StringSlice* str, NextChar next_char); bool WriteStringSliceOpt(const StringSlice* str, NextChar next_char); - void WriteStringSliceOrIndex(const StringSlice* str, - Index index, - NextChar next_char); + void WriteName(const StringSlice* str, NextChar next_char); + void WriteNameOrIndex(const StringSlice* str, + Index index, + NextChar next_char); void WriteQuotedData(const void* data, size_t length); void WriteQuotedStringSlice(const StringSlice* str, NextChar next_char); void WriteVar(const Var* var, NextChar next_char); @@ -257,11 +258,17 @@ bool WatWriter::WriteStringSliceOpt(const StringSlice* str, return !!str->start; } -void WatWriter::WriteStringSliceOrIndex(const StringSlice* str, - Index index, - NextChar next_char) { +void WatWriter::WriteName(const StringSlice* str, NextChar next_char) { + // Debug names must begin with a $ for for wast file to be valid + assert(str->length > 0 && str->start[0] == '$'); + WriteStringSlice(str, next_char); +} + +void WatWriter::WriteNameOrIndex(const StringSlice* str, + Index index, + NextChar next_char) { if (str->start) - WriteStringSlice(str, next_char); + WriteName(str, next_char); else Writef("(;%u;)", index); } @@ -296,7 +303,7 @@ void WatWriter::WriteVar(const Var* var, NextChar next_char) { Writef("%" PRIindex, var->index); next_char_ = next_char; } else { - WriteStringSlice(&var->name, next_char); + WriteName(&var->name, next_char); } } @@ -597,7 +604,7 @@ void WatWriter::WriteTypeBindings(const char* prefix, void WatWriter::WriteFunc(const Module* module, const Func* func) { WriteOpenSpace("func"); - WriteStringSliceOrIndex(&func->name, func_index_++, NextChar::Space); + WriteNameOrIndex(&func->name, func_index_++, NextChar::Space); if (decl_has_func_type(&func->decl)) { WriteOpenSpace("type"); WriteVar(&func->decl.type_var, NextChar::None); @@ -618,7 +625,7 @@ void WatWriter::WriteFunc(const Module* module, const Func* func) { void WatWriter::WriteBeginGlobal(const Global* global) { WriteOpenSpace("global"); - WriteStringSliceOrIndex(&global->name, global_index_++, + WriteNameOrIndex(&global->name, global_index_++, NextChar::Space); if (global->mutable_) { WriteOpenSpace("mut"); @@ -643,7 +650,7 @@ void WatWriter::WriteLimits(const Limits* limits) { void WatWriter::WriteTable(const Table* table) { WriteOpenSpace("table"); - WriteStringSliceOrIndex(&table->name, table_index_++, + WriteNameOrIndex(&table->name, table_index_++, NextChar::Space); WriteLimits(&table->elem_limits); WritePutsSpace("anyfunc"); @@ -660,7 +667,7 @@ void WatWriter::WriteElemSegment(const ElemSegment* segment) { void WatWriter::WriteMemory(const Memory* memory) { WriteOpenSpace("memory"); - WriteStringSliceOrIndex(&memory->name, memory_index_++, + WriteNameOrIndex(&memory->name, memory_index_++, NextChar::Space); WriteLimits(&memory->page_limits); WriteCloseNewline(); @@ -680,7 +687,7 @@ void WatWriter::WriteImport(const Import* import) { switch (import->kind) { case ExternalKind::Func: WriteOpenSpace("func"); - WriteStringSliceOrIndex(&import->func->name, func_index_++, + WriteNameOrIndex(&import->func->name, func_index_++, NextChar::Space); if (decl_has_func_type(&import->func->decl)) { WriteOpenSpace("type"); @@ -722,8 +729,7 @@ void WatWriter::WriteExport(const Export* export_) { void WatWriter::WriteFuncType(const FuncType* func_type) { WriteOpenSpace("type"); - WriteStringSliceOrIndex(&func_type->name, func_type_index_++, - NextChar::Space); + WriteNameOrIndex(&func_type->name, func_type_index_++, NextChar::Space); WriteOpenSpace("func"); WriteFuncSigSpace(&func_type->sig); WriteCloseSpace(); |