summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-06-13 11:31:27 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-06-13 11:31:27 +0000
commit5a712cfb8ce6947dfc5bcd8b7f27153dd576e13a (patch)
treee23a8d3f06e248b77e410c97718a179011b99d1b /eval.c
parentf2ded65a58f6fed573df3e33f5278796ea2bf26a (diff)
* ext/socket/socket.c (Init_socket): remove obsolete constants:
IPsocket, TCPsocket, SOCKSsocket, TCPserver, UDPsocket, UNIXsocket, UNIXserver. * eval.c (formal_assign): post splat arguments should have had higher priority than optional arguments, since they are mandatory. [ruby-dev:28715] * eval.c (VIS_MASK): broken. should be 15. [ruby-dev:28715] * io.c (argf_getc): should return one-character string. [ruby-dev:28715] * io.c (rb_io_readchar): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@10257 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/eval.c b/eval.c
index 5f5152b1f8..7fae5300ab 100644
--- a/eval.c
+++ b/eval.c
@@ -254,7 +254,7 @@ static int vis_mode;
#define VIS_PROTECTED 2
#define VIS_MODFUNC 5
#define VIS_LOCAL 8
-#define VIS_MASK 16
+#define VIS_MASK 15
#define VIS_SET(f) (vis_mode=(f))
#define VIS_TEST(f) (vis_mode&(f))
#define VIS_MODE() (vis_mode)
@@ -5555,6 +5555,7 @@ formal_assign(VALUE recv, NODE *node, int argc, const VALUE *argv, VALUE *local_
{
int i;
int nopt = 0;
+ int npost = 0;
if (nd_type(node) != NODE_ARGS) {
rb_bug("no argument-node");
@@ -5591,18 +5592,23 @@ formal_assign(VALUE recv, NODE *node, int argc, const VALUE *argv, VALUE *local_
}
}
argv += i; argc -= i;
+ if (node->nd_rest && nd_type(node->nd_rest) == NODE_POSTARG) {
+ npost = node->nd_rest->nd_head->nd_alen;
+ }
if (node->nd_opt) {
NODE *opt = node->nd_opt;
+ int ac = argc - npost;
- while (opt && argc) {
+ while (opt && ac) {
assign(recv, opt->nd_head, *argv, 1);
- argv++; argc--;
+ argv++; ac--;
++i;
opt = opt->nd_next;
}
if (opt) {
rb_eval(recv, opt);
}
+ argc = ac + npost;
}
if (!node->nd_rest) {
i = nopt;
@@ -5613,9 +5619,7 @@ formal_assign(VALUE recv, NODE *node, int argc, const VALUE *argv, VALUE *local_
if (argc > 0) {
int n = 1;
v = rb_ary_new4(argc,argv);
- if (nd_type(node->nd_rest) == NODE_POSTARG) {
- n += node->nd_rest->nd_head->nd_alen;
- }
+ n += npost;
i += n*256;
}
else {