njs_parser_string_create(njs_vm_t *vm, njs_lexer_token_t *token,
njs_value_t *value)
{
- u_char *dst;
- size_t size, length;
- njs_str_t *src;
- const u_char *p, *end;
- njs_unicode_decode_t ctx;
-
- src = &token->text;
-
- njs_utf8_decode_init(&ctx);
+ size_t length;
+ njs_str_t dst;
- length = njs_utf8_stream_length(&ctx, src->start, src->length, 1, 0, &size);
-
- dst = njs_string_alloc(vm, value, size, length);
- if (njs_slow_path(dst == NULL)) {
+ length = njs_decode_utf8_length(&token->text, &dst.length);
+ dst.start = njs_string_alloc(vm, value, dst.length, length);
+ if (njs_slow_path(dst.start == NULL)) {
return NJS_ERROR;
}
- p = src->start;
- end = src->start + src->length;
-
- njs_utf8_decode_init(&ctx);
-
- (void) njs_utf8_stream_encode(&ctx, p, end, dst, 1, 0);
+ njs_decode_utf8(&dst, &token->text);
- if (length > NJS_STRING_MAP_STRIDE && size != length) {
- njs_string_offset_map_init(value->long_string.data->start, size);
+ if (length > NJS_STRING_MAP_STRIDE && dst.length != length) {
+ njs_string_offset_map_init(value->long_string.data->start, dst.length);
}
return NJS_OK;