summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/binary-reader-ir.cc6
-rw-r--r--src/binary-writer.cc19
-rw-r--r--src/wat-writer.cc36
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();