@@ -1319,9 +1319,7 @@ ecma_string_get_number_in_desc_size (const uint32_t uint32_number) /**< number i
1319
1319
const lit_utf8_byte_t *
1320
1320
ecma_string_get_chars (const ecma_string_t * string_p , /**< ecma-string */
1321
1321
lit_utf8_size_t * size_p , /**< [out] size of the ecma string */
1322
- bool * is_ascii_p ) /**< [out] true, if the string is an ascii
1323
- * character sequence (size == length)
1324
- * false, otherwise */
1322
+ uint8_t * flags_p ) /**< [out] TODO */
1325
1323
{
1326
1324
ecma_length_t length ;
1327
1325
lit_utf8_size_t size ;
@@ -1351,8 +1349,10 @@ ecma_string_get_chars (const ecma_string_t *string_p, /**< ecma-string */
1351
1349
/* All numbers must be ascii strings. */
1352
1350
JERRY_ASSERT (ecma_string_get_length (string_p ) == size );
1353
1351
1354
- length = size ;
1355
- result_p = NULL ;
1352
+ result_p = (const lit_utf8_byte_t * ) jmem_heap_alloc_block (size );
1353
+ length = ecma_uint32_to_utf8_string (string_p -> u .uint32_number , (lit_utf8_byte_t * ) result_p , size );
1354
+ JERRY_ASSERT (length == size );
1355
+ * flags_p |= 2 ;
1356
1356
break ;
1357
1357
}
1358
1358
case ECMA_STRING_CONTAINER_MAGIC_STRING :
@@ -1371,13 +1371,8 @@ ecma_string_get_chars (const ecma_string_t *string_p, /**< ecma-string */
1371
1371
JERRY_ASSERT (ECMA_STRING_GET_CONTAINER (string_p ) == ECMA_STRING_CONTAINER_MAGIC_STRING_EX );
1372
1372
1373
1373
size = lit_get_magic_string_ex_size (string_p -> u .magic_string_ex_id );
1374
- length = 0 ;
1375
-
1376
- if (is_ascii_p != NULL )
1377
- {
1378
- length = lit_utf8_string_length (lit_get_magic_string_ex_utf8 (string_p -> u .magic_string_ex_id ),
1379
- lit_get_magic_string_ex_size (string_p -> u .magic_string_ex_id ));
1380
- }
1374
+ length = lit_utf8_string_length (lit_get_magic_string_ex_utf8 (string_p -> u .magic_string_ex_id ),
1375
+ lit_get_magic_string_ex_size (string_p -> u .magic_string_ex_id ));
1381
1376
1382
1377
result_p = lit_get_magic_string_ex_utf8 (string_p -> u .magic_string_ex_id );
1383
1378
break ;
@@ -1386,9 +1381,9 @@ ecma_string_get_chars (const ecma_string_t *string_p, /**< ecma-string */
1386
1381
1387
1382
* size_p = size ;
1388
1383
1389
- if (is_ascii_p != NULL )
1384
+ if (length == size )
1390
1385
{
1391
- * is_ascii_p = ( length == size ) ;
1386
+ * flags_p |= 1 ;
1392
1387
}
1393
1388
return result_p ;
1394
1389
} /* ecma_string_get_chars */
@@ -1979,32 +1974,23 @@ ecma_string_get_char_at_pos (const ecma_string_t *string_p, /**< ecma-string */
1979
1974
JERRY_ASSERT (index < ecma_string_get_length (string_p ));
1980
1975
1981
1976
lit_utf8_size_t buffer_size ;
1982
- bool is_ascii ;
1983
- const lit_utf8_byte_t * chars_p = ecma_string_get_chars (string_p , & buffer_size , & is_ascii );
1977
+ uint8_t flags = 0 ;
1978
+ const lit_utf8_byte_t * chars_p = ecma_string_get_chars (string_p , & buffer_size , & flags );
1984
1979
1985
- if (chars_p != NULL )
1980
+ ecma_char_t ch ;
1981
+ if (flags & 1 )
1986
1982
{
1987
- if (is_ascii )
1988
- {
1989
- return chars_p [index ];
1990
- }
1991
-
1992
- return lit_utf8_string_code_unit_at (chars_p , buffer_size , index );
1983
+ ch = chars_p [index ];
1984
+ }
1985
+ else
1986
+ {
1987
+ ch = lit_utf8_string_code_unit_at (chars_p , buffer_size , index );
1993
1988
}
1994
1989
1995
- ecma_char_t ch ;
1996
-
1997
- JMEM_DEFINE_LOCAL_ARRAY (utf8_str_p , buffer_size , lit_utf8_byte_t );
1998
-
1999
- ecma_string_to_utf8_bytes (string_p , utf8_str_p , buffer_size );
2000
-
2001
- JERRY_ASSERT (ECMA_STRING_GET_CONTAINER (string_p ) == ECMA_STRING_CONTAINER_UINT32_IN_DESC );
2002
- /* Uint32 must be an ascii string. */
2003
- JERRY_ASSERT (is_ascii );
2004
-
2005
- ch = utf8_str_p [index ];
2006
-
2007
- JMEM_FINALIZE_LOCAL_ARRAY (utf8_str_p );
1990
+ if (flags & 2 )
1991
+ {
1992
+ jmem_heap_free_block ((void * ) chars_p , buffer_size );
1993
+ }
2008
1994
2009
1995
return ch ;
2010
1996
} /* ecma_string_get_char_at_pos */
0 commit comments