diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/class.c | 22 | ||||
| -rw-r--r-- | src/hash.c | 2 | ||||
| -rw-r--r-- | src/load.c | 157 | ||||
| -rw-r--r-- | src/proc.c | 4 | ||||
| -rw-r--r-- | src/symbol.c | 43 |
5 files changed, 118 insertions, 110 deletions
diff --git a/src/class.c b/src/class.c index 1c0c0b1a4..287d63da3 100644 --- a/src/class.c +++ b/src/class.c @@ -26,7 +26,8 @@ union mt_ptr { struct mt_elem { union mt_ptr ptr; size_t func_p:1; - mrb_sym key:sizeof(mrb_sym)*8-1; + size_t noarg_p:1; + mrb_sym key:sizeof(mrb_sym)*8-2; }; /* method table structure */ @@ -50,7 +51,7 @@ mt_new(mrb_state *mrb) return t; } -static struct mt_elem *mt_put(mrb_state *mrb, mt_tbl *t, mrb_sym sym, size_t func_p, union mt_ptr ptr); +static struct mt_elem *mt_put(mrb_state *mrb, mt_tbl *t, mrb_sym sym, size_t func_p, size_t noarg_p, union mt_ptr ptr); static void mt_rehash(mrb_state *mrb, mt_tbl *t) @@ -71,7 +72,7 @@ mt_rehash(mrb_state *mrb, mt_tbl *t) /* key = 0 means empty or deleted */ if (slot->key != 0) { - mt_put(mrb, t, slot->key, slot->func_p, slot->ptr); + mt_put(mrb, t, slot->key, slot->func_p, slot->noarg_p, slot->ptr); } } mrb_free(mrb, old_table); @@ -81,7 +82,7 @@ mt_rehash(mrb_state *mrb, mt_tbl *t) /* Set the value for the symbol in the method table. */ static struct mt_elem* -mt_put(mrb_state *mrb, mt_tbl *t, mrb_sym sym, size_t func_p, union mt_ptr ptr) +mt_put(mrb_state *mrb, mt_tbl *t, mrb_sym sym, size_t func_p, size_t noarg_p, union mt_ptr ptr) { size_t hash, pos, start; struct mt_elem *dslot = NULL; @@ -96,6 +97,7 @@ mt_put(mrb_state *mrb, mt_tbl *t, mrb_sym sym, size_t func_p, union mt_ptr ptr) if (slot->key == sym) { slot->func_p = func_p; + slot->noarg_p = noarg_p; slot->ptr = ptr; return slot; } @@ -104,6 +106,7 @@ mt_put(mrb_state *mrb, mt_tbl *t, mrb_sym sym, size_t func_p, union mt_ptr ptr) t->size++; slot->key = sym; slot->func_p = func_p; + slot->noarg_p = noarg_p; slot->ptr = ptr; return slot; } @@ -117,6 +120,7 @@ mt_put(mrb_state *mrb, mt_tbl *t, mrb_sym sym, size_t func_p, union mt_ptr ptr) t->size++; dslot->key = sym; dslot->func_p = func_p; + dslot->noarg_p = noarg_p; dslot->ptr = ptr; return dslot; } @@ -202,7 +206,7 @@ mt_copy(mrb_state *mrb, mt_tbl *t) struct mt_elem *slot = &t->table[i]; if (slot->key) { - mt_put(mrb, t2, slot->key, slot->func_p, slot->ptr); + mt_put(mrb, t2, slot->key, slot->func_p, slot->noarg_p, slot->ptr); } } return t2; @@ -238,6 +242,9 @@ mrb_mt_foreach(mrb_state *mrb, struct RClass *c, mrb_mt_foreach_func *fn, void * else { MRB_METHOD_FROM_PROC(m, slot->ptr.proc); } + if (slot->noarg_p) { + MRB_METHOD_NOARG_SET(m); + } if (fn(mrb, slot->key, m, p) != 0) return; @@ -739,7 +746,7 @@ mrb_define_method_raw(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_method_ else { ptr.func = MRB_METHOD_FUNC(m); } - mt_put(mrb, h, mid, MRB_METHOD_FUNC_P(m), ptr); + mt_put(mrb, h, mid, MRB_METHOD_FUNC_P(m), MRB_METHOD_NOARG_P(m), ptr); mc_clear(mrb); } @@ -1747,6 +1754,9 @@ mrb_method_search_vm(mrb_state *mrb, struct RClass **cp, mrb_sym mid) else { MRB_METHOD_FROM_PROC(m, e->ptr.proc); } + if (e->noarg_p) { + MRB_METHOD_NOARG_SET(m); + } #ifndef MRB_NO_METHOD_CACHE mc->c = oc; mc->c0 = c; diff --git a/src/hash.c b/src/hash.c index fe14865cf..8ca2f666e 100644 --- a/src/hash.c +++ b/src/hash.c @@ -365,7 +365,7 @@ ea_next_capa_for(uint32_t size, uint32_t max_capa) * `EA_INCREASE_RATIO` is the current value, 32-bit range will not be * exceeded during the calculation of `capa`, so `size_t` is used. */ - size_t capa = size * EA_INCREASE_RATIO, inc = capa - size; + size_t capa = (size_t)size * EA_INCREASE_RATIO, inc = capa - size; if (EA_MAX_INCREASE < inc) capa = size + EA_MAX_INCREASE; return capa <= max_capa ? U32(capa) : max_capa; } diff --git a/src/load.c b/src/load.c index 48496ba48..0b98fba66 100644 --- a/src/load.c +++ b/src/load.c @@ -26,6 +26,17 @@ #define SIZE_ERROR_MUL(nmemb, size) ((size_t)(nmemb) > SIZE_MAX / (size)) +#define DEFINE_READ_IREP_FUNC(funcdecl, basecall) \ + funcdecl \ + { \ + int ai = mrb_gc_arena_save(mrb); \ + struct RProc *proc = basecall; \ + struct mrb_irep *irep = (mrb_irep*)(proc ? proc->body.irep : NULL); \ + if (irep) proc->body.irep = NULL; \ + mrb_gc_arena_restore(mrb, ai); \ + return irep; \ + } + static size_t offset_crc_body(void) { @@ -58,29 +69,20 @@ str_to_double(mrb_state *mrb, const char *p) mrb_value mrb_str_len_to_inum(mrb_state *mrb, const char *str, size_t len, mrb_int base, int badcheck); -static void -tempirep_free(mrb_state *mrb, void *p) -{ - if (p) mrb_irep_decref(mrb, (mrb_irep *)p); -} - -static const mrb_data_type tempirep_type = { "temporary irep", tempirep_free }; - -static mrb_irep* -read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flags) +static mrb_bool +read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flags, mrb_irep **irepp) { int i; const uint8_t *src = bin; ptrdiff_t diff; uint16_t tt, pool_data_len, snl; int plen; - struct RData *irep_obj = mrb_data_object_alloc(mrb, mrb->object_class, NULL, &tempirep_type); mrb_pool_value *pool; mrb_sym *syms; int ai = mrb_gc_arena_save(mrb); mrb_irep *irep = mrb_add_irep(mrb); - irep_obj->data = irep; + *irepp = irep; /* skip record size */ src += sizeof(uint32_t); @@ -94,7 +96,7 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag src += sizeof(uint16_t); /* number of child irep */ - irep->rlen = (size_t)bin_to_uint16(src); + irep->rlen = (uint8_t)bin_to_uint16(src); src += sizeof(uint16_t); /* Binary Data Section */ @@ -109,7 +111,7 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag sizeof(struct mrb_irep_catch_handler) * irep->clen; mrb_static_assert1(sizeof(struct mrb_irep_catch_handler) == 13); if (SIZE_ERROR_MUL(irep->ilen, sizeof(mrb_code))) { - return NULL; + return FALSE; } if ((flags & FLAG_SRC_MALLOC) == 0) { irep->iseq = (mrb_code*)src; @@ -128,7 +130,7 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag src += sizeof(uint16_t); if (plen > 0) { if (SIZE_ERROR_MUL(plen, sizeof(mrb_value))) { - return NULL; + return FALSE; } irep->pool = pool = (mrb_pool_value*)mrb_calloc(mrb, sizeof(mrb_pool_value), plen); @@ -162,7 +164,7 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag } break; #else - return NULL; /* INT64 not supported on MRB_32BIT */ + return FALSE; /* INT64 not supported on MRB_32BIT */ #endif case IREP_TT_FLOAT: @@ -172,7 +174,7 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag src += sizeof(double); break; #else - return NULL; /* MRB_NO_FLOAT */ + return FALSE; /* MRB_NO_FLOAT */ #endif case IREP_TT_STR: @@ -194,7 +196,7 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag default: /* should not happen */ - return NULL; + return FALSE; } irep->plen = i+1; } @@ -205,7 +207,7 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag src += sizeof(uint16_t); if (irep->slen > 0) { if (SIZE_ERROR_MUL(irep->slen, sizeof(mrb_sym))) { - return NULL; + return FALSE; } irep->syms = syms = (mrb_sym *)mrb_malloc(mrb, sizeof(mrb_sym) * irep->slen); @@ -233,54 +235,60 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag mrb_assert_int_fit(ptrdiff_t, diff, size_t, SIZE_MAX); *len = (size_t)diff; - irep_obj->data = NULL; - - return irep; + return TRUE; } -static mrb_irep* -read_irep_record(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flags) +static mrb_bool +read_irep_record(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flags, mrb_irep **irepp) { - struct RData *irep_obj = mrb_data_object_alloc(mrb, mrb->object_class, NULL, &tempirep_type); int ai = mrb_gc_arena_save(mrb); - mrb_irep *irep = read_irep_record_1(mrb, bin, len, flags); + mrb_bool readsuccess = read_irep_record_1(mrb, bin, len, flags, irepp); mrb_irep **reps; int i; mrb_gc_arena_restore(mrb, ai); - if (irep == NULL) { - return NULL; + if (!readsuccess) { + return FALSE; } - reps = (mrb_irep**)mrb_calloc(mrb, irep->rlen, sizeof(mrb_irep*)); - irep->reps = (const mrb_irep**)reps; - irep_obj->data = irep; + reps = (mrb_irep**)mrb_calloc(mrb, (*irepp)->rlen, sizeof(mrb_irep*)); + (*irepp)->reps = (const mrb_irep**)reps; bin += *len; - for (i=0; i<irep->rlen; i++) { + for (i=0; i<(*irepp)->rlen; i++) { size_t rlen; - reps[i] = read_irep_record(mrb, bin, &rlen, flags); + readsuccess = read_irep_record(mrb, bin, &rlen, flags, &reps[i]); mrb_gc_arena_restore(mrb, ai); - if (reps[i] == NULL) { - return NULL; + if (!readsuccess) { + return FALSE; } bin += rlen; *len += rlen; } - irep_obj->data = NULL; - - return irep; + return TRUE; } static mrb_irep* -read_section_irep(mrb_state *mrb, const uint8_t *bin, uint8_t flags) +read_section_irep(mrb_state *mrb, const uint8_t *bin, uint8_t flags, struct RProc **proc) { size_t len; + /* + * This proc object keeps all the data in progress to avoid memory leaks + * if something goes wrong while reading irep. + */ + *proc = mrb_proc_new(mrb, NULL); + + mrb_irep **irepp = (mrb_irep**)&(*proc)->body.irep; bin += sizeof(struct rite_section_irep_header); - return read_irep_record(mrb, bin, &len, flags); + if (read_irep_record(mrb, bin, &len, flags, irepp)) { + return *irepp; + } + else { + return NULL; + } } static int @@ -544,11 +552,11 @@ read_binary_header(const uint8_t *bin, size_t bufsize, size_t *bin_size, uint16_ return MRB_DUMP_OK; } -static mrb_irep* +static struct RProc* read_irep(mrb_state *mrb, const uint8_t *bin, size_t bufsize, uint8_t flags) { int result; - struct RData *irep_obj = NULL; + struct RProc *proc = NULL; mrb_irep *irep = NULL; const struct rite_section_header *section_header; uint16_t crc; @@ -569,15 +577,12 @@ read_irep(mrb_state *mrb, const uint8_t *bin, size_t bufsize, uint8_t flags) return NULL; } - irep_obj = mrb_data_object_alloc(mrb, mrb->object_class, NULL, &tempirep_type); - bin += sizeof(struct rite_binary_header); do { section_header = (const struct rite_section_header *)bin; if (memcmp(section_header->section_ident, RITE_SECTION_IREP_IDENT, sizeof(section_header->section_ident)) == 0) { - irep = read_section_irep(mrb, bin, flags); + irep = read_section_irep(mrb, bin, flags, &proc); if (!irep) return NULL; - irep_obj->data = irep; } else if (memcmp(section_header->section_ident, RITE_SECTION_DEBUG_IDENT, sizeof(section_header->section_ident)) == 0) { if (!irep) return NULL; /* corrupted data */ @@ -596,13 +601,11 @@ read_irep(mrb_state *mrb, const uint8_t *bin, size_t bufsize, uint8_t flags) bin += bin_to_uint32(section_header->section_size); } while (memcmp(section_header->section_ident, RITE_BINARY_EOF, sizeof(section_header->section_ident)) != 0); - irep_obj->data = NULL; - - return irep; + return proc; } -mrb_irep* -mrb_read_irep(mrb_state *mrb, const uint8_t *bin) +static struct RProc* +mrb_proc_read_irep(mrb_state *mrb, const uint8_t *bin) { #if defined(MRB_USE_LINK_TIME_RO_DATA_P) || defined(MRB_USE_CUSTOM_RO_DATA_P) uint8_t flags = mrb_ro_data_p((char*)bin) ? FLAG_SRC_STATIC : FLAG_SRC_MALLOC; @@ -613,12 +616,20 @@ mrb_read_irep(mrb_state *mrb, const uint8_t *bin) return read_irep(mrb, bin, (size_t)-1, flags); } -MRB_API mrb_irep* -mrb_read_irep_buf(mrb_state *mrb, const void *buf, size_t bufsize) +DEFINE_READ_IREP_FUNC( + mrb_irep *mrb_read_irep(mrb_state *mrb, const uint8_t *bin), + mrb_proc_read_irep(mrb, bin)) + +static struct RProc* +mrb_proc_read_irep_buf(mrb_state *mrb, const void *buf, size_t bufsize) { return read_irep(mrb, (const uint8_t *)buf, bufsize, FLAG_SRC_MALLOC); } +DEFINE_READ_IREP_FUNC( + MRB_API mrb_irep *mrb_read_irep_buf(mrb_state *mrb, const void *buf, size_t bufsize), + mrb_proc_read_irep_buf(mrb, buf, bufsize)) + void mrb_exc_set(mrb_state *mrb, mrb_value exc); static void @@ -630,17 +641,13 @@ irep_error(mrb_state *mrb) void mrb_codedump_all(mrb_state*, struct RProc*); static mrb_value -load_irep(mrb_state *mrb, mrb_irep *irep, mrbc_context *c) +load_irep(mrb_state *mrb, struct RProc *proc, mrbc_context *c) { - struct RProc *proc; - - if (!irep) { + if (!proc || !proc->body.irep) { irep_error(mrb); return mrb_nil_value(); } - proc = mrb_proc_new(mrb, irep); proc->c = NULL; - mrb_irep_decref(mrb, irep); if (c && c->dump_result) mrb_codedump_all(mrb, proc); if (c && c->no_exec) return mrb_obj_value(proc); return mrb_top_run(mrb, proc, mrb_top_self(mrb), 0); @@ -649,23 +656,15 @@ load_irep(mrb_state *mrb, mrb_irep *irep, mrbc_context *c) MRB_API mrb_value mrb_load_irep_cxt(mrb_state *mrb, const uint8_t *bin, mrbc_context *c) { - struct RData *irep_obj = mrb_data_object_alloc(mrb, mrb->object_class, NULL, &tempirep_type); - mrb_irep *irep = mrb_read_irep(mrb, bin); - mrb_value ret; - - if (!irep) return mrb_undef_value(); - irep_obj->data = irep; - mrb_irep_incref(mrb, irep); - ret = load_irep(mrb, irep, c); - irep_obj->data = NULL; - mrb_irep_decref(mrb, irep); - return ret; + struct RProc *proc = mrb_proc_read_irep(mrb, bin); + if (!proc) return mrb_undef_value(); + return load_irep(mrb, proc, c); } MRB_API mrb_value mrb_load_irep_buf_cxt(mrb_state *mrb, const void *buf, size_t bufsize, mrbc_context *c) { - return load_irep(mrb, mrb_read_irep_buf(mrb, buf, bufsize), c); + return load_irep(mrb, mrb_proc_read_irep_buf(mrb, buf, bufsize), c); } MRB_API mrb_value @@ -688,10 +687,10 @@ mrb_load_proc(mrb_state *mrb, const struct RProc *proc) #ifndef MRB_NO_STDIO -mrb_irep* -mrb_read_irep_file(mrb_state *mrb, FILE* fp) +static struct RProc* +mrb_proc_read_irep_file(mrb_state *mrb, FILE *fp) { - mrb_irep *irep = NULL; + struct RProc *proc = NULL; uint8_t *buf; const size_t header_size = sizeof(struct rite_binary_header); size_t buf_size = 0; @@ -715,17 +714,21 @@ mrb_read_irep_file(mrb_state *mrb, FILE* fp) if (fread(buf+header_size, buf_size-header_size, 1, fp) == 0) { goto irep_exit; } - irep = read_irep(mrb, buf, (size_t)-1, FLAG_SRC_MALLOC); + proc = read_irep(mrb, buf, (size_t)-1, FLAG_SRC_MALLOC); irep_exit: mrb_free(mrb, buf); - return irep; + return proc; } +DEFINE_READ_IREP_FUNC( + mrb_irep *mrb_read_irep_file(mrb_state *mrb, FILE *fp), + mrb_proc_read_irep_file(mrb, fp)) + MRB_API mrb_value mrb_load_irep_file_cxt(mrb_state *mrb, FILE* fp, mrbc_context *c) { - return load_irep(mrb, mrb_read_irep_file(mrb, fp), c); + return load_irep(mrb, mrb_proc_read_irep_file(mrb, fp), c); } MRB_API mrb_value diff --git a/src/proc.c b/src/proc.c index 2b07003be..72d7ad120 100644 --- a/src/proc.c +++ b/src/proc.c @@ -52,7 +52,9 @@ mrb_proc_new(mrb_state *mrb, const mrb_irep *irep) p->e.target_class = tc; } p->body.irep = irep; - mrb_irep_incref(mrb, (mrb_irep*)irep); + if (irep) { + mrb_irep_incref(mrb, (mrb_irep*)irep); + } return p; } diff --git a/src/symbol.c b/src/symbol.c index 58decc1f1..773e980e5 100644 --- a/src/symbol.c +++ b/src/symbol.c @@ -65,17 +65,6 @@ typedef struct symbol_name { const char *name; } symbol_name; -#ifdef MRB_USE_ALL_SYMBOLS -#define SYMBOL_SHIFT 0 -# define SYMBOL_INLINE_P(sym) FALSE -# define sym_inline_pack(name, len) 0 -# define sym_inline_unpack(sym, buf, lenp) NULL -#else -#define SYMBOL_INLINE 1 -#define SYMBOL_SHIFT 1 -# define SYMBOL_INLINE_P(sym) ((sym) & SYMBOL_INLINE) -#endif - static void sym_validate_len(mrb_state *mrb, size_t len) { @@ -84,13 +73,19 @@ sym_validate_len(mrb_state *mrb, size_t len) } } -#ifndef MRB_USE_ALL_SYMBOLS +#ifdef MRB_USE_ALL_SYMBOLS +# define SYMBOL_INLINE_P(sym) FALSE +# define sym_inline_pack(name, len) 0 +# define sym_inline_unpack(sym, buf, lenp) NULL +#else +# define SYMBOL_INLINE_P(sym) ((sym) >= (1<<24)) + static const char pack_table[] = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; static mrb_sym sym_inline_pack(const char *name, size_t len) { - const size_t pack_length_max = (MRB_SYMBOL_BIT - 2) / 6; + const size_t pack_length_max = 5; char c; const char *p; @@ -98,6 +93,7 @@ sym_inline_pack(const char *name, size_t len) mrb_sym sym = 0; if (len > pack_length_max) return 0; /* too long */ + if (len == 0) return 0; /* empty string */ for (i=0; i<len; i++) { uint32_t bits; @@ -106,10 +102,10 @@ sym_inline_pack(const char *name, size_t len) p = strchr(pack_table, (int)c); if (p == 0) return 0; /* non alnum char */ bits = (uint32_t)(p - pack_table)+1; - if (i >= pack_length_max) break; - sym |= bits<<(i*6+SYMBOL_SHIFT); + sym |= bits<<(24-i*6); } - return sym | SYMBOL_INLINE; + mrb_assert(SYMBOL_INLINE_P(sym)); + return sym; } static const char* @@ -120,7 +116,7 @@ sym_inline_unpack(mrb_sym sym, char *buf, mrb_int *lenp) mrb_assert(SYMBOL_INLINE_P(sym)); for (i=0; i<5; i++) { - uint32_t bits = sym>>(i*6+SYMBOL_SHIFT) & ((1<<6)-1); + uint32_t bits = sym>>(24-i*6) & 0x3f; if (bits == 0) break; buf[i] = pack_table[bits-1];; } @@ -156,7 +152,7 @@ find_symbol(mrb_state *mrb, const char *name, size_t len, uint8_t *hashp) #ifndef MRB_NO_PRESYM /* presym */ i = presym_find(name, len); - if (i > 0) return i<<SYMBOL_SHIFT; + if (i > 0) return i; #endif /* inline symbol */ @@ -171,14 +167,14 @@ find_symbol(mrb_state *mrb, const char *name, size_t len, uint8_t *hashp) do { sname = &mrb->symtbl[i]; if (sname->len == len && memcmp(sname->name, name, len) == 0) { - return (i+MRB_PRESYM_MAX)<<SYMBOL_SHIFT; + return (i+MRB_PRESYM_MAX); } if (sname->prev == 0xff) { i -= 0xff; sname = &mrb->symtbl[i]; while (mrb->symtbl < sname) { if (sname->len == len && memcmp(sname->name, name, len) == 0) { - return (mrb_sym)((sname - mrb->symtbl)+MRB_PRESYM_MAX)<<SYMBOL_SHIFT; + return (mrb_sym)((sname - mrb->symtbl)+MRB_PRESYM_MAX); } sname--; } @@ -234,7 +230,7 @@ sym_intern(mrb_state *mrb, const char *name, size_t len, mrb_bool lit) } mrb->symhash[hash] = mrb->symidx = sym; - return (sym+MRB_PRESYM_MAX)<<SYMBOL_SHIFT; + return (sym+MRB_PRESYM_MAX); } MRB_API mrb_sym @@ -313,7 +309,6 @@ sym2name_len(mrb_state *mrb, mrb_sym sym, char *buf, mrb_int *lenp) { if (SYMBOL_INLINE_P(sym)) return sym_inline_unpack(sym, buf, lenp); - sym >>= SYMBOL_SHIFT; #ifndef MRB_NO_PRESYM { const char *name = presym_sym2name(sym, lenp); @@ -345,7 +340,6 @@ mrb_bool mrb_sym_static_p(mrb_state *mrb, mrb_sym sym) { if (SYMBOL_INLINE_P(sym)) return TRUE; - sym >>= SYMBOL_SHIFT; if (sym > MRB_PRESYM_MAX) return FALSE; return TRUE; } @@ -614,8 +608,7 @@ sym_name(mrb_state *mrb, mrb_sym sym, mrb_bool dump) return name; } else { - mrb_value str = SYMBOL_INLINE_P(sym) ? - mrb_str_new(mrb, name, len) : mrb_str_new_static(mrb, name, len); + mrb_value str = mrb_str_new_static(mrb, name, len); str = mrb_str_dump(mrb, str); return RSTRING_PTR(str); } |
