49#define DUK__ARRAY_MID_JOIN_LIMIT 4096
110 for (i = 0; i < nargs; i++) {
152 DUK_DDD(
DUK_DDDPRINT(
"this.join is not callable, fall back to (original) Object.toString"));
200 for (i = 0; i < n; i++) {
219 for (j = 0; j < len; j++) {
227#if defined(DUK_USE_NONSTD_ARRAY_CONCAT_TRAILER)
268 duk_uint32_t len, count;
292 (
unsigned long) len));
310 (
long) count, (
long) idx, (
long) len));
326 if (to_locale_string) {
395 if (len + (duk_uint32_t) n < len) {
396 DUK_D(
DUK_DPRINT(
"Array.prototype.push() would go beyond 32-bit length, throw"));
400 for (i = 0; i < n; i++) {
448 DUK_DDD(
DUK_DDDPRINT(
"duk__array_sort_compare: idx1=%ld, idx2=%ld -> indices identical, quick exit",
449 (
long) idx1, (
long) idx2));
456 DUK_DDD(
DUK_DDDPRINT(
"duk__array_sort_compare: idx1=%ld, idx2=%ld, have1=%ld, have2=%ld, val1=%!T, val2=%!T",
457 (
long) idx1, (
long) idx2, (
long) have1, (
long) have2,
515 }
else if (d > 0.0) {
570#if defined(DUK_USE_DDDPRINT)
581 for (i = 0; i < n; i++) {
584 }
else if (i == lo) {
586 }
else if (i == hi) {
588 }
else if (i >= lo && i <= hi) {
598 (
const char *) buf, (
long) lo, (
long) hi, (
long) pivot));
630 (
long) lo, (
long) hi, (
long) p));
643 (
long) l, (
long) r, (
long) p));
654 (
long) l, (
long) r, (
long) p));
691#if defined(DUK_USE_DDDPRINT)
692 duk__debuglog_qsort_state(ctx, lo, hi, r);
763 act_start = len + act_start;
767#ifdef DUK_USE_NONSTD_ARRAY_SPLICE_DELCOUNT
771#ifdef DUK_USE_NONSTD_ARRAY_SPLICE_DELCOUNT
778 del_count = len - act_start;
790 DUK_D(
DUK_DPRINT(
"Array.prototype.splice() would go beyond 32-bit length, throw"));
808 for (i = 0; i < del_count; i++) {
820 if (item_count < del_count) {
830 for (i = act_start; i < n; i++) {
842 n = len - del_count + item_count;
843 for (i = len - 1; i >= n; i--) {
848 }
else if (item_count > del_count) {
858 for (i = len - del_count - 1; i >= act_start; i--) {
879 for (i = 0; i < item_count; i++) {
903 duk_uint32_t lower, upper;
913 for (lower = 0; lower < middle; lower++) {
918 upper = len - lower - 1;
956 duk_uint32_t res_length = 0;
986 DUK_ASSERT(start >= 0 && (duk_uint32_t) start <= len);
987 DUK_ASSERT(end >= 0 && (duk_uint32_t) end <= len);
990 for (i = start; i < end; i++) {
994 res_length = idx + 1;
1031 for (i = 1; i < len; i++) {
1075 if (len + (duk_uint32_t) nargs < len) {
1076 DUK_D(
DUK_DPRINT(
"Array.prototype.unshift() would go beyond 32-bit length, throw"));
1099 for (i = 0; i < (duk_uint32_t) nargs; i++) {
1161 (idx_step > 0 ? -len : -len - 1),
1162 (idx_step > 0 ? len : len - 1));
1163 if (from_index < 0) {
1165 from_index = len + from_index;
1174 from_index = len - 1;
1184 for (i = from_index; i >= 0 && i < len; i += idx_step) {
1207#define DUK__ITER_EVERY 0
1208#define DUK__ITER_SOME 1
1209#define DUK__ITER_FOREACH 2
1210#define DUK__ITER_MAP 3
1211#define DUK__ITER_FILTER 4
1224 duk_uint32_t res_length = 0;
1247 for (i = 0; i < len; i++) {
1251#if defined(DUK_USE_NONSTD_ARRAY_MAP_TRAILER)
1281 switch (iter_type) {
1322 switch (iter_type) {
1354 duk_uint32_t i, len;
1390 for (i = (idx_step >= 0 ? 0 : len - 1);
1394 (
long) i, (
long) len, (
long) have_acc,
1417 DUK_DDD(
DUK_DDDPRINT(
"calling reduce function: func=%!T, prev=%!T, curr=%!T, idx=%!T, obj=%!T",
1439#undef DUK__ARRAY_MID_JOIN_LIMIT
1441#undef DUK__ITER_EVERY
1442#undef DUK__ITER_SOME
1443#undef DUK__ITER_FOREACH
1445#undef DUK__ITER_FILTER
#define DUK_UNREACHABLE()
duk_small_int_t duk_ret_t
duk_int_fast32_t duk_int_t
duk_small_int_t duk_bool_t
#define DUK_STRIDX_TO_LOCALE_STRING
#define DUK_ERROR_RANGE(thr, msg)
DUK_INTERNAL_DECL duk_hstring * duk_to_hstring(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL void duk_pop_2(duk_context *ctx)
DUK_EXTERNAL duk_bool_t duk_is_undefined(duk_context *ctx, duk_idx_t index)
DUK_INTERNAL_DECL duk_bool_t duk_put_prop_stridx(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx)
DUK_INTERNAL_DECL duk_bool_t duk_get_prop_stridx(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx)
DUK_EXTERNAL void duk_push_true(duk_context *ctx)
DUK_EXTERNAL duk_bool_t duk_del_prop_index(duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index)
DUK_EXTERNAL duk_bool_t duk_has_prop_index(duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index)
DUK_EXTERNAL duk_double_t duk_get_number(duk_context *ctx, duk_idx_t index)
DUK_INTERNAL_DECL duk_uint32_t duk_util_tinyrandom_get_bits(duk_hthread *thr, duk_small_int_t n)
DUK_INTERNAL_DECL duk_int_t duk_to_int_clamped(duk_context *ctx, duk_idx_t index, duk_int_t minval, duk_int_t maxval)
DUK_EXTERNAL void duk_push_boolean(duk_context *ctx, duk_bool_t val)
DUK_EXTERNAL duk_bool_t duk_put_prop_index(duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx)
#define duk_xdef_prop_index_wec(ctx, obj_index, arr_index)
DUK_EXTERNAL duk_size_t duk_get_length(duk_context *ctx, duk_idx_t index)
DUK_INTERNAL_DECL void duk_push_hstring_stridx(duk_context *ctx, duk_small_int_t stridx)
DUK_EXTERNAL void duk_require_stack(duk_context *ctx, duk_idx_t extra)
#define DUK_HOBJECT_CLASS_ARRAY
DUK_EXTERNAL duk_bool_t duk_to_boolean(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL void duk_push_int(duk_context *ctx, duk_int_t val)
DUK_EXTERNAL duk_double_t duk_to_number(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL void duk_dup_top(duk_context *ctx)
DUK_EXTERNAL duk_bool_t duk_is_number(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL void duk_replace(duk_context *ctx, duk_idx_t to_index)
#define DUK_STR_ARRAY_LENGTH_OVER_2G
DUK_EXTERNAL void duk_set_top(duk_context *ctx, duk_idx_t index)
#define DUK_STRIDX_EMPTY_STRING
#define DUK_STRIDX_LENGTH
DUK_EXTERNAL void duk_dup(duk_context *ctx, duk_idx_t from_index)
DUK_EXTERNAL void duk_insert(duk_context *ctx, duk_idx_t to_index)
DUK_EXTERNAL duk_idx_t duk_get_top(duk_context *ctx)
DUK_EXTERNAL duk_bool_t duk_get_prop_index(duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index)
DUK_INTERNAL_DECL duk_small_int_t duk_js_string_compare(duk_hstring *h1, duk_hstring *h2)
DUK_EXTERNAL void duk_push_undefined(duk_context *ctx)
DUK_EXTERNAL void duk_call_method(duk_context *ctx, duk_idx_t nargs)
DUK_EXTERNAL duk_bool_t duk_is_array(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL duk_uint32_t duk_to_uint32(duk_context *ctx, duk_idx_t index)
#define DUK_ASSERT_TOP(ctx, n)
DUK_EXTERNAL void duk_push_false(duk_context *ctx)
#define duk_push_uarridx(ctx, val)
DUK_EXTERNAL void duk_call(duk_context *ctx, duk_idx_t nargs)
DUK_EXTERNAL duk_bool_t duk_is_null_or_undefined(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL void duk_to_object(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL const char * duk_to_string(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL void duk_pop(duk_context *ctx)
DUK_EXTERNAL duk_bool_t duk_strict_equals(duk_context *ctx, duk_idx_t index1, duk_idx_t index2)
DUK_EXTERNAL duk_idx_t duk_push_array(duk_context *ctx)
DUK_EXTERNAL duk_int_t duk_get_current_magic(duk_context *ctx)
DUK_INTERNAL_DECL duk_ret_t duk_bi_object_prototype_to_string(duk_context *ctx)
DUK_INTERNAL_DECL void duk_xdef_prop_stridx(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx, duk_small_uint_t desc_flags)
DUK_INTERNAL_DECL duk_hobject * duk_push_this_coercible_to_object(duk_context *ctx)
DUK_INTERNAL_DECL duk_hobject * duk_get_hobject_with_class(duk_context *ctx, duk_idx_t index, duk_small_uint_t classnum)
#define duk_push_u32(ctx, val)
#define DUK_PROPDESC_FLAGS_W
DUK_EXTERNAL void duk_join(duk_context *ctx, duk_idx_t count)
DUK_INTERNAL_DECL duk_tval * duk_get_tval(duk_context *ctx, duk_idx_t index)
#define duk_require_callable(ctx, index)
#define DUK_RET_TYPE_ERROR
#define DUK_RET_RANGE_ERROR
#define duk_is_callable(ctx, index)
DUK_INTERNAL duk_ret_t duk_bi_array_prototype_concat(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_array_prototype_unshift(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_array_prototype_sort(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_array_prototype_to_string(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_array_prototype_join_shared(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_array_prototype_shift(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_array_prototype_pop(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_array_prototype_slice(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_array_prototype_indexof_shared(duk_context *ctx)
#define DUK__ITER_FOREACH
DUK_LOCAL void duk__array_sort_swap(duk_context *ctx, duk_int_t l, duk_int_t r)
DUK_INTERNAL duk_ret_t duk_bi_array_prototype_push(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_array_prototype_reverse(duk_context *ctx)
DUK_LOCAL duk_uint32_t duk__push_this_obj_len_u32(duk_context *ctx)
#define DUK__ARRAY_MID_JOIN_LIMIT
DUK_INTERNAL duk_ret_t duk_bi_array_prototype_iter_shared(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_array_constructor_is_array(duk_context *ctx)
DUK_LOCAL duk_small_int_t duk__array_sort_compare(duk_context *ctx, duk_int_t idx1, duk_int_t idx2)
DUK_INTERNAL duk_ret_t duk_bi_array_prototype_reduce_shared(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_array_constructor(duk_context *ctx)
DUK_LOCAL duk_uint32_t duk__push_this_obj_len_u32_limited(duk_context *ctx)
DUK_LOCAL void duk__array_qsort(duk_context *ctx, duk_int_t lo, duk_int_t hi)
DUK_INTERNAL duk_ret_t duk_bi_array_prototype_splice(duk_context *ctx)