mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* string.c: RDoc update for =~ method. a patch from Alex Young
<alex at blackkettle.org>. [ruby-core:08068] * io.c (pipe_open): backout unnecessary fix on 2006-06-26. [ruby-dev:28865] * eval.c (rb_yield_0): exact argument number check now done only for lambda Proc. * eval.c (rb_yield_0): add check for number of arguments, if there's one lambda block parameter. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@10412 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
3b989706df
commit
471e41ec70
5 changed files with 51 additions and 31 deletions
16
ChangeLog
16
ChangeLog
|
@ -1,3 +1,8 @@
|
|||
Tue Jun 27 23:03:49 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* string.c: RDoc update for =~ method. a patch from Alex Young
|
||||
<alex at blackkettle.org>. [ruby-core:08068]
|
||||
|
||||
Tue Jun 27 22:47:18 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
||||
|
||||
* ext/tk/tcltklib.c: forgot to update TCLTKLIB_RELEASE_DATE.
|
||||
|
@ -5,6 +10,17 @@ Tue Jun 27 22:47:18 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
|||
* ext/tk/lib/tk.rb (tk_tcl2ruby): [bug fix] somtimes fail to convert
|
||||
a tcl string to a ruby object if the tcl string includes "\n".
|
||||
|
||||
Tue Jun 27 20:05:14 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* io.c (pipe_open): backout unnecessary fix on 2006-06-26.
|
||||
[ruby-dev:28865]
|
||||
|
||||
* eval.c (rb_yield_0): exact argument number check now done only
|
||||
for lambda Proc.
|
||||
|
||||
* eval.c (rb_yield_0): add check for number of arguments, if
|
||||
there's one lambda block parameter.
|
||||
|
||||
Tue Jun 27 16:04:05 2006 WATANABE Hirofumi <eban@ruby-lang.org>
|
||||
|
||||
* win32/win32.h: define isascii on MinGW for msvcrt compatibility.
|
||||
|
|
47
eval.c
47
eval.c
|
@ -1047,7 +1047,7 @@ static NODE *compile(VALUE, const char*, int);
|
|||
|
||||
static VALUE rb_yield_0(VALUE, VALUE, VALUE, int);
|
||||
|
||||
#define YIELD_EXACT_ARGS 1
|
||||
#define YIELD_ARY_ARGS 1
|
||||
#define YIELD_PUBLIC_DEF 4
|
||||
#define YIELD_FUNC_AVALUE 1
|
||||
#define YIELD_FUNC_SVALUE 2
|
||||
|
@ -4667,7 +4667,7 @@ rb_yield_0(VALUE val, VALUE self, VALUE klass /* OK */, int flags)
|
|||
int old_vmode;
|
||||
struct FRAME frame;
|
||||
NODE *cnode = ruby_current_node;
|
||||
int pcall = flags & YIELD_EXACT_ARGS, lambda;
|
||||
int ary_args = flags & YIELD_ARY_ARGS, lambda;
|
||||
int state, broken = 0;
|
||||
|
||||
rb_need_block();
|
||||
|
@ -4701,16 +4701,20 @@ rb_yield_0(VALUE val, VALUE self, VALUE klass /* OK */, int flags)
|
|||
node = block->body;
|
||||
var = block->var;
|
||||
lambda = block->flags & BLOCK_LAMBDA;
|
||||
|
||||
if (var) {
|
||||
PUSH_TAG(PROT_NONE);
|
||||
if ((state = EXEC_TAG()) == 0) {
|
||||
NODE *bvar = NULL;
|
||||
block_var:
|
||||
if (var == (NODE*)1) { /* no parameter || */
|
||||
if (pcall && RARRAY(val)->len != 0) {
|
||||
rb_raise(rb_eArgError, "wrong number of arguments (%ld for 0)",
|
||||
RARRAY(val)->len);
|
||||
if (lambda && val != Qundef) {
|
||||
if (TYPE(val) != T_ARRAY) {
|
||||
rb_raise(rb_eArgError, "wrong number of arguments (1 for 0)");
|
||||
}
|
||||
else if (RARRAY(val)->len != 0) {
|
||||
rb_raise(rb_eArgError, "wrong number of arguments (%ld for 0)",
|
||||
RARRAY(val)->len);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (var == (NODE*)2) {
|
||||
|
@ -4725,7 +4729,7 @@ rb_yield_0(VALUE val, VALUE self, VALUE klass /* OK */, int flags)
|
|||
goto block_var;
|
||||
}
|
||||
else if (nd_type(var) == NODE_ARGS) {
|
||||
val = svalue_to_avalue(val);
|
||||
if (!ary_args) val = svalue_to_avalue(val);
|
||||
formal_assign(self, var, RARRAY(val)->len, RARRAY(val)->ptr, 0);
|
||||
}
|
||||
else if (nd_type(var) == NODE_BLOCK) {
|
||||
|
@ -4736,16 +4740,25 @@ rb_yield_0(VALUE val, VALUE self, VALUE klass /* OK */, int flags)
|
|||
goto block_var;
|
||||
}
|
||||
else if (nd_type(var) == NODE_MASGN) {
|
||||
massign(self, var, val, pcall);
|
||||
massign(self, var, val, lambda);
|
||||
}
|
||||
else {
|
||||
if (pcall) {
|
||||
if (RARRAY(val)->len == 0)
|
||||
val = Qnil;
|
||||
else
|
||||
val = RARRAY(val)->ptr[0];
|
||||
if (lambda) {
|
||||
if (val == Qundef) {
|
||||
rb_raise(rb_eArgError, "wrong number of arguments (0 for 1)");
|
||||
}
|
||||
if (TYPE(val) == T_ARRAY && RARRAY(val)->len != 1) {
|
||||
rb_raise(rb_eArgError, "wrong number of arguments (%ld for 1)",
|
||||
RARRAY(val)->len);
|
||||
}
|
||||
}
|
||||
assign(self, var, val, pcall);
|
||||
if (ary_args) {
|
||||
if (RARRAY(val)->len == 0)
|
||||
val = Qnil;
|
||||
else
|
||||
val = RARRAY(val)->ptr[0];
|
||||
}
|
||||
assign(self, var, val, lambda);
|
||||
}
|
||||
if (bvar) {
|
||||
VALUE blk;
|
||||
|
@ -4759,7 +4772,7 @@ rb_yield_0(VALUE val, VALUE self, VALUE klass /* OK */, int flags)
|
|||
POP_TAG();
|
||||
if (state) goto pop_state;
|
||||
}
|
||||
else if (pcall && RARRAY(val)->len != 0 &&
|
||||
else if (lambda && RARRAY(val)->len != 0 &&
|
||||
(!node || nd_type(node) != NODE_IFUNC ||
|
||||
node->nd_cfnc != bmcall)) {
|
||||
rb_raise(rb_eArgError, "wrong number of arguments (%ld for 0)",
|
||||
|
@ -8357,7 +8370,7 @@ proc_invoke(VALUE proc, VALUE args /* OK */, VALUE self, VALUE klass, int call)
|
|||
VALUE bvar = Qnil;
|
||||
|
||||
Data_Get_Struct(proc, struct BLOCK, data);
|
||||
pcall = call ? YIELD_EXACT_ARGS : 0;
|
||||
pcall = call ? YIELD_ARY_ARGS : 0;
|
||||
lambda = data->flags & BLOCK_LAMBDA;
|
||||
if (rb_block_given_p() && ruby_frame->callee) {
|
||||
if (klass != ruby_frame->this_class)
|
||||
|
@ -8481,7 +8494,7 @@ rb_proc_yield(int argc, VALUE *argv, VALUE proc)
|
|||
{
|
||||
switch (argc) {
|
||||
case 0:
|
||||
return proc_invoke(proc, Qnil, Qundef, 0, 0);
|
||||
return proc_invoke(proc, Qundef, Qundef, 0, 0);
|
||||
case 1:
|
||||
return proc_invoke(proc, argv[0], Qundef, 0, 0);
|
||||
default:
|
||||
|
|
|
@ -2927,8 +2927,7 @@ sock_accept_nonblock(sock)
|
|||
* * Socket#accept
|
||||
*/
|
||||
static VALUE
|
||||
sock_sysaccept(sock)
|
||||
VALUE sock;
|
||||
sock_sysaccept(VALUE sock)
|
||||
{
|
||||
OpenFile *fptr;
|
||||
VALUE sock2;
|
||||
|
|
10
io.c
10
io.c
|
@ -3029,14 +3029,8 @@ pipe_open(int argc, VALUE *argv, const char *mode)
|
|||
/* parent */
|
||||
if (pid == -1) {
|
||||
int e = errno;
|
||||
if ((modef & FMODE_READABLE)) {
|
||||
close(arg.pair[0]);
|
||||
close(arg.pair[1]);
|
||||
}
|
||||
if ((modef & FMODE_WRITABLE)) {
|
||||
close(arg.pair[0]);
|
||||
close(arg.pair[1]);
|
||||
}
|
||||
close(arg.pair[0]);
|
||||
close(arg.pair[1]);
|
||||
errno = e;
|
||||
rb_sys_fail(cmd);
|
||||
}
|
||||
|
|
6
string.c
6
string.c
|
@ -1241,13 +1241,11 @@ rb_str_rindex_m(int argc, VALUE *argv, VALUE str)
|
|||
* str =~ obj => fixnum or nil
|
||||
*
|
||||
* Match---If <i>obj</i> is a <code>Regexp</code>, use it as a pattern to match
|
||||
* against <i>str</i>. If <i>obj</i> is a <code>String</code>, look for it in
|
||||
* <i>str</i> (similar to <code>String#index</code>). Returns the position the
|
||||
* match starts, or <code>nil</code> if there is no match. Otherwise, invokes
|
||||
* against <i>str</i>,and returns the position the match starts, or
|
||||
* <code>nil</code> if there is no match. Otherwise, invokes
|
||||
* <i>obj.=~</i>, passing <i>str</i> as an argument. The default
|
||||
* <code>=~</code> in <code>Object</code> returns <code>false</code>.
|
||||
*
|
||||
* "cat o' 9 tails" =~ '\d' #=> nil
|
||||
* "cat o' 9 tails" =~ /\d/ #=> 7
|
||||
* "cat o' 9 tails" =~ 9 #=> false
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue