diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-06-13 11:31:27 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-06-13 11:31:27 +0000 |
commit | 25b54668bcba76f7b7ed8604a240a3677020f4e0 (patch) | |
tree | e23a8d3f06e248b77e410c97718a179011b99d1b /eval.c | |
parent | c90c44b1d327592f16520555f1f6480dc90df1f4 (diff) | |
download | ruby-25b54668bcba76f7b7ed8604a240a3677020f4e0.tar.gz ruby-25b54668bcba76f7b7ed8604a240a3677020f4e0.tar.xz ruby-25b54668bcba76f7b7ed8604a240a3677020f4e0.zip |
* 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: http://svn.ruby-lang.org/repos/ruby/trunk@10257 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 16 |
1 files changed, 10 insertions, 6 deletions
@@ -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 { |