@@ -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+
36733693static int string_getc(const JSString *p, int *pidx)
36743694{
36753695 int idx, c, c1;
0 commit comments