mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Skip array embedding if MRB_NO_BOXING and MRB_32BIT; fix #4382
On some platforms, `sizeof(mrb_value) > sizeof(void*)*3`, which makes `MRB_ARY_EMBED_LEN_MAX` zero. And zero sized array cause compile errors.
This commit is contained in:
+8
-2
@@ -1123,8 +1123,14 @@ mrb_ary_clear(mrb_state *mrb, mrb_value self)
|
||||
else if (!ARY_EMBED_P(a)){
|
||||
mrb_free(mrb, a->as.heap.ptr);
|
||||
}
|
||||
ARY_SET_EMBED_LEN(a, 0);
|
||||
|
||||
if (MRB_ARY_EMBED_LEN_MAX > 0) {
|
||||
ARY_SET_EMBED_LEN(a, 0);
|
||||
}
|
||||
else {
|
||||
a->as.heap.ptr = NULL;
|
||||
a->as.heap.aux.capa = 0;
|
||||
ARY_SET_LEN(a, 0);
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
static inline void
|
||||
value_move(mrb_value *s1, const mrb_value *s2, size_t n)
|
||||
{
|
||||
if (n == 0) return;
|
||||
if (s1 > s2 && s1 < s2 + n)
|
||||
{
|
||||
s1 += n;
|
||||
|
||||
Reference in New Issue
Block a user