Skip to content

Commit 6dbe227

Browse files
committed
Set proper class to subclass of Array
More compatibility to CRuby.
1 parent 5ec051f commit 6dbe227

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

src/array.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,14 +242,19 @@ mrb_ary_resize(mrb_state *mrb, mrb_value ary, mrb_int new_len)
242242
}
243243

244244
static mrb_value
245-
mrb_ary_s_create(mrb_state *mrb, mrb_value self)
245+
mrb_ary_s_create(mrb_state *mrb, mrb_value klass)
246246
{
247+
mrb_value ary;
247248
mrb_value *vals;
248249
mrb_int len;
250+
struct RArray *a;
249251

250252
mrb_get_args(mrb, "*", &vals, &len);
253+
ary = mrb_ary_new_from_values(mrb, len, vals);
254+
a = mrb_ary_ptr(ary);
255+
a->c = mrb_class_ptr(klass);
251256

252-
return mrb_ary_new_from_values(mrb, len, vals);
257+
return ary;
253258
}
254259

255260
static void

test/t/array.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@
1313
assert_equal([1, 2, 3], Array.[](1,2,3))
1414
end
1515

16+
class SubArray < Array
17+
end
18+
19+
assert('SubArray.[]') do
20+
a = SubArray[1, 2, 3]
21+
assert_equal(SubArray, a.class)
22+
end
23+
1624
assert('Array#+', '15.2.12.5.1') do
1725
assert_equal([1, 1], [1].+([1]))
1826
end

0 commit comments

Comments
 (0)