Improve ecma_string_get_chars related code #5199
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Introduce lit_utf8_string_t and use it to reduce heap allocation and improve performance
Mark ECMA_STRING_TO_UTF8_STRING/ECMA_STRING_TO_UTF8_STRING_AND_LENGTH do not use heap allocation
Now with lit_utf8_string_t, ECMA_STRING_TO_UTF8_STRING and ECMA_STRING_TO_UTF8_STRING_AND_LENGTH are simplified. The parameters passed to ECMA_STRING_TO_UTF8_STRING and ECMA_STRING_TO_UTF8_STRING_AND_LENGTH are reduced and easier to call
The function prototype of ecma_string_get_chars are simplified as:
lit_utf8_size_t ecma_string_get_chars (const ecma_string_t *string_p,
lit_utf8_string_t *string_out_p,
lit_utf8_byte_t *uint32_buff_p,
uint8_t *flags_p);
The macro prototype of ECMA_STRING_TO_UTF8_STRING and ECMA_STRING_TO_UTF8_STRING_AND_LENGTH are simplified as:
#define ECMA_STRING_TO_UTF8_STRING(ecma_str_ptr, /< ecma string pointer */
utf8_str) /< [out] lit_utf8_string_t to get */ \
#define ECMA_STRING_TO_UTF8_STRING_AND_LENGTH(ecma_str_ptr, /< ecma string pointer */
utf8_str) /< [out] lit_utf8_string_t to get */ \
Now the parameters are reduced. Aslo the calling to ecma_string_get_chars are largely reduced, in most case, ECMA_STRING_TO_UTF8_STRING/ECMA_STRING_TO_UTF8_STRING_AND_LENGTH is enough.
Because the heap allocation are reduced, the performance should be improved. And in most case, we only use ECMA_STRING_TO_UTF8_STRING, only when the length is needed, the ECMA_STRING_TO_UTF8_STRING_AND_LENGTH is called, ECMA_STRING_TO_UTF8_STRING_AND_LENGTH needs to calculate the length that's very slow.
ECMA_FINALIZE_UTF8_STRING is removed, if we have heap allocation situation, use ecma_string_get_chars instead and free it manually
JerryScript-DCO-1.0-Signed-off-by: Yonggang Luo [email protected]