aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-07-26 07:30:26 +0000
committernormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-07-26 07:30:26 +0000
commita9c7629ece428e1de9119137a1b3f2e899b9d9e7 (patch)
treeb67ee810d12903d1324fd163e4128ec6db508c84
parent98c9581b039e9fbe92b5285186c30087b648890b (diff)
downloadruby-a9c7629ece428e1de9119137a1b3f2e899b9d9e7.tar.gz
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
-rw-r--r--ChangeLog5
-rw-r--r--compile.c2
-rw-r--r--iseq.c5
-rw-r--r--vm_core.h5
4 files changed, 12 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 1890b465ac..f66e2639b6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/compile.c b/compile.c
index 6af1dfda58..7dfaa81f47 100644
--- a/compile.c
+++ b/compile.c
@@ -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);
diff --git a/iseq.c b/iseq.c
index fdfd3b5f13..aadb28b8ee 100644
--- a/iseq.c
+++ b/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);
diff --git a/vm_core.h b/vm_core.h
index 5baf60faf5..970efec837 100644
--- a/vm_core.h
+++ b/vm_core.h
@@ -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;