зеркало из https://github.com/github/ruby.git
* eval.c (proc_alloc): re-unification of Block and Proc. Block
class is no longer available. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3948 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
5fb3efb267
Коммит
590a37880c
|
@ -1,3 +1,8 @@
|
|||
Mon Jun 16 16:06:47 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* eval.c (proc_alloc): re-unification of Block and Proc. Block
|
||||
class is no longer available.
|
||||
|
||||
Mon Jun 16 14:43:14 2003 WATANABE Hirofumi <eban@ruby-lang.org>
|
||||
|
||||
* bcc32/Makefile.sub: undefine HAVE_GETGROUPS.
|
||||
|
|
2
class.c
2
class.c
|
@ -879,7 +879,7 @@ rb_scan_args(argc, argv, fmt, va_alist)
|
|||
if (*p == '&') {
|
||||
var = va_arg(vargs, VALUE*);
|
||||
if (rb_block_given_p()) {
|
||||
*var = rb_block_new();
|
||||
*var = rb_block_proc();
|
||||
}
|
||||
else {
|
||||
*var = Qnil;
|
||||
|
|
210
eval.c
210
eval.c
|
@ -95,7 +95,7 @@ char *strrchr _((const char*,const char));
|
|||
|
||||
VALUE rb_cBlock, rb_cProc;
|
||||
static VALUE rb_cBinding;
|
||||
static VALUE block_invoke _((VALUE,VALUE,VALUE,VALUE));
|
||||
static VALUE proc_invoke _((VALUE,VALUE,VALUE,VALUE));
|
||||
static VALUE rb_f_binding _((VALUE));
|
||||
static void rb_f_END _((void));
|
||||
static VALUE rb_f_block_given_p _((void));
|
||||
|
@ -635,7 +635,7 @@ struct BLOCK {
|
|||
#define BLOCK_D_SCOPE 1
|
||||
#define BLOCK_DYNAMIC 2
|
||||
#define BLOCK_ORPHAN 4
|
||||
#define BLOCK_PROC 8
|
||||
#define BLOCK_LAMBDA 8
|
||||
|
||||
static struct BLOCK *ruby_block;
|
||||
|
||||
|
@ -2258,12 +2258,12 @@ call_trace_func(event, node, self, id, klass)
|
|||
PUSH_TAG(PROT_NONE);
|
||||
if ((state = EXEC_TAG()) == 0) {
|
||||
srcfile = rb_str_new2(ruby_sourcefile?ruby_sourcefile:"(ruby)");
|
||||
block_invoke(trace_func, rb_ary_new3(6, rb_str_new2(event),
|
||||
srcfile,
|
||||
INT2FIX(ruby_sourceline),
|
||||
id?ID2SYM(id):Qnil,
|
||||
self?rb_f_binding(self):Qnil,
|
||||
klass),
|
||||
proc_invoke(trace_func, rb_ary_new3(6, rb_str_new2(event),
|
||||
srcfile,
|
||||
INT2FIX(ruby_sourceline),
|
||||
id?ID2SYM(id):Qnil,
|
||||
self?rb_f_binding(self):Qnil,
|
||||
klass),
|
||||
Qundef, 0);
|
||||
}
|
||||
POP_TMPTAG(); /* do not propagate retval */
|
||||
|
@ -3232,7 +3232,7 @@ rb_eval(self, n)
|
|||
if (ruby_scope->local_vars == 0)
|
||||
rb_bug("unexpected block argument");
|
||||
if (rb_block_given_p()) {
|
||||
result = rb_block_new();
|
||||
result = rb_block_proc();
|
||||
ruby_scope->local_vars[node->nd_cnt] = result;
|
||||
}
|
||||
else {
|
||||
|
@ -4895,7 +4895,7 @@ rb_call0(klass, recv, id, oid, argc, argv, body, nosuper)
|
|||
break;
|
||||
|
||||
case NODE_BMETHOD:
|
||||
result = block_invoke(body->nd_cval, rb_ary_new4(argc, argv), recv, klass);
|
||||
result = proc_invoke(body->nd_cval, rb_ary_new4(argc, argv), recv, klass);
|
||||
break;
|
||||
|
||||
case NODE_SCOPE:
|
||||
|
@ -6379,7 +6379,7 @@ call_end_proc(data)
|
|||
ruby_frame->self = ruby_frame->prev->self;
|
||||
ruby_frame->last_func = 0;
|
||||
ruby_frame->last_class = 0;
|
||||
block_invoke(data, rb_ary_new2(0), Qundef, 0);
|
||||
proc_invoke(data, rb_ary_new2(0), Qundef, 0);
|
||||
POP_FRAME();
|
||||
POP_ITER();
|
||||
}
|
||||
|
@ -6389,7 +6389,7 @@ rb_f_END()
|
|||
{
|
||||
PUSH_FRAME();
|
||||
ruby_frame->argc = 0;
|
||||
rb_set_end_proc(call_end_proc, rb_block_new());
|
||||
rb_set_end_proc(call_end_proc, rb_block_proc());
|
||||
POP_FRAME();
|
||||
}
|
||||
|
||||
|
@ -6398,8 +6398,7 @@ rb_f_at_exit()
|
|||
{
|
||||
VALUE proc;
|
||||
|
||||
proc = rb_f_lambda();
|
||||
|
||||
proc = rb_block_proc();
|
||||
rb_set_end_proc(call_end_proc, proc);
|
||||
return proc;
|
||||
}
|
||||
|
@ -6711,7 +6710,7 @@ frame_dup(frame)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
block_clone(self)
|
||||
proc_clone(self)
|
||||
VALUE self;
|
||||
{
|
||||
struct BLOCK *orig, *data;
|
||||
|
@ -6775,26 +6774,26 @@ rb_f_binding(self)
|
|||
return bind;
|
||||
}
|
||||
|
||||
#define BLOCK_T3 FL_USER1
|
||||
#define BLOCK_T4 FL_USER2
|
||||
#define BLOCK_TMAX (FL_USER1|FL_USER2)
|
||||
#define BLOCK_TMASK (FL_USER1|FL_USER2)
|
||||
#define PROC_T3 FL_USER1
|
||||
#define PROC_T4 FL_USER2
|
||||
#define PROC_TMAX (FL_USER1|FL_USER2)
|
||||
#define PROC_TMASK (FL_USER1|FL_USER2)
|
||||
|
||||
static void
|
||||
block_save_safe_level(data)
|
||||
proc_save_safe_level(data)
|
||||
VALUE data;
|
||||
{
|
||||
if (OBJ_TAINTED(data)) {
|
||||
switch (ruby_safe_level) {
|
||||
case 3:
|
||||
FL_SET(data, BLOCK_T3);
|
||||
FL_SET(data, PROC_T3);
|
||||
break;
|
||||
case 4:
|
||||
FL_SET(data, BLOCK_T4);
|
||||
FL_SET(data, PROC_T4);
|
||||
break;
|
||||
default:
|
||||
if (ruby_safe_level > 4) {
|
||||
FL_SET(data, BLOCK_TMAX);
|
||||
FL_SET(data, PROC_TMAX);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -6802,16 +6801,16 @@ block_save_safe_level(data)
|
|||
}
|
||||
|
||||
static int
|
||||
block_get_safe_level(data)
|
||||
proc_get_safe_level(data)
|
||||
VALUE data;
|
||||
{
|
||||
if (OBJ_TAINTED(data)) {
|
||||
switch (RBASIC(data)->flags & BLOCK_TMASK) {
|
||||
case BLOCK_T3:
|
||||
switch (RBASIC(data)->flags & PROC_TMASK) {
|
||||
case PROC_T3:
|
||||
return 3;
|
||||
case BLOCK_T4:
|
||||
case PROC_T4:
|
||||
return 4;
|
||||
case BLOCK_TMAX:
|
||||
case PROC_TMAX:
|
||||
return 5;
|
||||
}
|
||||
return 3;
|
||||
|
@ -6820,16 +6819,16 @@ block_get_safe_level(data)
|
|||
}
|
||||
|
||||
static void
|
||||
block_set_safe_level(data)
|
||||
proc_set_safe_level(data)
|
||||
VALUE data;
|
||||
{
|
||||
if (OBJ_TAINTED(data)) {
|
||||
ruby_safe_level = block_get_safe_level(data);
|
||||
ruby_safe_level = proc_get_safe_level(data);
|
||||
}
|
||||
}
|
||||
|
||||
static VALUE
|
||||
block_alloc(klass, proc)
|
||||
proc_alloc(klass, proc)
|
||||
VALUE klass;
|
||||
int proc;
|
||||
{
|
||||
|
@ -6871,9 +6870,9 @@ block_alloc(klass, proc)
|
|||
}
|
||||
}
|
||||
scope_dup(data->scope);
|
||||
block_save_safe_level(block);
|
||||
proc_save_safe_level(block);
|
||||
if (proc) {
|
||||
data->flags |= BLOCK_PROC;
|
||||
data->flags |= BLOCK_LAMBDA;
|
||||
}
|
||||
else {
|
||||
ruby_block->block_obj = block;
|
||||
|
@ -6882,40 +6881,35 @@ block_alloc(klass, proc)
|
|||
return block;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
block_s_new(argc, argv, klass)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
VALUE klass;
|
||||
{
|
||||
VALUE block = block_alloc(klass, Qfalse);
|
||||
|
||||
rb_obj_call_init(block, argc, argv);
|
||||
return block;
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_block_new()
|
||||
{
|
||||
return block_alloc(rb_cBlock, Qfalse);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
proc_s_new(argc, argv, klass)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
VALUE klass;
|
||||
{
|
||||
VALUE block = block_alloc(klass, Qtrue);
|
||||
VALUE block = proc_alloc(klass, Qfalse);
|
||||
|
||||
rb_obj_call_init(block, argc, argv);
|
||||
return block;
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_block_proc()
|
||||
{
|
||||
return proc_alloc(rb_cProc, Qfalse);
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_f_lambda()
|
||||
{
|
||||
return block_alloc(rb_cProc, Qtrue);
|
||||
rb_warn("rb_f_lambda() is deprecated; use rb_block_proc() instead");
|
||||
return proc_alloc(rb_cProc, Qtrue);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
proc_lambda()
|
||||
{
|
||||
return proc_alloc(rb_cProc, Qtrue);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -6933,8 +6927,8 @@ block_orphan(data)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
block_invoke(block, args, self, klass)
|
||||
VALUE block, args; /* OK */
|
||||
proc_invoke(proc, args, self, klass)
|
||||
VALUE proc, args; /* OK */
|
||||
VALUE self, klass;
|
||||
{
|
||||
struct BLOCK * volatile old_block;
|
||||
|
@ -6950,13 +6944,13 @@ block_invoke(block, args, self, klass)
|
|||
|
||||
if (rb_block_given_p() && ruby_frame->last_func) {
|
||||
rb_warning("block for %s#%s is useless",
|
||||
rb_obj_classname(block),
|
||||
rb_obj_classname(proc),
|
||||
rb_id2name(ruby_frame->last_func));
|
||||
}
|
||||
|
||||
Data_Get_Struct(block, struct BLOCK, data);
|
||||
Data_Get_Struct(proc, struct BLOCK, data);
|
||||
orphan = block_orphan(data);
|
||||
pcall = data->flags & BLOCK_PROC;
|
||||
pcall = data->flags & BLOCK_LAMBDA;
|
||||
|
||||
ruby_wrapper = data->wrapper;
|
||||
ruby_dyna_vars = data->dyna_vars;
|
||||
|
@ -6972,7 +6966,7 @@ block_invoke(block, args, self, klass)
|
|||
PUSH_TAG(PROT_NONE);
|
||||
state = EXEC_TAG();
|
||||
if (state == 0) {
|
||||
block_set_safe_level(block);
|
||||
proc_set_safe_level(proc);
|
||||
result = rb_yield_0(args, self, self!=Qundef?CLASS_OF(self):0, pcall, Qtrue);
|
||||
}
|
||||
POP_TAG();
|
||||
|
@ -6996,22 +6990,20 @@ block_invoke(block, args, self, klass)
|
|||
}
|
||||
/* fall through */
|
||||
case TAG_BREAK:
|
||||
case TAG_RETURN:
|
||||
if (pcall) {
|
||||
result = prot_tag->retval;
|
||||
}
|
||||
else if (orphan) {
|
||||
localjump_error("break from block-closure", prot_tag->retval, state);
|
||||
else if (orphan) { /* orphan block */
|
||||
localjump_error("%s from block-closure",
|
||||
state == TAG_BREAK ? "break" : "return",
|
||||
prot_tag->retval, state);
|
||||
}
|
||||
else {
|
||||
ruby_block->tag->dst = incoming_state;
|
||||
JUMP_TAG(incoming_state);
|
||||
}
|
||||
break;
|
||||
case TAG_RETURN:
|
||||
if (orphan) { /* orphan block */
|
||||
localjump_error("return from block-closure", prot_tag->retval, state);
|
||||
}
|
||||
/* fall through */
|
||||
default:
|
||||
JUMP_TAG(state);
|
||||
}
|
||||
|
@ -7019,24 +7011,24 @@ block_invoke(block, args, self, klass)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
block_call(block, args)
|
||||
VALUE block, args; /* OK */
|
||||
proc_call(proc, args)
|
||||
VALUE proc, args; /* OK */
|
||||
{
|
||||
return block_invoke(block, args, Qundef, 0);
|
||||
return proc_invoke(proc, args, Qundef, 0);
|
||||
}
|
||||
|
||||
static VALUE bmcall _((VALUE, VALUE));
|
||||
static VALUE method_arity _((VALUE));
|
||||
|
||||
static VALUE
|
||||
block_arity(block)
|
||||
VALUE block;
|
||||
proc_arity(proc)
|
||||
VALUE proc;
|
||||
{
|
||||
struct BLOCK *data;
|
||||
NODE *list;
|
||||
int n;
|
||||
|
||||
Data_Get_Struct(block, struct BLOCK, data);
|
||||
Data_Get_Struct(proc, struct BLOCK, data);
|
||||
if (data->var == 0) {
|
||||
if (data->body && nd_type(data->body) == NODE_IFUNC &&
|
||||
data->body->nd_cfnc == bmcall) {
|
||||
|
@ -7062,7 +7054,7 @@ block_arity(block)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
block_eq(self, other)
|
||||
proc_eq(self, other)
|
||||
VALUE self, other;
|
||||
{
|
||||
struct BLOCK *data, *data2;
|
||||
|
@ -7078,7 +7070,7 @@ block_eq(self, other)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
block_to_s(self, other)
|
||||
proc_to_s(self, other)
|
||||
VALUE self, other;
|
||||
{
|
||||
struct BLOCK *data;
|
||||
|
@ -7106,20 +7098,20 @@ block_to_s(self, other)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
block_to_self(self)
|
||||
proc_to_self(self)
|
||||
VALUE self;
|
||||
{
|
||||
return self;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
block_binding(block)
|
||||
VALUE block;
|
||||
proc_binding(proc)
|
||||
VALUE proc;
|
||||
{
|
||||
struct BLOCK *orig, *data;
|
||||
VALUE bind;
|
||||
|
||||
Data_Get_Struct(block, struct BLOCK, orig);
|
||||
Data_Get_Struct(proc, struct BLOCK, orig);
|
||||
bind = Data_Make_Struct(rb_cBinding,struct BLOCK,blk_mark,blk_free,data);
|
||||
MEMCPY(data, orig, struct BLOCK, 1);
|
||||
frame_dup(&data->frame);
|
||||
|
@ -7156,7 +7148,7 @@ block_pass(self, node)
|
|||
return result;
|
||||
}
|
||||
if (!rb_obj_is_block(block)) {
|
||||
b = rb_check_convert_type(block, T_DATA, "Block", "to_block");
|
||||
b = rb_check_convert_type(block, T_DATA, "Block", "to_proc");
|
||||
if (!rb_obj_is_block(b)) {
|
||||
rb_raise(rb_eTypeError, "wrong argument type %s (expected Block)",
|
||||
rb_obj_classname(block));
|
||||
|
@ -7165,7 +7157,7 @@ block_pass(self, node)
|
|||
}
|
||||
|
||||
if (ruby_safe_level >= 1 && OBJ_TAINTED(block)) {
|
||||
if (ruby_safe_level > block_get_safe_level(block)) {
|
||||
if (ruby_safe_level > proc_get_safe_level(block)) {
|
||||
rb_raise(rb_eSecurityError, "Insecure: tainted block value");
|
||||
}
|
||||
}
|
||||
|
@ -7185,7 +7177,7 @@ block_pass(self, node)
|
|||
PUSH_TAG(PROT_NONE);
|
||||
state = EXEC_TAG();
|
||||
if (state == 0) {
|
||||
block_set_safe_level(block);
|
||||
proc_set_safe_level(block);
|
||||
if (safe > ruby_safe_level)
|
||||
ruby_safe_level = safe;
|
||||
result = rb_eval(self, node->nd_iter);
|
||||
|
@ -7446,7 +7438,7 @@ method_arity(method)
|
|||
return INT2FIX(0);
|
||||
case NODE_BMETHOD:
|
||||
case NODE_DMETHOD:
|
||||
return block_arity(method);
|
||||
return proc_arity(method);
|
||||
default:
|
||||
body = body->nd_next; /* skip NODE_SCOPE */
|
||||
if (nd_type(body) == NODE_BLOCK)
|
||||
|
@ -7508,7 +7500,7 @@ method_inspect(method)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
mblock(method)
|
||||
mproc(method)
|
||||
VALUE method;
|
||||
{
|
||||
VALUE proc;
|
||||
|
@ -7516,7 +7508,7 @@ mblock(method)
|
|||
/* emulate ruby's method call */
|
||||
PUSH_ITER(ITER_CUR);
|
||||
PUSH_FRAME();
|
||||
proc = rb_block_new();
|
||||
proc = rb_block_proc();
|
||||
POP_FRAME();
|
||||
POP_ITER();
|
||||
|
||||
|
@ -7548,22 +7540,14 @@ rb_proc_new(func, val)
|
|||
VALUE (*func)(ANYARGS); /* VALUE yieldarg[, VALUE procarg] */
|
||||
VALUE val;
|
||||
{
|
||||
return rb_iterate((VALUE(*)_((VALUE)))mblock, 0, func, val);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
method_block(method)
|
||||
VALUE method;
|
||||
{
|
||||
return rb_iterate((VALUE(*)_((VALUE)))mblock, method, bmcall, method);
|
||||
return rb_iterate((VALUE(*)_((VALUE)))mproc, 0, func, val);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
method_proc(method)
|
||||
VALUE method;
|
||||
{
|
||||
rb_warn("Method#to_proc is deprecated; use Method#to_block");
|
||||
return method_block(method);
|
||||
return rb_iterate((VALUE(*)_((VALUE)))mproc, method, bmcall, method);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -7589,7 +7573,7 @@ rb_mod_define_method(argc, argv, mod)
|
|||
|
||||
if (argc == 1) {
|
||||
id = rb_to_id(argv[0]);
|
||||
body = rb_f_lambda();
|
||||
body = proc_lambda();
|
||||
}
|
||||
else if (argc == 2) {
|
||||
id = rb_to_id(argv[0]);
|
||||
|
@ -7608,7 +7592,7 @@ rb_mod_define_method(argc, argv, mod)
|
|||
else if (RDATA(body)->dmark == (RUBY_DATA_FUNC)blk_mark) {
|
||||
struct BLOCK *block;
|
||||
|
||||
body = block_clone(body);
|
||||
body = proc_clone(body);
|
||||
Data_Get_Struct(body, struct BLOCK, block);
|
||||
block->frame.last_func = id;
|
||||
block->frame.orig_func = id;
|
||||
|
@ -7647,28 +7631,27 @@ Init_Proc()
|
|||
sysstack_error = rb_exc_new2(rb_eSysStackError, "stack level too deep");
|
||||
rb_global_variable(&sysstack_error);
|
||||
|
||||
rb_cBlock = rb_define_class("Block", rb_cObject);
|
||||
rb_undef_alloc_func(rb_cBlock);
|
||||
rb_define_singleton_method(rb_cBlock, "new", block_s_new, -1);
|
||||
|
||||
rb_define_method(rb_cBlock, "clone", block_clone, 0);
|
||||
rb_define_method(rb_cBlock, "call", block_call, -2);
|
||||
rb_define_method(rb_cBlock, "arity", block_arity, 0);
|
||||
rb_define_method(rb_cBlock, "[]", block_call, -2);
|
||||
rb_define_method(rb_cBlock, "==", block_eq, 1);
|
||||
rb_define_method(rb_cBlock, "to_s", block_to_s, 0);
|
||||
rb_define_method(rb_cBlock, "to_block", block_to_self, 0);
|
||||
rb_define_method(rb_cBlock, "binding", block_binding, 0);
|
||||
|
||||
rb_cProc = rb_define_class("Proc", rb_cBlock);
|
||||
rb_cProc = rb_define_class("Proc", rb_cObject);
|
||||
rb_cBlock = rb_cProc;
|
||||
rb_undef_alloc_func(rb_cProc);
|
||||
rb_define_singleton_method(rb_cProc, "new", proc_s_new, -1);
|
||||
rb_define_global_function("proc", rb_f_lambda, 0);
|
||||
rb_define_global_function("lambda", rb_f_lambda, 0);
|
||||
|
||||
rb_define_method(rb_cProc, "clone", proc_clone, 0);
|
||||
rb_define_method(rb_cProc, "call", proc_call, -2);
|
||||
rb_define_method(rb_cProc, "arity", proc_arity, 0);
|
||||
rb_define_method(rb_cProc, "[]", proc_call, -2);
|
||||
rb_define_method(rb_cProc, "==", proc_eq, 1);
|
||||
rb_define_method(rb_cProc, "to_s", proc_to_s, 0);
|
||||
rb_define_method(rb_cProc, "to_proc", proc_to_self, 0);
|
||||
rb_define_method(rb_cProc, "binding", proc_binding, 0);
|
||||
|
||||
rb_define_global_function("proc", proc_lambda, 0);
|
||||
rb_define_global_function("lambda", proc_lambda, 0);
|
||||
|
||||
rb_cBinding = rb_define_class("Binding", rb_cObject);
|
||||
rb_undef_alloc_func(rb_cBinding);
|
||||
rb_undef_method(CLASS_OF(rb_cBinding), "new");
|
||||
rb_define_method(rb_cBinding, "clone", block_clone, 0);
|
||||
rb_define_method(rb_cBinding, "clone", proc_clone, 0);
|
||||
rb_define_global_function("binding", rb_f_binding, 0);
|
||||
|
||||
rb_cMethod = rb_define_class("Method", rb_cObject);
|
||||
|
@ -7681,7 +7664,6 @@ Init_Proc()
|
|||
rb_define_method(rb_cMethod, "arity", method_arity, 0);
|
||||
rb_define_method(rb_cMethod, "inspect", method_inspect, 0);
|
||||
rb_define_method(rb_cMethod, "to_s", method_inspect, 0);
|
||||
rb_define_method(rb_cMethod, "to_block", method_block, 0);
|
||||
rb_define_method(rb_cMethod, "to_proc", method_proc, 0);
|
||||
rb_define_method(rb_cMethod, "unbind", method_unbind, 0);
|
||||
rb_define_method(rb_mKernel, "method", rb_obj_method, 1);
|
||||
|
|
|
@ -443,11 +443,11 @@ module TkComm
|
|||
private :install_bind, :tk_event_sequence,
|
||||
:_bind_core, :_bind, :_bind_append, :_bind_remove, :_bindinfo
|
||||
|
||||
def bind(tagOrClass, context, cmd=Block.new, args=nil)
|
||||
def bind(tagOrClass, context, cmd=Proc.new, args=nil)
|
||||
_bind(["bind", tagOrClass], context, cmd, args)
|
||||
end
|
||||
|
||||
def bind_append(tagOrClass, context, cmd=Block.new, args=nil)
|
||||
def bind_append(tagOrClass, context, cmd=Proc.new, args=nil)
|
||||
_bind_append(["bind", tagOrClass], context, cmd, args)
|
||||
end
|
||||
|
||||
|
@ -459,11 +459,11 @@ module TkComm
|
|||
_bindinfo(['bind', tagOrClass], context)
|
||||
end
|
||||
|
||||
def bind_all(context, cmd=Block.new, args=nil)
|
||||
def bind_all(context, cmd=Proc.new, args=nil)
|
||||
_bind(['bind', 'all'], context, cmd, args)
|
||||
end
|
||||
|
||||
def bind_append_all(context, cmd=Block.new, args=nil)
|
||||
def bind_append_all(context, cmd=Proc.new, args=nil)
|
||||
_bind_append(['bind', 'all'], context, cmd, args)
|
||||
end
|
||||
|
||||
|
@ -515,7 +515,7 @@ module TkCore
|
|||
fail TkCallbackContinue, "Tk callback returns 'continue' status"
|
||||
end
|
||||
|
||||
def after(ms, cmd=Block.new)
|
||||
def after(ms, cmd=Proc.new)
|
||||
myid = _curr_cmd_id
|
||||
cmdid = install_cmd(cmd)
|
||||
tk_call("after",ms,cmdid)
|
||||
|
@ -533,7 +533,7 @@ module TkCore
|
|||
# end
|
||||
end
|
||||
|
||||
def after_idle(cmd=Block.new)
|
||||
def after_idle(cmd=Proc.new)
|
||||
myid = _curr_cmd_id
|
||||
cmdid = install_cmd(cmd)
|
||||
tk_call('after','idle',cmdid)
|
||||
|
@ -873,10 +873,10 @@ module Tk
|
|||
end
|
||||
|
||||
module Scrollable
|
||||
def xscrollcommand(cmd=Block.new)
|
||||
def xscrollcommand(cmd=Proc.new)
|
||||
configure_cmd 'xscrollcommand', cmd
|
||||
end
|
||||
def yscrollcommand(cmd=Block.new)
|
||||
def yscrollcommand(cmd=Proc.new)
|
||||
configure_cmd 'yscrollcommand', cmd
|
||||
end
|
||||
def xview(*index)
|
||||
|
@ -1105,11 +1105,11 @@ else
|
|||
end
|
||||
|
||||
module TkBindCore
|
||||
def bind(context, cmd=Block.new, args=nil)
|
||||
def bind(context, cmd=Proc.new, args=nil)
|
||||
Tk.bind(to_eval, context, cmd, args)
|
||||
end
|
||||
|
||||
def bind_append(context, cmd=Block.new, args=nil)
|
||||
def bind_append(context, cmd=Proc.new, args=nil)
|
||||
Tk.bind_append(to_eval, context, cmd, args)
|
||||
end
|
||||
|
||||
|
@ -2163,7 +2163,7 @@ module TkOption
|
|||
proc_str = TkOption.get(self::CARRIER, id.id2name, '')
|
||||
proc_str = '{' + proc_str + '}' unless /\A\{.*\}\Z/ =~ proc_str
|
||||
proc_str = __check_proc_string__(proc_str)
|
||||
res_proc = eval 'Block.new' + proc_str
|
||||
res_proc = eval 'Proc.new' + proc_str
|
||||
self::METHOD_TBL[id] = res_proc
|
||||
end
|
||||
proc{
|
||||
|
@ -2857,7 +2857,7 @@ class TkWindow<TkObject
|
|||
self
|
||||
end
|
||||
|
||||
def command(cmd=Block.new)
|
||||
def command(cmd=Proc.new)
|
||||
configure_cmd 'command', cmd
|
||||
end
|
||||
|
||||
|
@ -3475,10 +3475,10 @@ class TkMenu<TkWindow
|
|||
def postcascade(index)
|
||||
tk_send 'postcascade', index
|
||||
end
|
||||
def postcommand(cmd=Block.new)
|
||||
def postcommand(cmd=Proc.new)
|
||||
configure_cmd 'postcommand', cmd
|
||||
end
|
||||
def tearoffcommand(cmd=Block.new)
|
||||
def tearoffcommand(cmd=Proc.new)
|
||||
configure_cmd 'tearoffcommand', cmd
|
||||
end
|
||||
def menutype(index)
|
||||
|
|
|
@ -81,11 +81,11 @@ class TkCanvas<TkWindow
|
|||
list(tk_send('bbox', tagid(tagOrId), *tags.collect{|t| tagid(t)}))
|
||||
end
|
||||
|
||||
def itembind(tag, context, cmd=Block.new, args=nil)
|
||||
def itembind(tag, context, cmd=Proc.new, args=nil)
|
||||
_bind([path, "bind", tagid(tag)], context, cmd, args)
|
||||
end
|
||||
|
||||
def itembind_append(tag, context, cmd=Block.new, args=nil)
|
||||
def itembind_append(tag, context, cmd=Proc.new, args=nil)
|
||||
_bind_append([path, "bind", tagid(tag)], context, cmd, args)
|
||||
end
|
||||
|
||||
|
@ -346,7 +346,7 @@ module TkcTagAccess
|
|||
@c.bbox(@id)
|
||||
end
|
||||
|
||||
def bind(seq, cmd=Block.new, args=nil)
|
||||
def bind(seq, cmd=Proc.new, args=nil)
|
||||
@c.itembind @id, seq, cmd, args
|
||||
end
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ class TkEntry<TkLabel
|
|||
attr :widget
|
||||
end
|
||||
|
||||
def initialize(cmd = Block.new, args=nil)
|
||||
def initialize(cmd = Proc.new, args=nil)
|
||||
if args
|
||||
@id = install_cmd(proc{|*arg|
|
||||
TkUtil.eval_cmd cmd, *arg
|
||||
|
|
|
@ -172,11 +172,11 @@ class TkText<TkTextWin
|
|||
tk_send 'tag', 'add', tag, index1, index2
|
||||
end
|
||||
|
||||
def tag_bind(tag, seq, cmd=Block.new, args=nil)
|
||||
def tag_bind(tag, seq, cmd=Proc.new, args=nil)
|
||||
_bind(['tag', 'bind', tag], seq, cmd, args)
|
||||
end
|
||||
|
||||
def tag_bind_append(tag, seq, cmd=Block.new, args=nil)
|
||||
def tag_bind_append(tag, seq, cmd=Proc.new, args=nil)
|
||||
_bind_append(['tag', 'bind', tag], seq, cmd, args)
|
||||
end
|
||||
|
||||
|
@ -663,11 +663,11 @@ class TkTextTag<TkObject
|
|||
@t.tag_configinfo @id, key
|
||||
end
|
||||
|
||||
def bind(seq, cmd=Block.new, args=nil)
|
||||
def bind(seq, cmd=Proc.new, args=nil)
|
||||
_bind([@t.path, 'tag', 'bind', @id], seq, cmd, args)
|
||||
end
|
||||
|
||||
def bind_append(seq, cmd=Block.new, args=nil)
|
||||
def bind_append(seq, cmd=Proc.new, args=nil)
|
||||
_bind_append([@t.path, 'tag', 'bind', @id], seq, cmd, args)
|
||||
end
|
||||
|
||||
|
|
2
gc.c
2
gc.c
|
@ -1469,7 +1469,7 @@ define_final(argc, argv, os)
|
|||
|
||||
rb_scan_args(argc, argv, "11", &obj, &block);
|
||||
if (argc == 1) {
|
||||
block = rb_block_new();
|
||||
block = rb_block_proc();
|
||||
}
|
||||
else if (!rb_respond_to(block, rb_intern("call"))) {
|
||||
rb_raise(rb_eArgError, "wrong type argument %s (should be callable)",
|
||||
|
|
2
hash.c
2
hash.c
|
@ -209,7 +209,7 @@ rb_hash_initialize(argc, argv, hash)
|
|||
if (argc > 0) {
|
||||
rb_raise(rb_eArgError, "wrong number of arguments");
|
||||
}
|
||||
RHASH(hash)->ifnone = rb_block_new();
|
||||
RHASH(hash)->ifnone = rb_block_proc();
|
||||
FL_SET(hash, HASH_PROC_DEFAULT);
|
||||
}
|
||||
else {
|
||||
|
|
2
intern.h
2
intern.h
|
@ -176,7 +176,7 @@ void rb_provide _((const char*));
|
|||
VALUE rb_f_require _((VALUE, VALUE));
|
||||
void rb_obj_call_init _((VALUE, int, VALUE*));
|
||||
VALUE rb_class_new_instance _((int, VALUE*, VALUE));
|
||||
VALUE rb_block_new _((void));
|
||||
VALUE rb_block_proc _((void));
|
||||
VALUE rb_f_lambda _((void));
|
||||
VALUE rb_proc_new _((VALUE (*)(ANYARGS/* VALUE yieldarg[, VALUE procarg] */), VALUE));
|
||||
VALUE rb_protect _((VALUE (*)(VALUE), VALUE, int*));
|
||||
|
|
|
@ -74,7 +74,7 @@ class RubyLex
|
|||
elsif block_given?
|
||||
@input = block
|
||||
else
|
||||
@input = Block.new{@io.gets}
|
||||
@input = Proc.new{@io.gets}
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -188,7 +188,7 @@ class RubyLex
|
|||
if p.respond_to?(:call)
|
||||
@prompt = p
|
||||
else
|
||||
@prompt = Block.new{print p}
|
||||
@prompt = Proc.new{print p}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -833,7 +833,7 @@ Config::CONFIG["topdir"] = CONFIG["topdir"] =
|
|||
$configure_args["--topdir"] ||= $curdir
|
||||
$ruby = arg_config("--ruby", CONFIG["ruby_install_name"])
|
||||
|
||||
split = Shellwords.method(:shellwords).to_block
|
||||
split = Shellwords.method(:shellwords).to_proc
|
||||
|
||||
EXPORT_PREFIX = config_string('EXPORT_PREFIX') {|s| s.strip}
|
||||
|
||||
|
|
|
@ -263,7 +263,7 @@ Object
|
|||
If this mailbox exists, an array containing objects of
|
||||
((<Net::IMAP::MailboxACLItem>)) will be returned.
|
||||
|
||||
: add_response_handler(handler = Block.new)
|
||||
: add_response_handler(handler = Proc.new)
|
||||
Adds a response handler.
|
||||
|
||||
ex).
|
||||
|
@ -1047,7 +1047,7 @@ module Net
|
|||
return sort_internal("UID SORT", sort_keys, search_keys, charset)
|
||||
end
|
||||
|
||||
def add_response_handler(handler = Block.new)
|
||||
def add_response_handler(handler = Proc.new)
|
||||
@response_handlers.push(handler)
|
||||
end
|
||||
|
||||
|
|
|
@ -167,7 +167,7 @@ Individual switch class.
|
|||
=end #'#"#`#
|
||||
def initialize(pattern = nil, conv = nil,
|
||||
short = nil, long = nil, arg = nil,
|
||||
desc = ([] if short or long), block = Block.new)
|
||||
desc = ([] if short or long), block = Proc.new)
|
||||
@pattern, @conv, @short, @long, @arg, @desc, @block =
|
||||
pattern, conv, short, long, arg, desc, block
|
||||
end
|
||||
|
@ -414,7 +414,7 @@ summary feature.
|
|||
pat = t if t.respond_to?(:match)
|
||||
end
|
||||
unless block
|
||||
block = pat.method(:convert).to_block if pat.respond_to?(:convert)
|
||||
block = pat.method(:convert).to_proc if pat.respond_to?(:convert)
|
||||
end
|
||||
@atype[t] = [pat, block]
|
||||
end
|
||||
|
@ -482,7 +482,7 @@ summary feature.
|
|||
searching list.
|
||||
: ((|k|))
|
||||
searching key.
|
||||
: (({Block}))
|
||||
: (({block}))
|
||||
yielded with the found value when succeeded.
|
||||
=end #'#"#`#
|
||||
def search(id, key)
|
||||
|
@ -503,7 +503,7 @@ summary feature.
|
|||
searching key.
|
||||
: ((|*pat|))
|
||||
optional pattern for completion.
|
||||
: (({Block}))
|
||||
: (({block}))
|
||||
yielded with the found value when succeeded.
|
||||
=end #'#"#`#
|
||||
def complete(id, opt, *pat, &block)
|
||||
|
@ -634,7 +634,7 @@ Default options, which never appear in option summary.
|
|||
summary width.
|
||||
: ((|indent|))
|
||||
summary indent.
|
||||
: (({Block}))
|
||||
: (({block}))
|
||||
to be evaluated in the new instance context.
|
||||
=end #'#"#`#
|
||||
def self.with(*args, &block)
|
||||
|
@ -670,7 +670,7 @@ Default options, which never appear in option summary.
|
|||
summary width.
|
||||
: ((|indent|))
|
||||
summary indent.
|
||||
: (({Block}))
|
||||
: (({block}))
|
||||
to be evaluated in the new instance context.
|
||||
=end #'#"#`#
|
||||
def initialize(banner = nil, width = 32, indent = ' ' * 4)
|
||||
|
@ -709,7 +709,7 @@ Default options, which never appear in option summary.
|
|||
argument class specifier, any object including Class.
|
||||
: ((|pat|))
|
||||
pattern for argument, defaulted to ((|t|)) if it respond to (({match})).
|
||||
: (({Block}))
|
||||
: (({block}))
|
||||
receives argument string and should be convert to desired class.
|
||||
=end #'#"#`#
|
||||
def accept(*args, &blk) top.accept(*args, &blk) end
|
||||
|
@ -842,7 +842,7 @@ Default options, which never appear in option summary.
|
|||
maximum length allowed for left side. Defaulted to (({((|width|)) - 1}))
|
||||
: ((|indent|))
|
||||
indentation. Defaulted to ((|@summary_indent|))
|
||||
: (({Block}))
|
||||
: (({block}))
|
||||
yields with each line if called as iterator.
|
||||
=end #'#"#`#
|
||||
def summarize(to = [], width = @summary_width, max = width - 1, indent = @summary_indent, &blk)
|
||||
|
@ -898,7 +898,7 @@ Default options, which never appear in option summary.
|
|||
argument style and description.
|
||||
: "description", ...
|
||||
((*description*)) for this option.
|
||||
: (({Block}))
|
||||
: (({block}))
|
||||
((*handler*)) to convert option argument to arbitrary (({Class})).
|
||||
=end #'#"#`#
|
||||
=begin private
|
||||
|
@ -949,7 +949,7 @@ Default options, which never appear in option summary.
|
|||
# directly specified pattern(any object possible to match)
|
||||
if !(String === o) and o.respond_to?(:match)
|
||||
pattern = notwice(o, pattern, 'pattern')
|
||||
conv = (pattern.method(:convert).to_block if pattern.respond_to?(:convert))
|
||||
conv = (pattern.method(:convert).to_proc if pattern.respond_to?(:convert))
|
||||
next
|
||||
end
|
||||
|
||||
|
@ -962,7 +962,7 @@ Default options, which never appear in option summary.
|
|||
when CompletingHash
|
||||
when nil
|
||||
pattern = CompletingHash.new
|
||||
conv = (pattern.method(:convert).to_block if pattern.respond_to?(:convert))
|
||||
conv = (pattern.method(:convert).to_proc if pattern.respond_to?(:convert))
|
||||
else
|
||||
raise ArgumentError, "argument pattern given twice"
|
||||
end
|
||||
|
@ -1107,7 +1107,7 @@ Default options, which never appear in option summary.
|
|||
:Parameters:
|
||||
: ((|argv|))
|
||||
command line arguments to be parsed.
|
||||
: (({Block}))
|
||||
: (({block}))
|
||||
called with each non-option argument.
|
||||
=end #'#"#`#
|
||||
def order(*argv, &block) order!(argv, &block) end
|
||||
|
@ -1233,7 +1233,7 @@ Default options, which never appear in option summary.
|
|||
called method in each elements of (({stack}))s.
|
||||
: ((|*args|))
|
||||
passed to ((|id|)).
|
||||
: (({Block}))
|
||||
: (({block}))
|
||||
passed to ((|id|)).
|
||||
=end #'#"#`#
|
||||
def visit(id, *args, &block)
|
||||
|
@ -1254,7 +1254,7 @@ Default options, which never appear in option summary.
|
|||
searching table.
|
||||
: ((|k|))
|
||||
searching key.
|
||||
: (({Block}))
|
||||
: (({block}))
|
||||
yielded with the found value when succeeded.
|
||||
=end #'#"#`#
|
||||
def search(id, k)
|
||||
|
@ -1276,7 +1276,7 @@ Default options, which never appear in option summary.
|
|||
searching key.
|
||||
: ((|*pat|))
|
||||
optional pattern for completion.
|
||||
: (({Block}))
|
||||
: (({block}))
|
||||
yielded with the found value when succeeded.
|
||||
=end #'#"#`#
|
||||
def complete(typ, opt, *pat)
|
||||
|
|
|
@ -185,7 +185,7 @@ module REXML
|
|||
end
|
||||
|
||||
def add( pair )
|
||||
if pair[-1].kind_of? Proc or (defined? Block and pair[-1].kind_of? Block)
|
||||
if pair[-1].respond_to? :call
|
||||
@procs << pair unless @procs.include? pair
|
||||
else
|
||||
@listeners << pair unless @listeners.include? pair
|
||||
|
|
|
@ -62,7 +62,7 @@ class Tracer
|
|||
off
|
||||
end
|
||||
else
|
||||
set_trace_func method(:trace_func).to_block
|
||||
set_trace_func method(:trace_func).to_proc
|
||||
stdout.print "Trace on\n" if Tracer.verbose?
|
||||
end
|
||||
end
|
||||
|
|
|
@ -928,9 +928,9 @@ class IterTest
|
|||
a
|
||||
end
|
||||
end
|
||||
test_ok(IterTest.new(nil).method(:f).to_block.call([1]) == [1])
|
||||
test_ok(IterTest.new(nil).method(:f).to_proc.call([1]) == [1])
|
||||
m = /\w+/.match("abc")
|
||||
test_ok(IterTest.new(nil).method(:f).to_block.call([m]) == [m])
|
||||
test_ok(IterTest.new(nil).method(:f).to_proc.call([m]) == [m])
|
||||
|
||||
IterTest.new([0]).each0 {|x| test_ok(x == 0)}
|
||||
IterTest.new([1]).each1 {|x| test_ok(x == 1)}
|
||||
|
@ -977,9 +977,7 @@ end
|
|||
|
||||
test_ok(C.new.collect{|n| n} == [1,2,3])
|
||||
|
||||
test_ok(Proc < Block)
|
||||
test_ok(Proc == lambda{}.class)
|
||||
test_ok(Proc == proc{}.class)
|
||||
test_ok(Proc == Proc.new{}.class)
|
||||
lambda{|a|test_ok(a==1)}.call(1)
|
||||
def block_test(klass, &block)
|
||||
|
@ -987,7 +985,7 @@ def block_test(klass, &block)
|
|||
end
|
||||
|
||||
block_test(NilClass)
|
||||
block_test(Block){}
|
||||
block_test(Proc){}
|
||||
|
||||
def argument_test(state, proc, *args)
|
||||
x = state
|
||||
|
@ -1009,7 +1007,7 @@ def get_block(&block)
|
|||
block
|
||||
end
|
||||
|
||||
test_ok(Block == get_block{}.class)
|
||||
test_ok(Proc == get_block{}.class)
|
||||
argument_test(true, get_block{||})
|
||||
argument_test(true, get_block{||}, 1)
|
||||
argument_test(true, get_block{|a,|}, 1)
|
||||
|
@ -1022,19 +1020,19 @@ argument_test(true, get_block(&lambda{|a,|}),1)
|
|||
argument_test(false, get_block(&lambda{|a,|}),1,2)
|
||||
|
||||
block = get_block{11}
|
||||
proc = lambda{44}
|
||||
test_ok(block.class == Block)
|
||||
test_ok(proc.class == Proc)
|
||||
test_ok(block.to_block.class == Block)
|
||||
test_ok(proc.to_block.class == Proc)
|
||||
test_ok(block.class == Proc)
|
||||
test_ok(block.to_proc.class == Proc)
|
||||
test_ok(block.clone.call == 11)
|
||||
test_ok(proc.clone.call == 44)
|
||||
test_ok(get_block(&block).class == Proc)
|
||||
|
||||
test_ok(get_block(&block).class == Block)
|
||||
test_ok(get_block(&proc).class == Block)
|
||||
lambda = lambda{44}
|
||||
test_ok(lambda.class == Proc)
|
||||
test_ok(lambda.to_proc.class == Proc)
|
||||
test_ok(lambda.clone.call == 44)
|
||||
test_ok(get_block(&lambda).class == Proc)
|
||||
|
||||
test_ok(Block.new{|a,| a}.call(1,2,3) == 1)
|
||||
argument_test(false, Proc.new{|a,| p a}, 1,2)
|
||||
test_ok(Proc.new{|a,| a}.call(1,2,3) == 1)
|
||||
argument_test(true, Proc.new{|a,|}, 1,2)
|
||||
|
||||
def ljump_test(state, proc, *args)
|
||||
x = state
|
||||
|
@ -1050,7 +1048,7 @@ ljump_test(false, get_block{break})
|
|||
ljump_test(true, lambda{break})
|
||||
|
||||
test_ok(block.arity == -1)
|
||||
test_ok(proc.arity == -1)
|
||||
test_ok(lambda.arity == -1)
|
||||
test_ok(lambda{||}.arity == 0)
|
||||
test_ok(lambda{|a|}.arity == 1)
|
||||
test_ok(lambda{|a,|}.arity == 1)
|
||||
|
@ -1058,7 +1056,7 @@ test_ok(lambda{|a,b|}.arity == 2)
|
|||
|
||||
def marity_test(m)
|
||||
method = method(m)
|
||||
test_ok(method.arity == method.to_block.arity)
|
||||
test_ok(method.arity == method.to_proc.arity)
|
||||
end
|
||||
marity_test(:test_ok)
|
||||
marity_test(:marity_test)
|
||||
|
|
2
signal.c
2
signal.c
|
@ -650,7 +650,7 @@ sig_trap(argc, argv)
|
|||
|
||||
arg.sig = argv[0];
|
||||
if (argc == 1) {
|
||||
arg.cmd = rb_block_new();
|
||||
arg.cmd = rb_block_proc();
|
||||
}
|
||||
else if (argc == 2) {
|
||||
arg.cmd = argv[1];
|
||||
|
|
|
@ -540,7 +540,7 @@ rb_f_trace_var(argc, argv)
|
|||
|
||||
rb_secure(4);
|
||||
if (rb_scan_args(argc, argv, "11", &var, &cmd) == 1) {
|
||||
cmd = rb_block_new();
|
||||
cmd = rb_block_proc();
|
||||
}
|
||||
if (NIL_P(cmd)) {
|
||||
return rb_f_untrace_var(argc, argv);
|
||||
|
|
Загрузка…
Ссылка в новой задаче