summaryrefslogtreecommitdiffhomepage
path: root/src/cdump.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cdump.c')
-rw-r--r--src/cdump.c51
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("}");