1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* insns.def: remove unused code.

* compile.c (compile_massign): fix to invoke to_splat on
  splat rhs (example: *a = *nil). [ruby-dev:31136]
* bootstraptest/test_massign.rb: add tests for above.
* compile.c (iseq_compile_each): disable excess optimization.
  [ruby-dev:31126]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12708 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ko1 2007-07-05 18:16:54 +00:00
parent b9171a73c4
commit 976bfae03b
4 changed files with 39 additions and 41 deletions

View file

@ -1,3 +1,15 @@
Fri Jul 6 03:06:58 2007 Koichi Sasada <ko1@atdot.net>
* insns.def: remove unused code.
* compile.c (compile_massign): fix to invoke to_splat on
splat rhs (example: *a = *nil). [ruby-dev:31136]
* bootstraptest/test_massign.rb: add tests for above.
* compile.c (iseq_compile_each): disable excess optimization.
[ruby-dev:31126]
Fri Jul 6 02:08:25 2007 Koichi Sasada <ko1@atdot.net>
* insns.def: fix to invoke nil.to_splat on NODE_ARGSCAT.

View file

@ -1,6 +1,9 @@
assert_equal '[[1], 2, 3]', '*v1, (a, b) = [1,[2, 3]]; [v1, a, b]'
assert_equal '[[1], 2, 3]', '*v1,(*), (a, b) = [1,:x,[2, 3]]; [v1, a, b]'
assert_equal '[]', '*a = *nil; a'
assert_equal '[nil]', '*a = nil; a'
=begin
# generated by this script:

View file

@ -2044,21 +2044,18 @@ compile_massign(rb_iseq_t *iseq, LINK_ANCHOR *ret,
break;
case NODE_SPLAT:
COMPILE(ret, "rhs to ary (splat)", rhsn->nd_head);
ADD_INSN2(ret, nd_line(rhsn), expandarray, INT2FIX(llen),
INT2FIX(lhs_splat));
COMPILE(ret, "rhs to ary (splat)", rhsn);
ADD_INSN2(ret, nd_line(rhsn), expandarray, INT2FIX(llen), INT2FIX(lhs_splat));
break;
case NODE_ARGSCAT:
COMPILE(ret, "rhs to argscat", rhsn);
ADD_INSN2(ret, nd_line(rhsn), expandarray,
INT2FIX(llen), INT2FIX(lhs_splat));
ADD_INSN2(ret, nd_line(rhsn), expandarray, INT2FIX(llen), INT2FIX(lhs_splat));
break;
default:
COMPILE(ret, "rhs to ary (splat/default)", rhsn);
ADD_INSN2(ret, nd_line(rhsn), expandarray, INT2FIX(llen),
INT2FIX(lhs_splat));
/* rb_compile_error(ERROR_ARGS "unknown rhs: %s", ruby_node_name(nd_type(rhsn))); */
ADD_INSN2(ret, nd_line(rhsn), expandarray, INT2FIX(llen), INT2FIX(lhs_splat));
}
}
else {
@ -3974,9 +3971,11 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
break;
}
case NODE_SPLAT:{
COMPILE_(ret, "splat", node->nd_head, poped);
if (!poped) {
ADD_INSN1(ret, nd_line(node), splatarray, Qfalse);
COMPILE(ret, "splat", node->nd_head);
ADD_INSN1(ret, nd_line(node), splatarray, Qfalse);
if (poped) {
ADD_INSN(ret, nd_line(node), pop);
}
break;
}

View file

@ -505,40 +505,24 @@ expandarray
}
}
else {
if ((long)num >= 0) {
int len;
if (TYPE(ary) != T_ARRAY) {
ary = rb_ary_to_ary(ary);
}
len = RARRAY_LEN(ary);
for (i = 0; i < len && i < num; i++) {
PUSH(RARRAY_PTR(ary)[i]);
}
for (; i < num; i++) {
PUSH(Qnil);
}
if (flag) {
if (len > num) {
PUSH(rb_ary_new4(len - num, &RARRAY_PTR(ary)[num]));
}
else {
PUSH(rb_ary_new());
}
}
int len;
if (TYPE(ary) != T_ARRAY) {
ary = rb_ary_to_ary(ary);
}
else {
long holdnum = -num;
VALUE val;
val = rb_ary_new4(holdnum, STACK_ADDR_FROM_TOP(holdnum));
if (CLASS_OF(ary) == rb_cArray) {
val = rb_ary_concat(val, ary);
len = RARRAY_LEN(ary);
for (i = 0; i < len && i < num; i++) {
PUSH(RARRAY_PTR(ary)[i]);
}
for (; i < num; i++) {
PUSH(Qnil);
}
if (flag) {
if (len > num) {
PUSH(rb_ary_new4(len - num, &RARRAY_PTR(ary)[num]));
}
else {
rb_ary_push(val, ary);
PUSH(rb_ary_new());
}
POPN(holdnum);
PUSH(val);
}
}
}