static void write_escaped_string_slice(Context* ctx, WasmStringSlice ss) { size_t i; wasm_write_char(&ctx->json_stream, '"'); for (i = 0; i < ss.length; ++i) { uint8_t c = ss.start[i]; if (c < 0x20 || c == '\\' || c == '"') { wasm_writef(&ctx->json_stream, "\\u%04x", c); } else { wasm_write_char(&ctx->json_stream, c); } } wasm_write_char(&ctx->json_stream, '"'); }
void wasm_write_memory_dump(WasmStream* stream, const void* start, size_t size, size_t offset, WasmPrintChars print_chars, const char* desc) { const uint8_t* p = start; const uint8_t* end = p + size; while (p < end) { const uint8_t* line = p; const uint8_t* line_end = p + DUMP_OCTETS_PER_LINE; wasm_writef(stream, "%07" PRIzx ": ", (size_t)p - (size_t)start + offset); while (p < line_end) { int i; for (i = 0; i < DUMP_OCTETS_PER_GROUP; ++i, ++p) { if (p < end) { wasm_writef(stream, "%02x", *p); } else { wasm_write_char(stream, ' '); wasm_write_char(stream, ' '); } } wasm_write_char(stream, ' '); } wasm_write_char(stream, ' '); p = line; int i; for (i = 0; i < DUMP_OCTETS_PER_LINE && p < end; ++i, ++p) if (print_chars) wasm_write_char(stream, isprint(*p) ? *p : '.'); /* if there are multiple lines, only print the desc on the last one */ if (p >= end && desc) wasm_writef(stream, " ; %s", desc); wasm_write_char(stream, '\n'); } }