1
--- ruby-1.8.5/eval.c 23 Sep 2006 14:39:29 -0000 1.616.2.195
2
+++ ruby-1.8.5/eval.c 4 Oct 2006 08:35:18 -0000 1.616.2.196
3
@@ -1106,7 +1106,7 @@ static VALUE rb_yield_0 _((VALUE, VALUE,
4
#define YIELD_FUNC_AVALUE 1
5
#define YIELD_FUNC_SVALUE 2
7
-static VALUE rb_call _((VALUE,VALUE,ID,int,const VALUE*,int));
8
+static VALUE rb_call _((VALUE,VALUE,ID,int,const VALUE*,int,VALUE));
9
static VALUE module_setup _((VALUE,NODE*));
11
static VALUE massign _((VALUE,NODE*,VALUE,int));
12
@@ -3177,7 +3177,7 @@ rb_eval(self, n)
14
ruby_current_node = node;
16
- result = rb_call(CLASS_OF(recv),recv,each,0,0,0);
17
+ result = rb_call(CLASS_OF(recv),recv,each,0,0,0,self);
21
@@ -3418,7 +3418,7 @@ rb_eval(self, n)
23
ruby_current_node = node;
25
- rb_call(CLASS_OF(recv),recv,node->nd_mid,argc,argv,scope);
26
+ rb_call(CLASS_OF(recv),recv,node->nd_mid,argc,argv,scope,self);
27
result = argv[argc-1];
30
@@ -3436,7 +3436,7 @@ rb_eval(self, n)
32
ruby_current_node = node;
34
- result = rb_call(CLASS_OF(recv),recv,node->nd_mid,argc,argv,0);
35
+ result = rb_call(CLASS_OF(recv),recv,node->nd_mid,argc,argv,0,self);
39
@@ -3451,13 +3451,13 @@ rb_eval(self, n)
41
ruby_current_node = node;
43
- result = rb_call(CLASS_OF(self),self,node->nd_mid,argc,argv,1);
44
+ result = rb_call(CLASS_OF(self),self,node->nd_mid,argc,argv,1,self);
50
- result = rb_call(CLASS_OF(self),self,node->nd_mid,0,0,2);
51
+ result = rb_call(CLASS_OF(self),self,node->nd_mid,0,0,2,self);
55
@@ -5253,7 +5253,7 @@ assign(self, lhs, val, pcall)
57
ruby_current_node = lhs;
59
- rb_call(CLASS_OF(recv), recv, lhs->nd_mid, 1, &val, scope);
60
+ rb_call(CLASS_OF(recv), recv, lhs->nd_mid, 1, &val, scope, self);
64
@@ -5264,7 +5264,7 @@ assign(self, lhs, val, pcall)
65
ruby_current_node = lhs;
67
rb_call(CLASS_OF(recv), recv, lhs->nd_mid,
68
- RARRAY(args)->len, RARRAY(args)->ptr, scope);
69
+ RARRAY(args)->len, RARRAY(args)->ptr, scope, self);
73
@@ -5993,12 +5993,13 @@ rb_call0(klass, recv, id, oid, argc, arg
77
-rb_call(klass, recv, mid, argc, argv, scope)
78
+rb_call(klass, recv, mid, argc, argv, scope, self)
82
const VALUE *argv; /* OK */
88
@@ -6035,10 +6036,11 @@ rb_call(klass, recv, mid, argc, argv, sc
89
if (noex & NOEX_PROTECTED) {
90
VALUE defined_class = klass;
92
+ if (self == Qundef) self = ruby_frame->self;
93
if (TYPE(defined_class) == T_ICLASS) {
94
defined_class = RBASIC(defined_class)->klass;
96
- if (!rb_obj_is_kind_of(ruby_frame->self, rb_class_real(defined_class)))
97
+ if (!rb_obj_is_kind_of(self, rb_class_real(defined_class)))
98
return method_missing(recv, mid, argc, argv, CSTAT_PROT);
101
@@ -6058,7 +6060,7 @@ rb_apply(recv, mid, args)
102
argc = RARRAY(args)->len; /* Assigns LONG, but argc is INT */
103
argv = ALLOCA_N(VALUE, argc);
104
MEMCPY(argv, RARRAY(args)->ptr, VALUE, argc);
105
- return rb_call(CLASS_OF(recv), recv, mid, argc, argv, 1);
106
+ return rb_call(CLASS_OF(recv), recv, mid, argc, argv, 1, Qundef);
110
@@ -6091,7 +6093,7 @@ rb_f_send(argc, argv, recv)
112
vid = *argv++; argc--;
113
PUSH_ITER(rb_block_given_p()?ITER_PRE:ITER_NOT);
114
- vid = rb_call(CLASS_OF(recv), recv, rb_to_id(vid), argc, argv, 1);
115
+ vid = rb_call(CLASS_OF(recv), recv, rb_to_id(vid), argc, argv, 1, Qundef);
119
@@ -6120,7 +6122,7 @@ vafuncall(recv, mid, n, ar)
123
- return rb_call(CLASS_OF(recv), recv, mid, n, argv, 1);
124
+ return rb_call(CLASS_OF(recv), recv, mid, n, argv, 1, Qundef);
128
@@ -6179,7 +6181,7 @@ rb_funcall2(recv, mid, argc, argv)
132
- return rb_call(CLASS_OF(recv), recv, mid, argc, argv, 1);
133
+ return rb_call(CLASS_OF(recv), recv, mid, argc, argv, 1, Qundef);
137
@@ -6189,7 +6191,7 @@ rb_funcall3(recv, mid, argc, argv)
141
- return rb_call(CLASS_OF(recv), recv, mid, argc, argv, 0);
142
+ return rb_call(CLASS_OF(recv), recv, mid, argc, argv, 0, Qundef);
146
@@ -6211,7 +6213,7 @@ rb_call_super(argc, argv)
149
PUSH_ITER(ruby_iter->iter ? ITER_PRE : ITER_NOT);
150
- result = rb_call(RCLASS(klass)->super, self, ruby_frame->orig_func, argc, argv, 3);
151
+ result = rb_call(RCLASS(klass)->super, self, ruby_frame->orig_func, argc, argv, 3, Qundef);