8000 merge revision(s) 50430,50440: [Backport #11117] · github/ruby@1bd36e3 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1bd36e3

Browse files
committed
merge revision(s) 50430,50440: [Backport ruby#11117]
* vm_eval.c (rb_method_call_status): undefined refined method is not callable unless using. [ruby-core:69064] [Bug ruby#11117] * vm_eval.c (rb_method_call_status): resolve refined method entry to check if undefined. [ruby-core:69064] [Bug ruby#11117] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@51119 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent dffe87c commit 1bd36e3

File tree

4 files changed

+43
-1
lines changed

4 files changed

+43
-1
lines changed

ChangeLog

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
Fri Jul 3 17:53:43 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
2+
3+
* vm_eval.c (rb_method_call_status): resolve refined method entry
4+
to check if undefined. [ruby-core:69064] [Bug #11117]
5+
6+
Fri Jul 3 17:53:43 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
7+
8+
* vm_eval.c (rb_method_call_status): undefined refined method is
9+
not callable unless using. [ruby-core:69064] [Bug #11117]
10+
111
Fri Jul 3 17:44:27 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
212

313
* file.c (rb_file_load_ok): try opening file without gvl not to

test/ruby/test_refinement.rb

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,6 +1399,33 @@ def M.m1
13991399
INPUT
14001400
end
14011401

1402+
def test_check_funcall_undefined
1403+
bug11117 = '[ruby-core:69064] [Bug #11117]'
1404+
1405+
x = Class.new
1406+
Module.new do
1407+
refine x do
1408+
def to_regexp
1409+
//
1410+
end
1411+
end
1412+
end
1413+
1414+
assert_nothing_raised(NoMethodError, bug11117) {
1415+
assert_nil(Regexp.try_convert(x.new))
1416+
}
1417+
end
1418+
1419+
def test_funcall_inherited
1420+
bug11117 = '[ruby-core:69064] [Bug #11117]'
1421+
1422+
Module.new {refine(Dir) {def to_s; end}}
1423+
x = Class.new(Dir).allocate
1424+
assert_nothing_raised(NoMethodError, bug11117) {
1425+
x.inspect
1426+
}
1427+
end
1428+
14021429
private
14031430

14041431
def eval_using(mod, s)

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.7"
22
#define RUBY_RELEASE_DATE "2015-07-03"
3-
#define RUBY_PATCHLEVEL 370
3+
#define RUBY_PATCHLEVEL 371
44

55
#define RUBY_RELEASE_YEAR 2015
66
#define RUBY_RELEASE_MONTH 7

vm_eval.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,8 +533,13 @@ rb_method_call_status(rb_thread_t *th, const rb_method_entry_t *me, call_type sc
533533
int noex;
534534

535535
if (UNDEFINED_METHOD_ENTRY_P(me)) {
536+
undefined:
536537
return scope == CALL_VCALL ? NOEX_VCALL : 0;
537538
}
539+
if (me->def->type == VM_METHOD_TYPE_REFINED) {
540+
me = rb_resolve_refined_method(Qnil, me, NULL);
541+
if (UNDEFINED_METHOD_ENTRY_P(me)) goto undefined;
542+
}
538543
klass = me->klass;
539544
oid = me->def->original_id;
540545
noex = me->flag;

0 commit comments

Comments
 (0)
0