From 42135f1322fe061d7f86f935cea8b24df57fb57d Mon Sep 17 00:00:00 2001 From: "Wolfgang (Blub) Bumiller" Date: Wed, 21 Nov 2012 21:49:21 +0100 Subject: [PATCH] Escape strings in ir-dump output --- ir.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/ir.c b/ir.c index 91e8d7f..c1e116a 100644 --- a/ir.c +++ b/ir.c @@ -3330,6 +3330,26 @@ void ir_instr_dump(ir_instr *in, char *ind, ind[strlen(ind)-1] = 0; } +void ir_value_dump_string(const char *str, int (*oprintf)(const char*, ...)) +{ + oprintf("\""); + for (; *str; ++str) { + switch (*str) { + case '\n': oprintf("\\n"); break; + case '\r': oprintf("\\r"); break; + case '\t': oprintf("\\t"); break; + case '\v': oprintf("\\v"); break; + case '\f': oprintf("\\f"); break; + case '\b': oprintf("\\b"); break; + case '\a': oprintf("\\a"); break; + case '\\': oprintf("\\\\"); break; + case '"': oprintf("\\\""); break; + default: oprintf("%c", *str); break; + } + } + oprintf("\""); +} + void ir_value_dump(ir_value* v, int (*oprintf)(const char*, ...)) { if (v->isconst) { @@ -3354,7 +3374,7 @@ void ir_value_dump(ir_value* v, int (*oprintf)(const char*, ...)) oprintf("(entity)"); break; case TYPE_STRING: - oprintf("\"%s\"", v->constval.vstring); + ir_value_dump_string(v->constval.vstring, oprintf); break; #if 0 case TYPE_INTEGER: -- 2.39.2