Project

General

Profile

Feature #10274 » 0002-iseq-remove-iseq-iseq-field-270-262-bytes-on-64-bit.patch

normalperson (Eric Wong), 09/21/2014 07:43 AM

View differences:

compile.c
VALUE *
rb_iseq_original_iseq(rb_iseq_t *iseq) /* cold path */
{
if (iseq->iseq) return iseq->iseq;
VALUE *original;
iseq->iseq = ALLOC_N(VALUE, iseq->iseq_size);
if (iseq->original_p) return iseq->iseq_encoded + iseq->iseq_size;
MEMCPY(iseq->iseq, iseq->iseq_encoded, VALUE, iseq->iseq_size);
REALLOC_N(iseq->iseq_encoded, VALUE, iseq->iseq_size * 2);
original = iseq->iseq_encoded + iseq->iseq_size;
iseq->original_p = 1;
MEMCPY(original, iseq->iseq_encoded, VALUE, iseq->iseq_size);
#if OPT_DIRECT_THREADED_CODE || OPT_CALL_THREADED_CODE
{
unsigned int i;
for (i = 0; i < iseq->iseq_size; /* */ ) {
const void *addr = (const void *)iseq->iseq[i];
const void *addr = (const void *)original[i];
const int insn = rb_vm_insn_addr2insn(addr);
iseq->iseq[i] = insn;
original[i] = insn;
i += insn_len(insn);
}
}
#endif
return iseq->iseq;
return original;
}
/*********************************************/
iseq.c
RUBY_FREE_UNLESS_NULL(iseq->arg_opt_table);
RUBY_FREE_UNLESS_NULL(iseq->arg_keyword_table);
compile_data_free(iseq->compile_data);
RUBY_FREE_UNLESS_NULL(iseq->iseq);
}
ruby_xfree(ptr);
}
......
if (ptr) {
iseq = ptr;
if (!iseq->orig) {
size += iseq->iseq_size * sizeof(VALUE);
size += (iseq->iseq_size << iseq->original_p) * sizeof(VALUE);
size += iseq->line_info_size * sizeof(struct iseq_line_info_entry);
size += iseq->local_table_size * sizeof(ID);
if (iseq->catch_table) {
......
}
size += sizeof(struct iseq_compile_data);
}
if (iseq->iseq) {
size += iseq->iseq_size * sizeof(VALUE);
}
}
}
vm_core.h
/* bool, if this is true, raise an ArgumentError when unknown
* keyword argument is passed */
uint8_t arg_keyword_check;
uint8_t original_p; /* true if original iseq is after iseq_encoded */
int arg_rest;
int arg_block;
......
/* used at compile time */
struct iseq_compile_data *compile_data;
/* original iseq, before encoding
* used for debug/dump (TODO: union with compile_data) */
VALUE *iseq;
};
enum ruby_special_exceptions {
-
(2-2/2)