From 7190c04417a52c29d1dcf6b2f04bb55b30cbfd9f Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 20 Sep 2014 01:23:02 +0000 Subject: compile.c: store IDs as Symbols * compile.c (iseq_set_arguments): store local variable IDs in temporary list as Symbols. previously these are stored as Fixnums to prevent from GC, but IDs of dynamic symbols can exceed Fixnum range and cause RangeError at inverting from Fixnum. [ruby-dev:48564] [Bug #10266] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47648 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- compile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'compile.c') diff --git a/compile.c b/compile.c index ac4e5bac22..93f0603568 100644 --- a/compile.c +++ b/compile.c @@ -1237,7 +1237,7 @@ iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_args) if (!required) required = rb_ary_tmp_new(1); list = required; } - rb_ary_push(list, INT2FIX(node->nd_body->nd_vid)); + rb_ary_push(list, ID2SYM(node->nd_body->nd_vid)); COMPILE_POPED(optargs, "kwarg", node); /* nd_type(node) == NODE_KW_ARG */ node = node->nd_next; i += 1; @@ -1251,7 +1251,7 @@ iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_args) keywords = required; } for (j = 0; j < i; j++) { - iseq->arg_keyword_table[j] = FIX2INT(RARRAY_AREF(keywords, j)); + iseq->arg_keyword_table[j] = SYM2ID(RARRAY_AREF(keywords, j)); } ADD_INSN(optargs, nd_line(args->kw_args), pop); } -- cgit v1.2.3