@@ -1115,28 +1115,27 @@ ecma_builtin_json_stringify (ecma_value_t this_arg __attr_unused___, /**< 'this'
11151115 }
11161116 else
11171117 {
1118- ecma_length_t string_len = ecma_string_get_length (space_str_p);
1118+ ecma_length_t string_size = ecma_string_get_size (space_str_p);
11191119
1120- MEM_DEFINE_LOCAL_ARRAY (zt_string_buff, string_len , lit_utf8_byte_t );
1120+ MEM_DEFINE_LOCAL_ARRAY (string_buff, string_size , lit_utf8_byte_t );
11211121
1122- size_t string_buf_size = (size_t ) (string_len) * sizeof (lit_utf8_byte_t );
11231122 ssize_t bytes_copied = ecma_string_to_utf8_string (space_str_p,
1124- zt_string_buff ,
1125- (ssize_t ) string_buf_size );
1123+ string_buff ,
1124+ (ssize_t ) string_size );
11261125 JERRY_ASSERT (bytes_copied > 0 );
11271126
1128- /* Buffer for the first 10 characters. */
1129- MEM_DEFINE_LOCAL_ARRAY (space_buff , 10 , lit_utf8_byte_t );
1127+ lit_utf8_iterator_t iter = lit_utf8_iterator_create (string_buff, string_size);
1128+ lit_utf8_iterator_advance (&iter , 10 );
11301129
1131- for ( uint32_t i = 0 ; i < 10 ; i++)
1132- {
1133- space_buff[i] = zt_string_buff[i] ;
1134- }
1130+ uint32_t space_buff_size = iter. buf_pos . offset ;
1131+ /* Buffer for the first 10 characters. */
1132+ MEM_DEFINE_LOCAL_ARRAY ( space_buff, space_buff_size, lit_utf8_byte_t ) ;
1133+ memcpy (space_buff, string_buff, space_buff_size);
11351134
1136- context_p.gap_str_p = ecma_new_ecma_string_from_utf8 ((lit_utf8_byte_t *) space_buff, 10 );
1135+ context_p.gap_str_p = ecma_new_ecma_string_from_utf8 ((lit_utf8_byte_t *) space_buff, space_buff_size );
11371136
11381137 MEM_FINALIZE_LOCAL_ARRAY (space_buff);
1139- MEM_FINALIZE_LOCAL_ARRAY (zt_string_buff );
1138+ MEM_FINALIZE_LOCAL_ARRAY (string_buff );
11401139 }
11411140 }
11421141 /* 8. */
@@ -1198,23 +1197,24 @@ ecma_builtin_json_quote (ecma_string_t *string_p) /**< string that should be quo
11981197 ecma_string_t *product_str_p = ecma_copy_or_ref_ecma_string (quote_str_p);
11991198 ecma_string_t *tmp_str_p;
12001199
1201- ecma_length_t string_len = ecma_string_get_length (string_p);
1200+ ecma_length_t string_size = ecma_string_get_size (string_p);
12021201
1203- MEM_DEFINE_LOCAL_ARRAY (zt_string_buff, string_len , lit_utf8_byte_t );
1202+ MEM_DEFINE_LOCAL_ARRAY (string_buff, string_size , lit_utf8_byte_t );
12041203
1205- size_t string_buf_size = (size_t ) (string_len) * sizeof (lit_utf8_byte_t );
12061204 ssize_t bytes_copied = ecma_string_to_utf8_string (string_p,
1207- zt_string_buff,
1208- (ssize_t ) string_buf_size);
1209- JERRY_ASSERT (bytes_copied > 0 || !string_len);
1205+ string_buff,
1206+ (ssize_t ) string_size);
12101207
1211- /* 2. */
1212- for (ecma_length_t i = 0 ; i < string_len; i++)
1208+ JERRY_ASSERT (bytes_copied > 0 || !string_size);
1209+
1210+ lit_utf8_iterator_t iter = lit_utf8_iterator_create (string_buff, string_size);
1211+
1212+ while (!lit_utf8_iterator_is_eos (&iter))
12131213 {
1214- lit_utf8_byte_t c = zt_string_buff[i] ;
1214+ ecma_char_t current_char = lit_utf8_iterator_read_next (&iter) ;
12151215
12161216 /* 2.a */
1217- if (c == LIT_CHAR_BACKSLASH || c == LIT_CHAR_DOUBLE_QUOTE)
1217+ if (current_char == LIT_CHAR_BACKSLASH || current_char == LIT_CHAR_DOUBLE_QUOTE)
12181218 {
12191219 ecma_string_t *backslash_str_p = ecma_get_magic_string (LIT_MAGIC_STRING_BACKSLASH_CHAR);
12201220
@@ -1225,16 +1225,19 @@ ecma_builtin_json_quote (ecma_string_t *string_p) /**< string that should be quo
12251225 product_str_p = tmp_str_p;
12261226
12271227 /* 2.a.ii */
1228- ecma_string_t *c_str_p = ecma_new_ecma_string_from_utf8 (&c, 1 );
1228+ ecma_string_t *current_char_str_p = ecma_new_ecma_string_from_code_unit (current_char );
12291229
1230- tmp_str_p = ecma_concat_ecma_strings (product_str_p, c_str_p );
1230+ tmp_str_p = ecma_concat_ecma_strings (product_str_p, current_char_str_p );
12311231 ecma_deref_ecma_string (product_str_p);
1232- ecma_deref_ecma_string (c_str_p );
1232+ ecma_deref_ecma_string (current_char_str_p );
12331233 product_str_p = tmp_str_p;
12341234 }
12351235 /* 2.b */
1236- else if (c == LIT_CHAR_BS || c == LIT_CHAR_FF || c == LIT_CHAR_LF
1237- || c == LIT_CHAR_CR || c == LIT_CHAR_TAB)
1236+ else if (current_char == LIT_CHAR_BS
1237+ || current_char == LIT_CHAR_FF
1238+ || current_char == LIT_CHAR_LF
1239+ || current_char == LIT_CHAR_CR
1240+ || current_char == LIT_CHAR_TAB)
12381241 {
12391242 ecma_string_t *backslash_str_p = ecma_get_magic_string (LIT_MAGIC_STRING_BACKSLASH_CHAR);
12401243
@@ -1247,7 +1250,7 @@ ecma_builtin_json_quote (ecma_string_t *string_p) /**< string that should be quo
12471250 /* 2.b.ii */
12481251 lit_utf8_byte_t abbrev = LIT_CHAR_SP;
12491252
1250- switch (c )
1253+ switch (current_char )
12511254 {
12521255 case LIT_CHAR_BS:
12531256 {
@@ -1285,7 +1288,7 @@ ecma_builtin_json_quote (ecma_string_t *string_p) /**< string that should be quo
12851288 product_str_p = tmp_str_p;
12861289 }
12871290 /* 2.c */
1288- else if (c < LIT_CHAR_SP)
1291+ else if (current_char < LIT_CHAR_SP)
12891292 {
12901293 ecma_string_t *backslash_str_p = ecma_get_magic_string (LIT_MAGIC_STRING_BACKSLASH_CHAR);
12911294
@@ -1305,7 +1308,7 @@ ecma_builtin_json_quote (ecma_string_t *string_p) /**< string that should be quo
13051308 product_str_p = tmp_str_p;
13061309
13071310 /* 2.c.iii */
1308- ecma_string_t *hex_str_p = ecma_builtin_helper_json_create_hex_digit_ecma_string (c );
1311+ ecma_string_t *hex_str_p = ecma_builtin_helper_json_create_hex_digit_ecma_string (( uint8_t ) current_char );
13091312
13101313 /* 2.c.iv */
13111314 tmp_str_p = ecma_concat_ecma_strings (product_str_p, hex_str_p);
@@ -1316,16 +1319,16 @@ ecma_builtin_json_quote (ecma_string_t *string_p) /**< string that should be quo
13161319 /* 2.d */
13171320 else
13181321 {
1319- ecma_string_t *c_str_p = ecma_new_ecma_string_from_utf8 (&c, 1 );
1322+ ecma_string_t *current_char_str_p = ecma_new_ecma_string_from_code_unit (current_char );
13201323
1321- tmp_str_p = ecma_concat_ecma_strings (product_str_p, c_str_p );
1324+ tmp_str_p = ecma_concat_ecma_strings (product_str_p, current_char_str_p );
13221325 ecma_deref_ecma_string (product_str_p);
1323- ecma_deref_ecma_string (c_str_p );
1326+ ecma_deref_ecma_string (current_char_str_p );
13241327 product_str_p = tmp_str_p;
13251328 }
13261329 }
13271330
1328- MEM_FINALIZE_LOCAL_ARRAY (zt_string_buff );
1331+ MEM_FINALIZE_LOCAL_ARRAY (string_buff );
13291332
13301333 /* 3. */
13311334 tmp_str_p = ecma_concat_ecma_strings (product_str_p, quote_str_p);
0 commit comments