mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Tested register windows of OP_SENDs generated by NODE_{RESCUE,HASH,ALIAS}; ref #3783
This commit is contained in:
@@ -1320,7 +1320,8 @@ codegen(codegen_scope *s, node *tree, int val)
|
||||
if (n4 && n4->car && nint(n4->car->car) == NODE_SPLAT) {
|
||||
codegen(s, n4->car, VAL);
|
||||
genop(s, MKOP_AB(OP_MOVE, cursp(), exc));
|
||||
push_n(2); pop_n(3);
|
||||
push_n(2); pop_n(2); /* space for one arg and a block */
|
||||
pop();
|
||||
genop(s, MKOP_ABC(OP_SEND, cursp(), new_msym(s, mrb_intern_lit(s->mrb, "__case_eqq")), 1));
|
||||
}
|
||||
else {
|
||||
@@ -2607,7 +2608,7 @@ codegen(codegen_scope *s, node *tree, int val)
|
||||
genop(s, MKOP_ABx(OP_LOADSYM, cursp(), b));
|
||||
push();
|
||||
genop(s, MKOP_A(OP_LOADNIL, cursp()));
|
||||
push();
|
||||
push(); /* space for a block */
|
||||
pop_n(4);
|
||||
genop(s, MKOP_ABC(OP_SEND, cursp(), c, 2));
|
||||
if (val) {
|
||||
|
||||
@@ -80,6 +80,14 @@ assert('register window of calls (#3783)') do
|
||||
Object.new&.__id__
|
||||
end
|
||||
|
||||
# NODE_RESCUE with splat
|
||||
assert_nothing_raised do
|
||||
begin
|
||||
raise
|
||||
rescue *[Exception]
|
||||
end
|
||||
end
|
||||
|
||||
# NODE_CASE
|
||||
assert_nothing_raised do
|
||||
case 1
|
||||
@@ -94,6 +102,24 @@ assert('register window of calls (#3783)') do
|
||||
end
|
||||
end
|
||||
|
||||
# NODE_HASH
|
||||
assert_nothing_raised do
|
||||
{}.merge(
|
||||
0=>0, 1=>1, 2=>2, 3=>3, 4=>4, 5=>5, 6=>6, 7=>7, 8=>8, 9=>9,
|
||||
10=>10, 11=>11, 12=>12, 13=>13, 14=>14, 15=>15, 16=>16, 17=>17, 18=>18, 19=>19,
|
||||
20=>20, 21=>21, 22=>22, 23=>23, 24=>24, 25=>25, 26=>26, 27=>27, 28=>28, 29=>29,
|
||||
30=>30, 31=>31, 32=>32, 33=>33, 34=>34, 35=>35, 36=>36, 37=>37, 38=>38, 39=>39,
|
||||
40=>40, 41=>41, 42=>42, 43=>43, 44=>44, 45=>45, 46=>46, 47=>47, 48=>48, 49=>49,
|
||||
50=>50, 51=>51, 52=>52, 53=>53, 54=>54, 55=>55, 56=>56, 57=>57, 58=>58, 59=>59,
|
||||
60=>60, 61=>61, 62=>62, 63=>63, 64=>64, 65=>65, 66=>66, 67=>67, 68=>68, 69=>69,
|
||||
70=>70, 71=>71, 72=>72, 73=>73, 74=>74, 75=>75, 76=>76, 77=>77, 78=>78, 79=>79,
|
||||
80=>80, 81=>81, 82=>82, 83=>83, 84=>84, 85=>85, 86=>86, 87=>87, 88=>88, 89=>89,
|
||||
90=>90, 91=>91, 92=>92, 93=>93, 94=>94, 95=>95, 96=>96, 97=>97, 98=>98, 99=>99,
|
||||
100=>100, 101=>101, 102=>102, 103=>103, 104=>104, 105=>105, 106=>106, 107=>107, 108=>108, 109=>109,
|
||||
110=>110, 111=>111, 112=>112, 113=>113, 114=>114, 115=>115, 116=>116, 117=>117, 118=>118, 119=>119,
|
||||
120=>120, 121=>121, 122=>122, 123=>123, 124=>124, 125=>125, 126=>126)
|
||||
end
|
||||
|
||||
# NODE_YIELD
|
||||
def check_node_yield
|
||||
yield
|
||||
@@ -108,4 +134,11 @@ assert('register window of calls (#3783)') do
|
||||
undef send
|
||||
end
|
||||
end
|
||||
|
||||
# NODE_ALIAS
|
||||
assert_nothing_raised do
|
||||
class << Object.new
|
||||
alias send2 send
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user