diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-02-14 13:07:04 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-02-14 13:07:04 +0000 |
commit | f843f09b066c9c3642254f5e42b0717371487847 (patch) | |
tree | a6b43a29338feefdef6c9716b311ce068e91d495 /eval.c | |
parent | 70607ee9434fc8911fe78f938e247cf65100c6d9 (diff) |
* eval.c (DMETHOD_P): accessing wrong frame. [ruby-dev:28181]
* eval.c (proc_invoke): preserve FRAME_DMETH flag.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9935 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -843,7 +843,7 @@ struct RVarmap *ruby_dyna_vars; #define DVAR_DONT_RECYCLE FL_USER2 -#define DMETHOD_P() (ruby_frame->prev ? (ruby_frame->prev->flags & FRAME_DMETH) : 0) +#define DMETHOD_P() (ruby_frame->flags & FRAME_DMETH) static struct RVarmap* new_dvar(id, value, prev) @@ -8435,6 +8435,7 @@ proc_invoke(proc, args, self, klass) if (self != Qundef) _block.frame.self = self; if (klass) _block.frame.last_class = klass; _block.frame.argc = RARRAY(tmp)->len; + _block.frame.flags = ruby_frame->flags; if (_block.frame.argc && (ruby_frame->flags & FRAME_DMETH)) { NEWOBJ(scope, struct SCOPE); OBJSETUP(scope, tmp, T_SCOPE); |