67 for (i = 0; i < n; i++) {
72#if defined(DUK_USE_NONSTD_STRING_FROMCHARCODE_32BIT)
196 DUK_ASSERT(start_pos >= 0 && start_pos <= len);
199 if (start_pos > end_pos) {
211#ifdef DUK_USE_SECTION_B
236 start_pos = len + start_pos;
238 DUK_ASSERT(start_pos >= 0 && start_pos <= len);
247 DUK_ASSERT(start_pos >= 0 && start_pos <= len);
274 start_pos = len + start_pos;
281 end_pos = len + end_pos;
284 DUK_ASSERT(start_pos >= 0 && start_pos <= len);
287 if (end_pos < start_pos) {
321 const duk_uint8_t *p_start, *p_end, *p;
322 const duk_uint8_t *q_start;
324 duk_uint8_t firstbyte;
371 firstbyte = q_start[0];
372 while (p <= p_end && p >= p_start) {
382 if (
DUK_MEMCMP((
const void *) p, (
const void *) q_start, (
size_t) q_blen) == 0) {
389 if (is_lastindexof) {
395 if ((t & 0xc0) != 0x80) {
400 if ((t & 0xc0) != 0x80) {
435#ifdef DUK_USE_REGEXP_SUPPORT
440 duk_uint32_t match_start_coff, match_start_boff;
441#ifdef DUK_USE_REGEXP_SUPPORT
444 duk_uint32_t prev_match_end_boff;
445 const duk_uint8_t *r_start, *r_end, *r;
465#ifdef DUK_USE_REGEXP_SUPPORT
479#ifdef DUK_USE_REGEXP_SUPPORT
499 prev_match_end_boff = 0;
527#ifdef DUK_USE_REGEXP_SUPPORT
552 duk_uint32_t last_index;
557 (
long) last_index, (
long) (last_index + 1)));
569 const duk_uint8_t *p_start, *p_end, *p;
570 const duk_uint8_t *q_start;
573#ifdef DUK_USE_REGEXP_SUPPORT
588 match_start_coff = 0;
592 if (
DUK_MEMCMP((
const void *) p, (
const void *) q_start, (
size_t) q_blen) == 0) {
596#ifdef DUK_USE_REGEXP_SUPPORT
603 if ((p[0] & 0xc0) != 0x80) {
623 tmp_sz = (
duk_size_t) (match_start_boff - prev_match_end_boff);
637#ifdef DUK_USE_REGEXP_SUPPORT
641 for (idx = 0; idx < match_caps; idx++) {
670#ifdef DUK_USE_REGEXP_SUPPORT
703 duk_uint32_t match_end_boff;
718#ifdef DUK_USE_REGEXP_SUPPORT
737 captmp = capnum * 10 + (ch3 -
DUK_ASC_0);
738 if (captmp < match_caps) {
745 if (capnum > 0 && capnum < match_caps) {
782#ifdef DUK_USE_REGEXP_SUPPORT
814 duk_uint32_t arr_idx;
815#ifdef DUK_USE_REGEXP_SUPPORT
819 duk_uint32_t prev_match_end_coff, prev_match_end_boff;
820 duk_uint32_t match_start_boff, match_start_coff;
821 duk_uint32_t match_end_boff, match_end_coff;
831 limit = 0xffffffffUL;
855#ifdef DUK_USE_REGEXP_SUPPORT
867#ifdef DUK_USE_REGEXP_SUPPORT
878 prev_match_end_boff = 0;
879 prev_match_end_coff = 0;
893#ifdef DUK_USE_REGEXP_SUPPORT
923 if (prev_match_end_boff == match_end_boff) {
933 const duk_uint8_t *p_start, *p_end, *p;
934 const duk_uint8_t *q_start;
939 p = p_start + prev_match_end_boff;
949 match_start_coff = prev_match_end_coff;
965 if ((p[0] & 0xc0) != 0x80) {
977 if (
DUK_MEMCMP((
const void *) p, (
const void *) q_start, (
size_t) q_blen) == 0) {
983 if ((p[0] & 0xc0) != 0x80) {
995 match_start_boff = (duk_uint32_t) (p - p_start);
996 match_end_coff = (duk_uint32_t) (match_start_coff + q_clen);
997 match_end_boff = (duk_uint32_t) (match_start_boff + q_blen);
1000 if (prev_match_end_boff == match_end_boff) {
1001 prev_match_end_boff++;
1002 prev_match_end_coff++;
1014 DUK_DDD(
DUK_DDDPRINT(
"split; match_start b=%ld,c=%ld, match_end b=%ld,c=%ld, prev_end b=%ld,c=%ld",
1015 (
long) match_start_boff, (
long) match_start_coff,
1016 (
long) match_end_boff, (
long) match_end_coff,
1017 (
long) prev_match_end_boff, (
long) prev_match_end_coff));
1021 (
duk_size_t) (match_start_boff - prev_match_end_boff));
1024 if (arr_idx >= limit) {
1028#ifdef DUK_USE_REGEXP_SUPPORT
1033 for (i = 1; i < len; i++) {
1038 if (arr_idx >= limit) {
1052 prev_match_end_boff = match_end_boff;
1053 prev_match_end_coff = match_end_coff;
1060 (
long) prev_match_end_boff, (
long) prev_match_end_coff));
1078#ifdef DUK_USE_REGEXP_SUPPORT
1091#ifdef DUK_USE_REGEXP_SUPPORT
1117#ifdef DUK_USE_REGEXP_SUPPORT
1163#ifdef DUK_USE_REGEXP_SUPPORT
1196 prev_last_index = 0;
1216 if (this_index == prev_last_index) {
1221 prev_last_index = this_index;
1285 prefix_len = (h1_len <= h2_len ? h1_len : h2_len);
1290 (size_t) prefix_len);
1295 }
else if (rc > 0) {
1301 if (h1_len > h2_len) {
1304 }
else if (h1_len == h2_len) {
duk_uint_t duk_ucodepoint_t
duk_small_int_t duk_ret_t
duk_int_fast32_t duk_int_t
duk_small_int_t duk_bool_t
DUK_EXTERNAL void duk_concat(duk_context *ctx, duk_idx_t count)
DUK_INTERNAL_DECL duk_hstring * duk_to_hstring(duk_context *ctx, duk_idx_t index)
#define DUK_HSTRING_GET_DATA(x)
DUK_INTERNAL_DECL duk_int_t duk_to_int_clamped_raw(duk_context *ctx, duk_idx_t index, duk_int_t minval, duk_int_t maxval, duk_bool_t *out_clamped)
#define DUK_HOBJECT_CLASS_REGEXP
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_EXTERNAL void duk_push_this(duk_context *ctx)
DUK_INTERNAL_DECL duk_bool_t duk_get_prop_stridx(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx)
#define DUK_BW_WRITE_ENSURE_U8(thr, bw_ctx, val)
#define DUK_STRIDX_GLOBAL
#define DUK_TVAL_GET_OBJECT(tv)
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_INTERNAL_DECL void duk_regexp_match(duk_hthread *thr)
DUK_INTERNAL_DECL duk_ucodepoint_t duk_hstring_char_code_at_raw(duk_hthread *thr, duk_hstring *h, duk_uint_t pos)
DUK_EXTERNAL duk_bool_t duk_is_function(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL duk_bool_t duk_put_prop_index(duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx)
#define DUK_BW_COMPACT(thr, bw_ctx)
DUK_EXTERNAL void duk_new(duk_context *ctx, duk_idx_t nargs)
#define DUK_TVAL_IS_OBJECT(tv)
DUK_EXTERNAL duk_size_t duk_get_length(duk_context *ctx, duk_idx_t index)
#define DUK_PROPDESC_FLAGS_NONE
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_HSTRING_GET_CHARLEN(x)
DUK_EXTERNAL const char * duk_push_lstring(duk_context *ctx, const char *str, duk_size_t len)
#define DUK_BIDX_STRING_PROTOTYPE
DUK_EXTERNAL void duk_push_null(duk_context *ctx)
DUK_EXTERNAL void duk_push_int(duk_context *ctx, duk_int_t val)
DUK_EXTERNAL duk_int_t duk_get_int(duk_context *ctx, duk_idx_t index)
#define DUK_HOBJECT_CLASS_AS_FLAGS(v)
DUK_EXTERNAL duk_double_t duk_to_number(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL duk_bool_t duk_is_number(duk_context *ctx, duk_idx_t index)
DUK_INTERNAL_DECL duk_uint_fast32_t duk_heap_strcache_offset_char2byte(duk_hthread *thr, duk_hstring *h, duk_uint_fast32_t char_offset)
DUK_EXTERNAL void duk_replace(duk_context *ctx, duk_idx_t to_index)
#define DUK_HOBJECT_FLAG_EXOTIC_STRINGOBJ
DUK_INTERNAL_DECL void duk_push_hobject_bidx(duk_context *ctx, duk_small_int_t builtin_idx)
#define DUK_TVAL_IS_STRING(tv)
DUK_EXTERNAL duk_bool_t duk_is_object(duk_context *ctx, duk_idx_t index)
#define DUK_HSTRING_GET_BYTELEN(x)
DUK_EXTERNAL void duk_set_top(duk_context *ctx, duk_idx_t index)
#define DUK_ASC_SINGLEQUOTE
#define DUK_STRIDX_EMPTY_STRING
DUK_EXTERNAL void duk_trim(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL void duk_dup(duk_context *ctx, duk_idx_t from_index)
#define DUK_BIDX_REGEXP_CONSTRUCTOR
DUK_EXTERNAL void duk_insert(duk_context *ctx, duk_idx_t to_index)
#define DUK_STRIDX_INT_VALUE
DUK_EXTERNAL duk_idx_t duk_get_top(duk_context *ctx)
DUK_INTERNAL_DECL duk_bool_t duk_get_prop_stridx_boolean(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx, duk_bool_t *out_has_prop)
DUK_EXTERNAL duk_bool_t duk_get_prop_index(duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index)
#define DUK_STRIDX_LAST_INDEX
#define DUK_BW_WRITE_ENSURE_HSTRING(thr, bw_ctx, val)
#define DUK_BW_INIT_PUSHBUF(thr, bw_ctx, sz)
DUK_EXTERNAL duk_bool_t duk_is_constructor_call(duk_context *ctx)
DUK_INTERNAL_DECL duk_hstring * duk_push_this_coercible_to_string(duk_context *ctx)
DUK_EXTERNAL duk_uint32_t duk_to_uint32(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL duk_bool_t duk_is_nan(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL duk_uint_t duk_get_uint(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL void duk_push_number(duk_context *ctx, duk_double_t val)
DUK_INTERNAL_DECL duk_tval * duk_require_tval(duk_context *ctx, duk_idx_t index)
#define DUK_ASSERT_TOP(ctx, n)
#define DUK_HOBJECT_FLAG_EXTENSIBLE
DUK_EXTERNAL void duk_substring(duk_context *ctx, duk_idx_t index, duk_size_t start_offset, duk_size_t end_offset)
DUK_INTERNAL_DECL duk_idx_t duk_push_object_helper(duk_context *ctx, duk_uint_t hobject_flags_and_class, duk_small_int_t prototype_bidx)
DUK_EXTERNAL void duk_call(duk_context *ctx, duk_idx_t nargs)
DUK_EXTERNAL const char * duk_to_string(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL duk_uint16_t duk_to_uint16(duk_context *ctx, duk_idx_t index)
#define DUK_BW_WRITE_ENSURE_BYTES(thr, bw_ctx, valptr, valsz)
DUK_EXTERNAL void duk_pop(duk_context *ctx)
DUK_EXTERNAL duk_idx_t duk_push_array(duk_context *ctx)
#define DUK_HOBJECT_GET_CLASS_NUMBER(h)
DUK_EXTERNAL duk_int_t duk_get_current_magic(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_hstring * duk_get_hstring(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL duk_bool_t duk_is_string(duk_context *ctx, duk_idx_t index)
#define DUK_HOBJECT_CLASS_STRING
DUK_INTERNAL_DECL void duk_regexp_match_force_global(duk_hthread *thr)
DUK_INTERNAL_DECL void duk_unicode_case_convert_string(duk_hthread *thr, duk_bool_t uppercase)
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)
DUK_EXTERNAL duk_int_t duk_to_int(duk_context *ctx, duk_idx_t index)
#define DUK_BW_WRITE_ENSURE_XUTF8(thr, bw_ctx, cp)
#define DUK_BW_WRITE_ENSURE_CESU8(thr, bw_ctx, cp)
DUK_INTERNAL_DECL duk_tval * duk_get_tval(duk_context *ctx, duk_idx_t index)
#define DUK_RET_TYPE_ERROR
#define DUK_RET_UNSUPPORTED_ERROR
DUK_INTERNAL duk_ret_t duk_bi_string_prototype_split(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_string_prototype_char_at(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_string_prototype_char_code_at(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_string_prototype_substring(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_string_prototype_slice(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_string_constructor(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_string_prototype_caseconv_shared(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_string_prototype_search(duk_context *ctx)
DUK_LOCAL void duk__to_regexp_helper(duk_context *ctx, duk_idx_t index, duk_bool_t force_new)
DUK_INTERNAL duk_ret_t duk_bi_string_constructor_from_char_code(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_string_prototype_concat(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_string_prototype_substr(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_string_prototype_match(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_string_prototype_replace(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_string_prototype_indexof_shared(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_string_prototype_trim(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_string_prototype_locale_compare(duk_context *ctx)
DUK_INTERNAL duk_ret_t duk_bi_string_prototype_to_string(duk_context *ctx)