Skip to content

Commit d841eef

Browse files
committed
merge revision(s) r48111,r48118,r48120: [Backport ruby#10421]
* vm_method.c (rb_method_entry_make): warn redefinition only for already defined methods, but not for undefined methods. [ruby-dev:48691] [Bug ruby#10421] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@48138 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent a7a045f commit d841eef

File tree

4 files changed

+18
-2
lines changed

4 files changed

+18
-2
lines changed

ChangeLog

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
Sun Oct 26 03:31:46 2014 Nobuyoshi Nakada <[email protected]>
2+
3+
* vm_method.c (rb_method_entry_make): warn redefinition only for
4+
already defined methods, but not for undefined methods.
5+
[ruby-dev:48691] [Bug #10421]
6+
17
Sun Oct 26 03:21:30 2014 Nobuyoshi Nakada <[email protected]>
28

39
* class.c (unknown_keyword_error): delete expected keywords

test/ruby/test_object.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,15 @@ def (Object.new).object_id; end
298298
$VERBOSE = false
299299
def (Object.new).__send__; end
300300
INPUT
301+
302+
bug10421 = '[ruby-dev:48691] [Bug #10421]'
303+
assert_in_out_err([], <<-INPUT, ["1"], [], bug10421)
304+
$VERBOSE = false
305+
class C < BasicObject
306+
def object_id; 1; end
307+
end
308+
puts C.new.object_id
309+
INPUT
301310
end
302311

303312
def test_remove_method

version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#define RUBY_VERSION "2.1.4"
22
#define RUBY_RELEASE_DATE "2014-10-26"
3-
#define RUBY_PATCHLEVEL 263
3+
#define RUBY_PATCHLEVEL 264
44

55
#define RUBY_RELEASE_YEAR 2014
66
#define RUBY_RELEASE_MONTH 10

vm_method.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ rb_free_method_entry(rb_method_entry_t *me)
181181
xfree(me);
182182
}
183183

184+
static inline rb_method_entry_t *search_method(VALUE klass, ID id, VALUE *defined_class_ptr);
184185
static int rb_method_definition_eq(const rb_method_definition_t *d1, const rb_method_definition_t *d2);
185186

186187
static inline rb_method_entry_t *
@@ -355,7 +356,7 @@ rb_method_entry_make(VALUE klass, ID mid, rb_method_type_t type,
355356
}
356357
/* check mid */
357358
if (mid == object_id || mid == id__send__) {
358-
if (type == VM_METHOD_TYPE_ISEQ) {
359+
if (type == VM_METHOD_TYPE_ISEQ && search_method(klass, mid, 0)) {
359360
rb_warn("redefining `%s' may cause serious problems", rb_id2name(mid));
360361
}
361362
}

0 commit comments

Comments
 (0)