- Notifications
You must be signed in to change notification settings - Fork687
Reduce call to strlen when possible#5192
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
base:master
Are you sure you want to change the base?
Uh oh!
There was an error while loading.Please reload this page.
Conversation
zherczeg commentedDec 9, 2024
What about keeping |
lygstate commentedDec 9, 2024
jerry_sz_cesu8 is a macro for literal, |
lygstate commentedDec 9, 2024
So that refactoring ASCII out is a thing because for most/(maybe all) internal string is ASCII, and for ASCII the check function is much simpler. The macro give us future optimize string literal store, as |
zherczeg commentedDec 9, 2024
Cesu8 is as efficient as ascii for checking, since the cpu branch predictor learns the simplest case. Two functions actually increase code size. |
db3a212 to4bf1f07Comparelygstate commentedDec 9, 2024
OK, I do the following to achieve the same effect, to code changes reduced a lot
In summary jerry_string_sz preserved |
e7a63f4 to215c086Compare80dba58 to466caeaCompare* Improve jerry_string_sz only accept UTF-8 string(that's a rare case accept CESU-8 in c/cpp code)* The document about jerry_string_sz only support ASCII(the fact is CESU-8 before this MR), update it to support UTF-8 after this MR* Improve all _sz function to take jerry_value_t that can construct from `jerry_string_sz`* Improve JERRY_ZSTR_ARG can only accept string literal(that's UTF-8)* Add function jerry_value_list_free to free a list of jerry_value_t* All call to jerry_string/jerry_string_cesu8 in core indeed are removed, so when there is no linkage to it, code size is savedThe prototype of new/improved function/macros is:```cjerry_value_t jerry_string_cesu8 (const jerry_char_t *buffer_p, jerry_size_t buffer_size);jerry_value_t jerry_string_utf8 (const jerry_char_t *buffer_p, jerry_size_t buffer_size);#define jerry_string_sz(str) jerry_string_utf8 (JERRY_ZSTR_ARG (str))jerry_value_t jerry_error_sz (jerry_error_t error_type, const jerry_value_t message_sz);jerry_value_t jerry_throw_sz (jerry_error_t error_type, const jerry_value_t message_sz);jerry_value_t jerry_regexp_sz (const jerry_value_t pattern_sz, uint16_t flags);jerry_value_t jerry_object_delete_sz (const jerry_value_t object, const jerry_value_t key_sz);jerry_value_t jerry_object_get_sz (const jerry_value_t object, const jerry_value_t key_sz);jerry_value_t jerry_object_has_sz (const jerry_value_t object, const jerry_value_t key_sz);jerry_value_t jerry_object_set_sz (jerry_value_t object, const jerry_value_t key_sz, const jerry_value_t value);```JerryScript-DCO-1.0-Signed-off-by: Yonggang Luo luoyonggang@gmail.com
466caea to9f05ccdCompare
Uh oh!
There was an error while loading.Please reload this page.
Closed:#4978
Closed:#4979
jerry_string_szThe prototype of new/improved function/macros is:
Rename jerry_port_log to jerry_port_log_buffer
Add buffer_size parameter for function jerry_port_log_buffer, so that jerry_port_log_buffer
won't need calculate strlen when printing
JerryScript-DCO-1.0-Signed-off-by: Yonggang Luoluoyonggang@gmail.com