Feature #10274 » 0002-iseq-remove-iseq-iseq-field-270-262-bytes-on-64-bit.patch
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 {
|
||
-
|
- « Previous
- 1
- 2
- Next »