mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
merge revision(s) 23257:
* eval.c (proc_invoke): shares dmethod scope local variables. a patch from coderrr at [ruby-core:23050] * gc.c (obj_free): do not free cloned scope local variables. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@23997 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a563f71398
commit
7adb8681f0
5 changed files with 23 additions and 6 deletions
|
@ -1,3 +1,10 @@
|
|||
Thu Jul 9 17:58:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* eval.c (proc_invoke): shares dmethod scope local variables.
|
||||
a patch from coderrr at [ruby-core:23050]
|
||||
|
||||
* gc.c (obj_free): do not free cloned scope local variables.
|
||||
|
||||
Wed Jul 8 19:28:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* eval.c (rb_thread_remove): stops timer thread unless other
|
||||
|
|
2
eval.c
2
eval.c
|
@ -8872,7 +8872,7 @@ proc_invoke(proc, args, self, klass)
|
|||
OBJSETUP(scope, tmp, T_SCOPE);
|
||||
scope->local_tbl = _block.scope->local_tbl;
|
||||
scope->local_vars = _block.scope->local_vars;
|
||||
scope->flags |= SCOPE_CLONE;
|
||||
scope->flags |= SCOPE_CLONE | (_block.scope->flags & SCOPE_MALLOC);
|
||||
_block.scope = scope;
|
||||
}
|
||||
/* modify current frame */
|
||||
|
|
2
gc.c
2
gc.c
|
@ -1356,7 +1356,7 @@ obj_free(obj)
|
|||
VALUE *vars = RANY(obj)->as.scope.local_vars-1;
|
||||
if (!(RANY(obj)->as.scope.flags & SCOPE_CLONE) && vars[0] == 0)
|
||||
RUBY_CRITICAL(free(RANY(obj)->as.scope.local_tbl));
|
||||
if (RANY(obj)->as.scope.flags & SCOPE_MALLOC)
|
||||
if ((RANY(obj)->as.scope.flags & (SCOPE_MALLOC|SCOPE_CLONE)) == SCOPE_MALLOC)
|
||||
RUBY_CRITICAL(free(vars));
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -91,4 +91,14 @@ class TestProc < Test::Unit::TestCase
|
|||
assert_equal(10, Proc.new{|&b| b.call(10)}.call {|x| x})
|
||||
assert_equal(12, Proc.new{|a,&b| b.call(a)}.call(12) {|x| x})
|
||||
end
|
||||
|
||||
def test_define_method_scope
|
||||
a = 1
|
||||
c = Class.new
|
||||
c.send(:define_method, :x) do |*|
|
||||
lambda {a = 2}.call
|
||||
end
|
||||
c.new.x(nil)
|
||||
assert_equal(2, a, '[ruby-core:23050]')
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
#define RUBY_VERSION "1.8.7"
|
||||
#define RUBY_RELEASE_DATE "2009-07-08"
|
||||
#define RUBY_RELEASE_DATE "2009-07-09"
|
||||
#define RUBY_VERSION_CODE 187
|
||||
#define RUBY_RELEASE_CODE 20090708
|
||||
#define RUBY_PATCHLEVEL 180
|
||||
#define RUBY_RELEASE_CODE 20090709
|
||||
#define RUBY_PATCHLEVEL 181
|
||||
|
||||
#define RUBY_VERSION_MAJOR 1
|
||||
#define RUBY_VERSION_MINOR 8
|
||||
#define RUBY_VERSION_TEENY 7
|
||||
#define RUBY_RELEASE_YEAR 2009
|
||||
#define RUBY_RELEASE_MONTH 7
|
||||
#define RUBY_RELEASE_DAY 8
|
||||
#define RUBY_RELEASE_DAY 9
|
||||
|
||||
#ifdef RUBY_EXTERN
|
||||
RUBY_EXTERN const char ruby_version[];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue