diff options
Diffstat (limited to 'src/cdump.c')
| -rw-r--r-- | src/cdump.c | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/src/cdump.c b/src/cdump.c index f9525d042..32982e6fe 100644 --- a/src/cdump.c +++ b/src/cdump.c @@ -10,7 +10,6 @@ #include "mruby/irep.h" #include "mruby/string.h" -#include "re.h" #define MRB_CDUMP_LINE_LEN 128 @@ -45,7 +44,7 @@ str_format_len(mrb_value str) char *src; - for (src = RSTRING_PTR(str); src < RSTRING_END(str);) { + for (src = RSTRING_PTR(str); src < RSTRING_END(str); src++) { switch (*src) { case 0x07:/* BEL */ /* fall through */ case 0x08:/* BS */ /* fall through */ @@ -58,11 +57,11 @@ str_format_len(mrb_value str) case 0x27:/* ' */ /* fall through */ case 0x3F:/* ? */ /* fall through */ case 0x5C:/* \ */ /* fall through */ - dump_len += 2; src += 2; + dump_len += 2; break; default: - dump_len++; src++; + dump_len++; break; } } @@ -73,22 +72,23 @@ str_format_len(mrb_value str) static char* str_to_format(mrb_value str, char *buf) { - char *src, *dst; + char *src; + char *dst; - for (src = RSTRING_PTR(str), dst = buf; src < RSTRING_END(str);) { + for (src = RSTRING_PTR(str), dst = buf; src < RSTRING_END(str); src++) { switch (*src) { - case 0x07:/* BEL */ memcpy(dst, "\\a", 2); dst+=2; src+=2; break; - case 0x08:/* BS */ memcpy(dst, "\\b", 2); dst+=2; src+=2; break; - case 0x09:/* HT */ memcpy(dst, "\\t", 2); dst+=2; src+=2; break; - case 0x0A:/* LF */ memcpy(dst, "\\n", 2); dst+=2; src+=2; break; - case 0x0B:/* VT */ memcpy(dst, "\\v", 2); dst+=2; src+=2; break; - case 0x0C:/* FF */ memcpy(dst, "\\f", 2); dst+=2; src+=2; break; - case 0x0D:/* CR */ memcpy(dst, "\\r", 2); dst+=2; src+=2; break; - case 0x22:/* " */ memcpy(dst, "\\\"", 2); dst+=2; src+=2; break; - case 0x27:/* ' */ memcpy(dst, "\\\'", 2); dst+=2; src+=2; break; - case 0x3F:/* ? */ memcpy(dst, "\\\?", 2); dst+=2; src+=2; break; - case 0x5C:/* \ */ memcpy(dst, "\\\\", 2); dst+=2; src+=2; break; - default: *dst++ = *src++; break; + case 0x07:/* BEL */ *dst++ = '\\'; *dst++ = 'a'; break; + case 0x08:/* BS */ *dst++ = '\\'; *dst++ = 'b'; break; + case 0x09:/* HT */ *dst++ = '\\'; *dst++ = 't'; break; + case 0x0A:/* LF */ *dst++ = '\\'; *dst++ = 'n'; break; + case 0x0B:/* VT */ *dst++ = '\\'; *dst++ = 'v'; break; + case 0x0C:/* FF */ *dst++ = '\\'; *dst++ = 'f'; break; + case 0x0D:/* CR */ *dst++ = '\\'; *dst++ = 'r'; break; + case 0x22:/* " */ *dst++ = '\\'; *dst++ = '\"'; break; + case 0x27:/* ' */ *dst++ = '\\'; *dst++ = '\''; break; + case 0x3F:/* ? */ *dst++ = '\\'; *dst++ = '\?'; break; + case 0x5C:/* \ */ *dst++ = '\\'; *dst++ = '\\'; break; + default: *dst++ = *src; break; } } @@ -107,10 +107,11 @@ make_cdump_irep(mrb_state *mrb, int irep_no, FILE *f) return -1; buf_len = MRB_CDUMP_LINE_LEN; - if ((buf = mrb_malloc(mrb, buf_len)) == 0 ) { + if ((buf = (char *)mrb_malloc(mrb, buf_len)) == 0 ) { return MRB_CDUMP_GENERAL_FAILURE; } + SOURCE_CODE0 (" ai = mrb->arena_idx;"); SOURCE_CODE0 (" irep = mrb->irep[idx] = mrb_malloc(mrb, sizeof(mrb_irep));"); SOURCE_CODE0 (" irep->idx = idx++;"); SOURCE_CODE (" irep->flags = %d | MRB_ISEQ_NOFREE;", irep->flags); @@ -137,11 +138,13 @@ make_cdump_irep(mrb_state *mrb, int irep_no, FILE *f) switch (irep->pool[n].tt) { case MRB_TT_FLOAT: SOURCE_CODE(" irep->pool[%d] = mrb_float_value(%.16e);", n, irep->pool[n].value.f); break; - case MRB_TT_STRING: + case MRB_TT_FIXNUM: + SOURCE_CODE(" irep->pool[%d] = mrb_fixnum_value(%d);", n, irep->pool[n].value.i); break; + case MRB_TT_STRING: str_len = str_format_len(irep->pool[n]) + 1; if ( str_len > buf_len ) { buf_len = str_len; - if ((buf = mrb_realloc(mrb, buf, buf_len)) == 0 ) { + if ((buf = (char *)mrb_realloc(mrb, buf, buf_len)) == 0 ) { return MRB_CDUMP_GENERAL_FAILURE; } } @@ -154,6 +157,8 @@ make_cdump_irep(mrb_state *mrb, int irep_no, FILE *f) } else SOURCE_CODE0 (" irep->pool = NULL;"); + SOURCE_CODE0 (" mrb->irep_len = idx;"); + SOURCE_CODE0 (" mrb->arena_idx = ai;"); SOURCE_CODE0(""); return MRB_CDUMP_OK; } @@ -184,6 +189,7 @@ mrb_cdump_irep(mrb_state *mrb, int n, FILE *f,const char *initname) SOURCE_CODE0("{"); SOURCE_CODE0(" int n = mrb->irep_len;"); SOURCE_CODE0(" int idx = n;"); + SOURCE_CODE0(" int ai;"); SOURCE_CODE0(" mrb_irep *irep;"); SOURCE_CODE0(""); SOURCE_CODE (" mrb_add_irep(mrb, idx+%d);", irep_num); @@ -193,9 +199,6 @@ mrb_cdump_irep(mrb_state *mrb, int n, FILE *f,const char *initname) return -1; } - SOURCE_CODE0(" mrb->irep_len = idx;"); - SOURCE_CODE0(""); - SOURCE_CODE0(" extern mrb_value mrb_top_self(mrb_state *mrb);"); SOURCE_CODE0(" mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));"); SOURCE_CODE0("}"); |
