Skip to content

Commit 79f3ae2

Browse files
author
Fabrice Bellard
committed
optimized string_buffer_putc()
1 parent e5de89f commit 79f3ae2

1 file changed

Lines changed: 24 additions & 4 deletions

File tree

quickjs.c

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3610,7 +3610,7 @@ static no_inline int string_buffer_realloc(StringBuffer *s, int new_len, int c)
36103610
return 0;
36113611
}
36123612

3613-
static no_inline int string_buffer_putc_slow(StringBuffer *s, uint32_t c)
3613+
static no_inline int string_buffer_putc16_slow(StringBuffer *s, uint32_t c)
36143614
{
36153615
if (unlikely(s->len >= s->size)) {
36163616
if (string_buffer_realloc(s, s->len + 1, c))
@@ -3655,11 +3655,10 @@ static int string_buffer_putc16(StringBuffer *s, uint32_t c)
36553655
return 0;
36563656
}
36573657
}
3658-
return string_buffer_putc_slow(s, c);
3658+
return string_buffer_putc16_slow(s, c);
36593659
}
36603660

3661-
/* 0 <= c <= 0x10ffff */
3662-
static int string_buffer_putc(StringBuffer *s, uint32_t c)
3661+
static int string_buffer_putc_slow(StringBuffer *s, uint32_t c)
36633662
{
36643663
if (unlikely(c >= 0x10000)) {
36653664
/* surrogate pair */
@@ -3670,6 +3669,27 @@ static int string_buffer_putc(StringBuffer *s, uint32_t c)
36703669
return string_buffer_putc16(s, c);
36713670
}
36723671

3672+
/* 0 <= c <= 0x10ffff */
3673+
static inline int string_buffer_putc(StringBuffer *s, uint32_t c)
3674+
{
3675+
if (likely(s->len < s->size)) {
3676+
if (s->is_wide_char) {
3677+
if (c < 0x10000) {
3678+
s->str->u.str16[s->len++] = c;
3679+
return 0;
3680+
} else if (likely((s->len + 1) < s->size)) {
3681+
s->str->u.str16[s->len++] = get_hi_surrogate(c);
3682+
s->str->u.str16[s->len++] = get_lo_surrogate(c);
3683+
return 0;
3684+
}
3685+
} else if (c < 0x100) {
3686+
s->str->u.str8[s->len++] = c;
3687+
return 0;
3688+
}
3689+
}
3690+
return string_buffer_putc_slow(s, c);
3691+
}
3692+
36733693
static int string_getc(const JSString *p, int *pidx)
36743694
{
36753695
int idx, c, c1;

0 commit comments

Comments
 (0)