diff --git a/ChangeLog b/ChangeLog index 5aba460930..0288c6517c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Thu Jul 23 17:30:43 2015 Koichi Sasada + + * vm_core.h: constify rb_iseq_constant_body::iseq_encoded and + rb_control_frame_t::pc. + + * compile.c (rb_iseq_translate_threaded_code): catch up this fix. + + * iseq.c: ditto. + + * vm_exec.c (vm_exec_core): ditto. + Thu Jul 23 10:25:46 2015 Nobuyoshi Nakada * include/ruby/ruby.h: add raw FL macros, which assume always the diff --git a/compile.c b/compile.c index f570a6de88..a0efd68d37 100644 --- a/compile.c +++ b/compile.c @@ -578,11 +578,12 @@ rb_iseq_translate_threaded_code(rb_iseq_t *iseq) #if OPT_DIRECT_THREADED_CODE || OPT_CALL_THREADED_CODE const void * const *table = rb_vm_get_insns_address_table(); unsigned int i; + VALUE *encoded = (VALUE *)iseq->body->iseq_encoded; for (i = 0; i < iseq->body->iseq_size; /* */ ) { int insn = (int)iseq->body->iseq_encoded[i]; int len = insn_len(insn); - iseq->body->iseq_encoded[i] = (VALUE)table[insn]; + encoded[i] = (VALUE)table[insn]; i += len; } #endif diff --git a/iseq.c b/iseq.c index 489be5f2eb..4a59286ef3 100644 --- a/iseq.c +++ b/iseq.c @@ -72,10 +72,10 @@ rb_iseq_free(const rb_iseq_t *iseq) if (iseq) { int i; - ruby_xfree(iseq->body->iseq_encoded); - ruby_xfree(iseq->body->line_info_table); - ruby_xfree(iseq->body->local_table); - ruby_xfree(iseq->body->is_entries); + ruby_xfree((void *)iseq->body->iseq_encoded); + ruby_xfree((void *)iseq->body->line_info_table); + ruby_xfree((void *)iseq->body->local_table); + ruby_xfree((void *)iseq->body->is_entries); if (iseq->body->callinfo_entries) { for (i=0; ibody->callinfo_size; i++) { @@ -85,11 +85,12 @@ rb_iseq_free(const rb_iseq_t *iseq) } ruby_xfree(iseq->body->callinfo_entries); } - ruby_xfree(iseq->body->catch_table); - ruby_xfree(iseq->body->param.opt_table); + ruby_xfree((void *)iseq->body->catch_table); + ruby_xfree((void *)iseq->body->param.opt_table); + if (iseq->body->param.keyword != NULL) { - ruby_xfree(iseq->body->param.keyword->default_values); - ruby_xfree(iseq->body->param.keyword); + ruby_xfree((void *)iseq->body->param.keyword->default_values); + ruby_xfree((void *)iseq->body->param.keyword); } compile_data_free(iseq->compile_data); ruby_xfree(iseq->variable_body->iseq); @@ -2118,7 +2119,8 @@ rb_iseqw_line_trace_each(VALUE iseqw, int (*func)(int line, rb_event_flag_t *eve /* printf("line: %d\n", line); */ cont = (*func)(line, &events, data); if (current_events != events) { - iseq_original[pos+1] = iseq->body->iseq_encoded[pos+1] = + VALUE *encoded = (VALUE *)iseq->body->iseq_encoded; + iseq_original[pos+1] = encoded[pos+1] = (VALUE)(current_events | (events & RUBY_EVENT_SPECIFIED_LINE)); } } diff --git a/vm_core.h b/vm_core.h index b266e3882a..e470e164db 100644 --- a/vm_core.h +++ b/vm_core.h @@ -255,7 +255,7 @@ struct rb_iseq_constant_body { int local_size; unsigned int iseq_size; - VALUE *iseq_encoded; /* encoded iseq (insn addr and operands) */ + const VALUE *iseq_encoded; /* encoded iseq (insn addr and operands) */ /** * parameter information @@ -536,7 +536,7 @@ typedef struct rb_vm_struct { #endif typedef struct rb_control_frame_struct { - VALUE *pc; /* cfp[0] */ + const VALUE *pc; /* cfp[0] */ VALUE *sp; /* cfp[1] */ const rb_iseq_t *iseq; /* cfp[2] */ VALUE flag; /* cfp[3] */ diff --git a/vm_exec.c b/vm_exec.c index 330d35a194..5e4ff94a8b 100644 --- a/vm_exec.c +++ b/vm_exec.c @@ -60,12 +60,12 @@ vm_exec_core(rb_thread_t *th, VALUE initial) #endif #if defined(__GNUC__) && defined(__i386__) - DECL_SC_REG(VALUE *, pc, "di"); + DECL_SC_REG(const VALUE *, pc, "di"); DECL_SC_REG(rb_control_frame_t *, cfp, "si"); #define USE_MACHINE_REGS 1 #elif defined(__GNUC__) && defined(__x86_64__) - DECL_SC_REG(VALUE *, pc, "14"); + DECL_SC_REG(const VALUE *, pc, "14"); # if defined(__native_client__) DECL_SC_REG(rb_control_frame_t *, cfp, "13"); # else @@ -74,13 +74,13 @@ vm_exec_core(rb_thread_t *th, VALUE initial) #define USE_MACHINE_REGS 1 #elif defined(__GNUC__) && defined(__powerpc64__) - DECL_SC_REG(VALUE *, pc, "14"); + DECL_SC_REG(const VALUE *, pc, "14"); DECL_SC_REG(rb_control_frame_t *, cfp, "15"); #define USE_MACHINE_REGS 1 #else register rb_control_frame_t *reg_cfp; - VALUE *reg_pc; + const VALUE *reg_pc; #endif #if USE_MACHINE_REGS