rb_iseq_t: reduce to (280 bytes from 288 bytes) on 64-bit

iseq_size and line_info_size may be 32-bit.

4GB instruction sequences should be big enough for anyone.
Other existing line info counters are 32-bit, and nobody
should need all that.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46957 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
normal 2014-07-26 07:30:26 +00:00
Родитель 98c9581b03
Коммит a9c7629ece
4 изменённых файлов: 12 добавлений и 5 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Sat Jul 26 16:28:06 2014 Eric Wong <e@80x24.org>
* vm_core.h (struct rb_iseq_struct): reduce to 280 bytes
(from 288 bytes) on 64-bit
Sat Jul 26 06:44:43 2014 Eric Wong <e@80x24.org>
* parse.y (struct parse_params): shrink to 320 to 304 bytes on 64-bit

Просмотреть файл

@ -567,7 +567,7 @@ 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 long i;
unsigned int i;
iseq->iseq_encoded = ALLOC_N(VALUE, iseq->iseq_size);
MEMCPY(iseq->iseq_encoded, iseq->iseq, VALUE, iseq->iseq_size);

5
iseq.c
Просмотреть файл

@ -1379,7 +1379,7 @@ rb_iseq_disasm(VALUE self)
VALUE *iseq;
VALUE str = rb_str_new(0, 0);
VALUE child = rb_ary_new();
unsigned long size;
unsigned int size;
int i;
long l;
ID *tbl;
@ -2144,7 +2144,8 @@ int
rb_iseq_line_trace_each(VALUE iseqval, int (*func)(int line, rb_event_flag_t *events_ptr, void *d), void *data)
{
int trace_num = 0;
size_t pos, insn;
unsigned int pos;
size_t insn;
rb_iseq_t *iseq;
int cont = 1;
GetISeqPtr(iseqval, iseq);

Просмотреть файл

@ -214,13 +214,14 @@ struct rb_iseq_struct {
VALUE *iseq; /* iseq (insn number and operands) */
VALUE *iseq_encoded; /* encoded iseq */
unsigned long iseq_size;
unsigned int iseq_size;
unsigned int line_info_size;
const VALUE mark_ary; /* Array: includes operands which should be GC marked */
const VALUE coverage; /* coverage array */
/* insn info, must be freed */
struct iseq_line_info_entry *line_info_table;
size_t line_info_size;
ID *local_table; /* must free */
int local_table_size;