* include/ruby/node.h: add new constants for rb_call()'s scope.
* eval.c (iterate_method): use CALL_* scope constant to specify proper scope value. * eval.c (rb_each, rb_apply, rb_funcall, rb_funcall2, rb_funcall3): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15884 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
ddf9b405ad
commit
a4d6f2265a
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
Wed Apr 2 06:24:06 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* include/ruby/node.h: add new constants for rb_call()'s scope.
|
||||||
|
|
||||||
|
* eval.c (iterate_method): use CALL_* scope constant to specify
|
||||||
|
proper scope value.
|
||||||
|
|
||||||
|
* eval.c (rb_each, rb_apply, rb_funcall, rb_funcall2, rb_funcall3):
|
||||||
|
ditto.
|
||||||
|
|
||||||
Tue Apr 1 21:19:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
|
Tue Apr 1 21:19:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
* rational.c: need to include <float.h> just once.
|
* rational.c: need to include <float.h> just once.
|
||||||
|
15
eval.c
15
eval.c
@ -1069,7 +1069,7 @@ iterate_method(VALUE obj)
|
|||||||
|
|
||||||
arg = (struct iter_method_arg *)obj;
|
arg = (struct iter_method_arg *)obj;
|
||||||
return rb_call(CLASS_OF(arg->obj), arg->obj, arg->mid,
|
return rb_call(CLASS_OF(arg->obj), arg->obj, arg->mid,
|
||||||
arg->argc, arg->argv, NOEX_PRIVATE);
|
arg->argc, arg->argv, CALL_FCALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
@ -1088,8 +1088,7 @@ rb_block_call(VALUE obj, ID mid, int argc, VALUE *argv,
|
|||||||
VALUE
|
VALUE
|
||||||
rb_each(VALUE obj)
|
rb_each(VALUE obj)
|
||||||
{
|
{
|
||||||
return rb_call(CLASS_OF(obj), obj, rb_intern("each"), 0, 0,
|
return rb_call(CLASS_OF(obj), obj, rb_intern("each"), 0, 0, CALL_FCALL);
|
||||||
NOEX_PRIVATE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
@ -1458,7 +1457,7 @@ rb_apply(VALUE recv, ID mid, VALUE args)
|
|||||||
argc = RARRAY_LEN(args); /* Assigns LONG, but argc is INT */
|
argc = RARRAY_LEN(args); /* Assigns LONG, but argc is INT */
|
||||||
argv = ALLOCA_N(VALUE, argc);
|
argv = ALLOCA_N(VALUE, argc);
|
||||||
MEMCPY(argv, RARRAY_PTR(args), VALUE, argc);
|
MEMCPY(argv, RARRAY_PTR(args), VALUE, argc);
|
||||||
return rb_call(CLASS_OF(recv), recv, mid, argc, argv, NOEX_NOSUPER);
|
return rb_call(CLASS_OF(recv), recv, mid, argc, argv, CALL_FCALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
@ -1538,21 +1537,19 @@ rb_funcall(VALUE recv, ID mid, int n, ...)
|
|||||||
else {
|
else {
|
||||||
argv = 0;
|
argv = 0;
|
||||||
}
|
}
|
||||||
return rb_call(CLASS_OF(recv), recv, mid, n, argv,
|
return rb_call(CLASS_OF(recv), recv, mid, n, argv, CALL_FCALL);
|
||||||
NOEX_NOSUPER | NOEX_PRIVATE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
rb_funcall2(VALUE recv, ID mid, int argc, const VALUE *argv)
|
rb_funcall2(VALUE recv, ID mid, int argc, const VALUE *argv)
|
||||||
{
|
{
|
||||||
return rb_call(CLASS_OF(recv), recv, mid, argc, argv,
|
return rb_call(CLASS_OF(recv), recv, mid, argc, argv, CALL_FCALL);
|
||||||
NOEX_NOSUPER | NOEX_PRIVATE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
rb_funcall3(VALUE recv, ID mid, int argc, const VALUE *argv)
|
rb_funcall3(VALUE recv, ID mid, int argc, const VALUE *argv)
|
||||||
{
|
{
|
||||||
return rb_call(CLASS_OF(recv), recv, mid, argc, argv, NOEX_PUBLIC);
|
return rb_call(CLASS_OF(recv), recv, mid, argc, argv, CALL_PUBLIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
@ -475,6 +475,11 @@ typedef struct RNode {
|
|||||||
#define NOEX_WITH(n, s) ((s << 8) | n)
|
#define NOEX_WITH(n, s) ((s << 8) | n)
|
||||||
#define NOEX_WITH_SAFE(n) NOEX_WITH(n, rb_safe_level())
|
#define NOEX_WITH_SAFE(n) NOEX_WITH(n, rb_safe_level())
|
||||||
|
|
||||||
|
#define CALL_PUBLIC 0
|
||||||
|
#define CALL_FCALL 1
|
||||||
|
#define CALL_VCALL 2
|
||||||
|
#define CALL_SUPER 3
|
||||||
|
|
||||||
VALUE rb_parser_new(void);
|
VALUE rb_parser_new(void);
|
||||||
VALUE rb_parser_end_seen_p(VALUE);
|
VALUE rb_parser_end_seen_p(VALUE);
|
||||||
VALUE rb_parser_encoding(VALUE);
|
VALUE rb_parser_encoding(VALUE);
|
||||||
|
3
vm.c
3
vm.c
@ -501,7 +501,6 @@ vm_call_super(rb_thread_t *th, int argc, const VALUE *argv)
|
|||||||
VALUE klass;
|
VALUE klass;
|
||||||
ID id;
|
ID id;
|
||||||
NODE *body;
|
NODE *body;
|
||||||
int nosuper = 0;
|
|
||||||
rb_control_frame_t *cfp = th->cfp;
|
rb_control_frame_t *cfp = th->cfp;
|
||||||
|
|
||||||
if (!cfp->iseq) {
|
if (!cfp->iseq) {
|
||||||
@ -530,7 +529,7 @@ vm_call_super(rb_thread_t *th, int argc, const VALUE *argv)
|
|||||||
rb_bug("vm_call_super: not found");
|
rb_bug("vm_call_super: not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
return vm_call0(th, klass, recv, id, id, argc, argv, body, nosuper);
|
return vm_call0(th, klass, recv, id, id, argc, argv, body, CALL_SUPER);
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user