8000 Update to upstream 2.1.3 by dbussink · Pull Request #20 · github/ruby · GitHub
[go: up one dir, main page]

Skip to content

Update to upstream 2.1.3 #20

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 159 commits into from
Nov 11, 2014
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
159 commits
Select commit Hold shift + click to select a range
4bcc27c
merge revision(s) r45891,r45893,r45895:
nagachika May 10, 2014
472b47f
merge revision(s) r45901:
nagachika May 10, 2014
f565774
merge revision(s) r45360,r45361: [Backport #9651]
nagachika May 12, 2014
a40b9a3
merge revision(s) r45758,r45759: [Backport #9759]
nagachika May 12, 2014
1400374
merge revision(s) r45637: [Backport #9726]
nagachika May 12, 2014
eff0f73
merge revision(s) r45367,r45387,r45388,r45389: [Backport #9475]
nagachika May 15, 2014
75edd5f
merge revision(s) r45374: [Backport #8405]
nagachika May 15, 2014
d41b88b
merge revision(s) r45405,r45408: [Backport #9669] [Backport #9740]
nagachika May 18, 2014
e973ab4
merge revision(s) r45553,r45554,r45557,r45558,r45561,r45566,r45567: […
nagachika May 18, 2014
a800c86
merge revision(s) r46010:
nagachika May 19, 2014
cbca421
merge revision(s) r45045,r45046,r45530: [Backport #9697]
nagachika May 22, 2014
f6a385b
merge revision(s) r45520: [Backport #9706]
nagachika May 27, 2014
d5705f5
merge revision(s) r45529: [Backport #8182]
nagachika May 27, 2014
adbf635
merge revision(s) r45534: [Backport #9709]
nagachika May 27, 2014
0d5f521
merge revision(s) r45562: [Backport #9727]
nagachika May 27, 2014
2a1acd5
merge revision(s) r45179,r45564,r45565,r45584,r45585: [Backport #9721]
nagachika May 27, 2014
148bce7
merge revision(s) r45604: [Backport #9748]
nagachika May 27, 2014
f5a5623
merge revision(s) r45646: [Backport #9765]
nagachika May 28, 2014
9dee6a1
merge revision(s) r45701: [Backport #9771]
nagachika May 28, 2014
88f5032
merge revision(s) r45716: [Backport #9665]
nagachika May 28, 2014
5328a14
merge revision(s) r45187,r45205,r45206,r45212,r45213: [Backport #9570]
nagachika May 29, 2014
66c9e45
merge revision(s) r45178,r45180,r45183: [Backport #9568]
nagachika May 29, 2014
9e08fce
merge revision(s) r45350: [Backport #9645]
nagachika Jun 1, 2014
ab6ca12
merge revision(s) r45320,r45321: [Backport #9622]
nagachika Jun 1, 2014
122d84a
merge revision(s) r45365: [Backport #9656]
nagachika Jun 1, 2014
2b1813e
merge revision(s) r45364,r45395,r45396,r45403,r45406: [Backport #9652]
nagachika Jun 1, 2014
c1129dc
merge revision(s) r45471: [Backport #9688]
nagachika Jun 1, 2014
8416142
merge revision(s) r45302: [Backport #9616]
nagachika Jun 2, 2014
e6d91ff
merge revision(s) r45517,r45544,r45924:
nagachika Jun 6, 2014
e541233
* test/ruby/test_string (test_LSHIFT_neary_long_max): extend timeout.
nagachika Jun 10, 2014
c8139d2
merge revision(s) r45207,r45208,r45209,r45210: [Backport #9575]
nagachika Jun 10, 2014
c4830ed
merge revision(s) r45378: [Backport #9658] [Backport #9866]
nagachika Jun 10, 2014
11f564b
merge revision(s) r45308,r45316: [Backport #9621]
nagachika Jun 10, 2014
d10b8c6
merge revision(s) r45224,r45228: [Backport #9838]
nagachika Jun 11, 2014
6f38268
merge revision(s) r45287,r45288,r45289,r45290: [Backport #9600]
nagachika Jun 16, 2014
22291da
merge revision(s) r45521,r45523,r45551: [Backport #9699]
nagachika Jun 16, 2014
ebdccc0
merge revision(s) r45724: [Backport #9776]
nagachika Jun 16, 2014
8a8177b
merge revision(s) r45954: [Backport #8358]
nagachika Jun 19, 2014
f231528
merge revision(s) r44712,r44715,r44716,r44722,r44725,r44726,r44753: […
nagachika Jun 19, 2014
0f0a6ca
merge revision(s) r46060: [Backport #9627]
nagachika Jun 22, 2014
cb5f0a4
merge revision(s) r45899: [Backport #9751]
nagachika Jun 22, 2014
2161ddb
merge revision(s) r45874: [Backport #9813]
nagachika Jun 22, 2014
7a5fbf3
merge revision(s) r46194: [Backport #9835]
nagachika Jun 23, 2014
b2194eb
* 2014-06-24
matzbot Jun 23, 2014
80d7b9f
merge revision(s) r45947,r45951: [Backport #9739] [Backport #9844]
nagachika Jun 23, 2014
c0a18e2
merge revision(s) r46182: [Backport #9872]
nagachika Jun 23, 2014
31f22ea
merge revision(s) r46313: [Backport #9896]
nagachika Jun 23, 2014
de8bfb3
merge revision(s) r45540: [Backport #9911]
nagachika Jun 23, 2014
bf18eb2
merge revision(s) r45845,r45846,r45847: [Backport #9486]
nagachika Jun 28, 2014
f57b6ff
merge revision(s) r46243,r46244: [Backport #9882] [Backport #9883]
nagachika Jun 28, 2014
9f7bc30
merge revision(s) r46598: [Backport #9991]
nagachika Jun 28, 2014
92c8359
merge revision(s) r44535,r44536: [Backport #9321]
nagachika Jun 29, 2014
3214160
merge revision(s) r46485: [Backport #9897]
nagachika Jun 29, 2014
bc1e48b
merge revision(s) r44505: [Backport #9994]
nagachika Jun 29, 2014
03fe035
merge revision(s) r46098: [Backport #9861]
nagachika Jun 29, 2014
3ef7c81
merge revision(s) r45793: [Backport #9608]
nagachika Jun 29, 2014
c1a34b1
merge revision(s) r45863,r45871: [Backport #9750]
nagachika Jun 29, 2014
23b95d3
merge revision(s) r45979: [Backport #9847]
nagachika Jun 29, 2014
080fef3
merge revision(s) r46075: [Backport #9856]
nagachika Jun 29, 2014
b751c78
merge revision(s) r46233: [Backport #9878]
nagachika Jun 29, 2014
ef4e4ce
merge revision(s) r46331: [Backport #9885]
nagachika Jun 29, 2014
1b28556
merge revision(s) r46457,r46458: [Backport #9949]
nagachika Jun 29, 2014
40e342c
merge revision(s) r46342: [Backport #9954]
nagachika Jun 29, 2014
483fcef
merge revision(s) r45399,r45400,r46036,r46037: [Backport #416]
nagachika Jun 30, 2014
e700ac2
merge revision(s) r46360,r46372: [Backport #8625]
nagachika Jun 30, 2014
94a893e
merge revision(s) r45858,r45859,r45860,r45861,r46638: [Backport #9811]
nagachika Jul 2, 2014
a23eb43
merge revision(s) r45495: [Backport #9662]
nagachika Jul 2, 2014
5e75994
merge revision(s) r45462,r45463,r45466: [Backport #9684]
nagachika Jul 3, 2014
4f79338
merge revision(s) r45786: [Backport #9738]
nagachika Jul 3, 2014
067784a
merge revision(s) r45896: [Backport #9773]
nagachika Jul 3, 2014
96686c0
merge revision(s) r46095: [Backport #9819]
nagachika Jul 3, 2014
bf3a2f3
merge revision(s) r46099: [Backport #9814]
nagachika Jul 3, 2014
066a450
merge revision(s) r45344: [Backport #9543]
nagachika Jul 6, 2014
d5addff
merge revision(s) r45642,r45643: [Backport #9646] [Backport #9729]
nagachika Jul 6, 2014
02e809a
merge revision(s) r46780: [Backport #9499]
nagachika Jul 11, 2014
ce99468
merge revision(s) r45423,r45424: [Backport #9674]
nagachika Jul 13, 2014
5acdbee
merge revision(s) r46778: [Backport #10019]
nagachika Jul 13, 2014
0b7bb7f
merge revision(s) r46416: [Backport #9942]
nagachika Jul 13, 2014
b373075
merge revision(s) r46417,r46418: [Backport #9939]
nagachika Jul 13, 2014
390e923
merge revision(s) r46368,r46371: [Backport #9913]
nagachika Jul 13, 2014
c7391a0
merge revision(s) r44516,r46159,r46196: [Backport #8523]
nagachika Jul 13, 2014
bdb5ef9
merge revision(s) r46344: [Backport #9902]
nagachika Jul 18, 2014
f30e047
merge revision(s) r46899,r46903,r46904:
nagachika Jul 23, 2014
e7edc10
merge revision(s) r45144: [Backport #9544]
nagachika Jul 23, 2014
755128c
merge revision(s) r45720: [Backport #9571]
nagachika Jul 23, 2014
cd5dc29
merge revision(s) r45827: [Backport #9618]
nagachika Jul 23, 2014
44c8b12
merge revision(s) r45034,r45037:
nagachika Jul 23, 2014
15d2f7a
merge revision(s) r45953,r45961: [Backport #9767]
nagachika Jul 23, 2014
75a999b
merge revision(s) r46419,r46429: [Backport #9940]
nagachika Jul 30, 2014
235af84
merge revision(s) r46463: [Backport #9957]
nagachika Jul 30, 2014
c0e3a07
merge revision(s) r46464: [Backport #9959]
nagachika Jul 30, 2014
9604c68
merge revision(s) r46471: [Backport #9964]
nagachika Jul 30, 2014
0ee5ad5
merge revision(s) r46649: [Backport #10005]
nagachika Aug 2, 2014
5816247
merge revision(s) r44577,r45097,r45330,r45331,r45354,r45356: [Backpor…
nagachika Aug 2, 2014
e436fee
merge revision(s) r44610,r44617:
nagachika Aug 3, 2014
8a504f7
merge revision(s) r46465,r46469,r46484: [Backport #9961]
nagachika Aug 3, 2014
73a3fc3
merge revision(s) r46345,r46346: [Backport #9903]
nagachika Aug 3, 2014
6508fff
merge revision(s) r46550: [Backport #9977]
nagachika Aug 3, 2014
f91bd16
merge revision(s) r46557,r46565: [Backport #9978]
nagachika Aug 3, 2014
b57a859
merge revision(s) r46570: [Backport #9983]
nagachika Aug 3, 2014
69f7b4f
merge revision(s) r46585,r46595,r46822: [Backport #9977] [Backport #9…
nagachika Aug 3, 2014
39b896c
merge revision(s) r45676,r45677: [Backport #9769]
nagachika Aug 8, 2014
9967966
merge revision(s) r46775: [Backport #10016]
nagachika Aug 11, 2014
fad3a35
merge revision(s) r46382,r46384,r46913: [Backport #9914]
nagachika Aug 11, 2014
58e57a7
merge revision(s) r46151,r46165: [Backport #9865]
nagachika Aug 11, 2014
c65eb7b
merge revision(s) r46241: [Backport #9875]
nagachika Aug 11, 2014
659fd08
merge revision(s) r46408,r46410,r46413,r46414,r46424,r46436,r46437: […
nagachika Aug 18, 2014
4ac47f3
merge revision(s) r46481: [Backport #9966]
nagachika Aug 18, 2014
be2ae51
merge r46831 partially. extracted commits are as follows.
nagachika Aug 19, 2014
1f5aeeb
merge revision(s) r45349,r45837,r45838: [Backport #9521] [Backport #9…
nagachika Aug 20, 2014
f3274f5
merge revision(s) r45542,r45543: [Backport #9717]
nagachika Aug 20, 2014
def5eab
merge revision(s) r46896,r46897,r46898: [Backport #10078]
nagachika Aug 22, 2014
50d3445
merge revision(s) r47037: [Backport #10106]
nagachika Aug 22, 2014
7a1fdd6
merge revision(s) r47090: [Backport #10114]
nagachika Aug 24, 2014
e552b9a
merge revision(s) r47098: [Backport #10117]
nagachika Aug 24, 2014
da8e7cc
merge revision(s) r45503,r45504,r45508,r45509,r47275: [Backport #9692]
nagachika Aug 25, 2014
51fa567
merge revision(s) r45512,r45513,r45515: [Backport #9698]
nagachika Aug 25, 2014
73ce2f3
merge revision(s) r45537: [Backport #9710]
nagachika Aug 25, 2014
66ea2f0
merge revision(s) r45885: [Backport #9818]
nagachika Aug 25, 2014
fad6928
merge revision(s) r46441: [Backport #9946]
nagachika Aug 30, 2014
1cb08e9
merge revision(s) r47153: [Backport #10127]
nagachika Aug 30, 2014
a223ff8
merge revision(s) r46387: [Backport #9607]
nagachika Aug 30, 2014
7706aa1
merge revision(s) r45911,r45912,r45917,r45918,r45919: [Backport #9820]
nagachika Sep 1, 2014
b35781d
merge revision(s) r46547: [Backport #9976]
nagachika Sep 1, 2014
9e95cee
merge revision(s) r47362: [Backport #9984]
nagachika Sep 3, 2014
b8db23a
merge revision(s) r46569: [Backport #9982]
nagachika Sep 3, 2014
348e55c
merge revision(s) r46876: [Backport #10039]
nagachika Sep 3, 2014
645588b
merge revision(s) r47217: [Backport #10062]
nagachika Sep 3, 2014
3598e34
merge revision(s) r45046,r45047,r45063,r45087,r45146,r45150,r45151,r4…
nagachika Sep 5, 2014
239068c
merge revision(s) r44916: [Backport #10043]
nagachika Sep 5, 2014
8d728c2
merge revision(s) r46796: [Backport #10008]
nagachika Sep 5, 2014
d64aa61
merge revision(s) r47327: [Backport #10008]
nagachika Sep 5, 2014
0f6e3df
Backport r47425
Sep 6, 2014
9dfb0f3
Bump patch level from r47426
Sep 6, 2014
2eb09f3
merge revision(s) r47190: [Backport #10139]
nagachika Sep 9, 2014
860ec67
merge revision(s) r47191: [Backport #10140]
nagachika Sep 9, 2014
8f8f174
merge revision(s) r47196: [Backport #10144]
nagachika Sep 9, 2014
3de9369
merge revision(s) r47221: [Backport #10149]
nagachika Sep 9, 2014
e315e5e
merge revision(s) r47288: [Backport #10153]
nagachika Sep 9, 2014
ed1c1f9
merge revision(s) r47248: [Backport #10161]
nagachika Sep 10, 2014
052b926
merge r46831 partially. extracted commits are as follows. [Bug #9344]
nagachika Sep 10, 2014
9755952
merge revision(s) r46501,r47372,r47460: [Backport #10191]
nagachika Sep 10, 2014
1cbde5b
merge revision(s) r46391,r46395: [Backport #9766]
nagachika Sep 14, 2014
2e098c3
10000 merge revision(s) r47457: [Backport #8315]
nagachika Sep 14, 2014
2b8928d
merge revision(s) r44459,r44470: [Backport #8315]
nagachika Sep 15, 2014
01cee45
merge revision(s) r47590: [Backport #10241]
nagachika Sep 15, 2014
4ad1bd4
merge revision(s) r47591: [Backport #10242]
nagachika Sep 15, 2014
f5c3ada
merge revision(s) r46495,r46499: [Backport #9971]
nagachika Sep 15, 2014
9a0a3f7
* version.h (RUBY_VERSION): bump RUBY_VERSION to 2.1.3.
nagachika Sep 18, 2014
4cb2998
add tag v2_1_3
nagachika Sep 18, 2014
3d8ac37
Merge tag 'v2_1_3' into dbussink/ruby-2-1-3
dbussink Sep 20, 2014
39e9044
Use stock heap_set_increment implementation and calling behavior
dbussink Sep 20, 2014
ddbf600
Use upstream socket implementation
dbussink Sep 20, 2014
e5d63cb
Fix indenting to match upstream
dbussink Sep 20, 2014
4c75f86
Cleanup type conversions
dbussink Sep 22, 2014
da6989e
Require env_util for assert_in_out_err
dbussink Sep 22, 2014
6b25e9a
array.c: GC guard
nobu Sep 22, 2014
da7ec40
merge revision(s) r47696,r47697: [Backport #10279]
nagachika Sep 23, 2014
741436c
stringio.c: ASCII-8BIT StringIO rejects no encodings
nobu Sep 26, 2014
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
merge revision(s) r45179,r45564,r45565,r45584,r45585: [Backport ruby#…
…9721]

	envutil.rb: move labeled_module and labeled_class

	* test/ruby/envutil.rb (labeled_module, labeled_class): move from
  test/ruby/test_module.rb.
	* proc.c (rb_method_call_with_block, umethod_bind): call with
	  IClass including the module for a module instance method.
	  [ruby-core:61936] [Bug ruby#9721]

	* vm_insnhelper.c (vm_search_super_method): allow bound
	  UnboundMethod case.

	* proc.c (umethod_bind): use the ancestor iclass instead of new
	  iclass to get rid of infinite recursion, if the defined module
	  is already included.  [ruby-core:62014] [Bug ruby#9721]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@46190 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
nagachika committed May 27, 2014
commit 2a1acd59c06e2d70a128a4dc0a1ca03fb52d4e6f
15 changes: 15 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
Wed May 28 00:57:06 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>

* proc.c (umethod_bind): use the ancestor iclass instead of new
iclass to get rid of infinite recursion, if the defined module
is already included. [ruby-core:62014] [Bug #9721]

Wed May 28 00:57:06 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>

* proc.c (rb_method_call_with_block, umethod_bind): call with
IClass including the module for a module instance method.
[ruby-core:61936] [Bug #9721]

* vm_insnhelper.c (vm_search_super_method): allow bound
UnboundMethod case.

Wed May 28 00:38:37 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>

* array.c (ary_reject): may be turned into a shared array during
Expand Down
1 change: 1 addition & 0 deletions internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -596,6 +596,7 @@ rb_float_new_inline(double d)

/* object.c */
VALUE rb_obj_equal(VALUE obj1, VALUE obj2);
VALUE rb_class_search_ancestor(VALUE klass, VALUE super);

struct RBasicRaw {
VALUE flags;
Expand Down
32 changes: 21 additions & 11 deletions object.c
Original file line number Diff line number Diff line change
Expand Up @@ -584,6 +584,8 @@ class_or_module_required(VALUE c)
return c;
}

static VALUE class_search_ancestor(VALUE cl, VALUE c);

/*
* call-seq:
* obj.instance_of?(class) -> true or false
Expand Down Expand Up @@ -644,15 +646,27 @@ rb_obj_is_kind_of(VALUE obj, VALUE c)
VALUE cl = CLASS_OF(obj);

c = class_or_module_required(c);
c = RCLASS_ORIGIN(c);
return class_search_ancestor(cl, RCLASS_ORIGIN(c)) ? Qtrue : Qfalse;
}

static VALUE
class_search_ancestor(VALUE cl, VALUE c)
{
while (cl) {
if (cl == c || RCLASS_M_TBL_WRAPPER(cl) == RCLASS_M_TBL_WRAPPER(c))
return Qtrue;
return cl;
cl = RCLASS_SUPER(cl);
}
return Qfalse;
return 0;
}

VALUE
rb_class_search_ancestor(VALUE cl, VALUE c)
{
cl = class_or_module_required(cl);
c = class_or_module_required(c);
return class_search_ancestor(cl, RCLASS_ORIGIN(c));
}

/*
* call-seq:
Expand Down Expand Up @@ -1548,16 +1562,12 @@ rb_class_inherited_p(VALUE mod, VALUE arg)
rb_raise(rb_eTypeError, "compared with non class/module");
}
arg = RCLASS_ORIGIN(arg);
while (mod) {
if (RCLASS_M_TBL_WRAPPER(mod) == RCLASS_M_TBL_WRAPPER(arg))
return Qtrue;
mod = RCLASS_SUPER(mod);
if (class_search_ancestor(mod, arg)) {
return Qtrue;
}
/* not mod < arg; check if mod > arg */
while (arg) {
if (RCLASS_M_TBL_WRAPPER(arg) == RCLASS_M_TBL_WRAPPER(start))
return Qfalse;
arg = RCLASS_SUPER(arg);
if (class_search_ancestor(arg, start)) {
return Qfalse;
}
return Qnil;
}
Expand Down
18 changes: 16 additions & 2 deletions proc.c
F438
Original file line number Diff line number Diff line change
Expand Up @@ -1826,6 +1826,7 @@ rb_method_call_with_block(int argc, VALUE *argv, VALUE method, VALUE pass_procva
if ((state = EXEC_TAG()) == 0) {
rb_thread_t *th = GET_THREAD();
rb_block_t *block = 0;
VALUE defined_class;

if (!NIL_P(pass_procval)) {
rb_proc_t *pass_proc;
Expand All @@ -1834,7 +1835,9 @@ rb_method_call_with_block(int argc, VALUE *argv, VALUE method, VALUE pass_procva
}

th->passed_block = block;
result = rb_vm_call(th, data->recv, data->id, argc, argv, data->me, data->defined_class);
defined_class = data->defined_class;
if (BUILTIN_TYPE(defined_class) == T_MODULE) defined_class = data->rclass;
result = rb_vm_call(th, data->recv, data->id, argc, argv, data->me, defined_class);
}
POP_TAG();
if (safe >= 0)
Expand Down Expand Up @@ -1940,6 +1943,7 @@ umethod_bind(VALUE method, VALUE recv)
{
struct METHOD *data, *bound;
VALUE methclass;
VALUE rclass;

TypedData_Get_Struct(method, struct METHOD, &method_data_type, data);

Expand All @@ -1961,8 +1965,18 @@ umethod_bind(VALUE method, VALUE recv)
bound->me = ALLOC(rb_method_entry_t);
*bound->me = *data->me;
if (bound->me->def) bound->me->def->alias_count++;
rclass = CLASS_OF(recv);
if (BUILTIN_TYPE(bound->defined_class) == T_MODULE) {
VALUE ic = rb_class_search_ancestor(rclass, bound->defined_class);
if (ic) {
rclass = ic;
}
else {
rclass = rb_include_class_new(methclass, rclass);
}
}
bound->recv = recv;
bound->rclass = CLASS_OF(recv);
bound->rclass = rclass;
data->ume = ALLOC(struct unlinked_method_entry_list_entry);

return method;
Expand Down
16 changes: 16 additions & 0 deletions test/ruby/envutil.rb
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,22 @@ def with_default_internal(enc)
end
module_function :with_default_internal

def labeled_module(name, &block)
Module.new do
singleton_class.class_eval {define_method(:to_s) {name}; alias inspect to_s}
class_eval(&block) if block
end
end
module_function :labeled_module

def labeled_class(name, superclass = Object, &block)
Class.new(superclass) do
singleton_class.class_eval {define_method(:to_s) {name}; alias inspect to_s}
class_eval(&block) if block
end
end
module_function :labeled_class

if /darwin/ =~ RUBY_PLATFORM
DIAGNOSTIC_REPORTS_PATH = File.expand_path("~/Library/Logs/DiagnosticReports")
DIAGNOSTIC_REPORTS_TIMEFORMAT = '%Y-%m-%d-%H%M%S'
Expand Down
10 changes: 2 additions & 8 deletions test/ruby/test_module.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1559,17 +1559,11 @@ def test_prepend_module_ancestors
end

def labeled_module(name, &block)
Module.new do
singleton_class.class_eval {define_method(:to_s) {name}; alias inspect to_s}
class_eval(&block) if block
end
EnvUtil.labeled_module(name, &block)
end

def labeled_class(name, superclass = Object, &block)
Class.new(superclass) do
singleton_class.class_eval {define_method(:to_s) {name}; alias inspect to_s}
class_eval(&block) if block
end
EnvUtil.labeled_class(name, superclass, &block)
end

def test_prepend_instance_methods_false
Expand Down
63 changes: 52 additions & 11 deletions test/ruby/test_super.rb
Original file line number Diff line number Diff line change
Expand Up @@ -271,12 +271,12 @@ def test_double_include2
end

def test_super_in_instance_eval
super_class = Class.new {
super_class = EnvUtil.labeled_class("Super\u{30af 30e9 30b9}") {
def foo
return [:super, self]
end
}
sub_class = Class.new(super_class) {
sub_class = EnvUtil.labeled_class("Sub\u{30af 30e9 30b9}", super_class) {
def foo
x = Object.new
x.instance_eval do
Expand All @@ -285,18 +285,18 @@ def foo
end
}
obj = sub_class.new
assert_raise(TypeError) do
assert_raise_with_message(TypeError, /Sub\u{30af 30e9 30b9}/) do
obj.foo
end
end

def test_super_in_instance_eval_with_define_method
super_class = Class.new {
super_class = EnvUtil.labeled_class("Super\u{30af 30e9 30b9}") {
def foo
return [:super, self]
end
}
sub_class = Class.new(super_class) {
sub_class = EnvUtil.labeled_class("Sub\u{30af 30e9 30b9}", super_class) {
define_method(:foo) do
x = Object.new
x.instance_eval do
Expand All @@ -305,18 +305,18 @@ def foo
end
}
obj = sub_class.new
assert_raise(TypeError) do
assert_raise_with_message(TypeError, /Sub\u{30af 30e9 30b9}/) do
obj.foo
end
end

def test_super_in_orphan_block
super_class = Class.new {
super_class = EnvUtil.labeled_class("Super\u{30af 30e9 30b9}") {
def foo
return [:super, self]
end
}
sub_class = Class.new(super_class) {
sub_class = EnvUtil.labeled_class("Sub\u{30af 30e9 30b9}", super_class) {
def foo
x = Object.new
lambda { super() }
Expand All @@ -327,12 +327,12 @@ def foo
end

def test_super_in_orphan_block_with_instance_eval
super_class = Class.new {
super_class = EnvUtil.labeled_class("Super\u{30af 30e9 30b9}") {
def foo
return [:super, self]
end
}
sub_class = Class.new(super_class) {
sub_class = EnvUtil.labeled_class("Sub\u{30af 30e9 30b9}", super_class) {
def foo
x = Object.new
x.instance_eval do
Expand All @@ -341,7 +341,7 @@ def foo
end
}
obj = sub_class.new
assert_raise(TypeError) do
assert_raise_with_message(TypeError, /Sub\u{30af 30e9 30b9}/) do
obj.foo.call
end
end
Expand Down Expand Up @@ -453,4 +453,45 @@ def foo; super end
m.call
end
end

def test_super_in_module_unbound_method
bug9721 = '[ruby-core:61936] [Bug #9721]'

a = Module.new do
def foo(result)
result << "A"
end
end

b = Module.new do
def foo(result)
result << "B"
super
end
end

um = b.instance_method(:foo)

m = um.bind(Object.new.extend(a))
result = []
assert_nothing_raised(NoMethodError, bug9721) do
m.call(result)
end
assert_equal(%w[B A], result, bug9721)

bug9740 = '[ruby-core:62017] [Bug #9740]'

b.module_eval do
define_method(:foo) do |result|
um.bind(self).call(result)
end
end

result.clear
o = Object.new.extend(a).extend(b)
assert_nothing_raised(NoMethodError, SystemStackError, bug9740) do
o.foo(result)
end
assert_equal(%w[B A], result, bug9721)
end
end
2 changes: 1 addition & 1 deletion version.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.1.2"
#define RUBY_RELEASE_DATE "2014-05-28"
#define RUBY_PATCHLEVEL 110
#define RUBY_PATCHLEVEL 111

#define RUBY_RELEASE_YEAR 2014
#define RUBY_RELEASE_MONTH 5
Expand Down
5 changes: 3 additions & 2 deletions vm_insnhelper.c
Original file line number Diff line number Diff line change
Expand Up @@ -2002,15 +2002,16 @@ vm_search_super_method(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_inf
}

if (BUILTIN_TYPE(current_defined_class) != T_MODULE &&
BUILTIN_TYPE(current_defined_class) != T_ICLASS && /* bound UnboundMethod */
!FL_TEST(current_defined_class, RMODULE_INCLUDED_INTO_REFINEMENT) &&
!rb_obj_is_kind_of(ci->recv, current_defined_class)) {
VALUE m = RB_TYPE_P(current_defined_class, T_ICLASS) ?
RBASIC(current_defined_class)->klass : current_defined_class;

rb_raise(rb_eTypeError,
"self has wrong type to call super in this context: "
"%s (expected %s)",
rb_obj_classname(ci->recv), rb_class2name(m));
"%"PRIsVALUE" (expected %"PRIsVALUE")",
rb_obj_class(ci->recv), m);
}

switch (vm_search_superclass(GET_CFP(), iseq, sigval, ci)) {
Expand Down
0