Skip to content

Commit 5bb89d9

Browse files
author
Zsolt Borbély
committed
[API] Introduce jerry_parse_and_save_literals()
This function can be used to save literals into a specific file in a list or C format. These literals are valid identifiers, and doesn't match to any magic-string. The '--save-literals-list-format FILE' and '--save-literals-c-format FILE' options are used to save into the given file, when the snapshot-save is enabled. The saved literals are sorted by size and lexicographically. The C-format is useful for jerry_register_magic_strings() to generate the array of external magic strings. JerryScript-DCO-1.0-Signed-off-by: Zsolt Borbély [email protected]
1 parent 0c7d99e commit 5bb89d9

File tree

5 files changed

+645
-13
lines changed

5 files changed

+645
-13
lines changed

docs/02.API-REFERENCE.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ jerry_register_magic_strings (const jerry_char_ptr_t *ex_str_items_p,
296296

297297
- [jerry_init](#jerry_init)
298298
- [jerry_cleanup](#jerry_cleanup)
299+
- [jerry_parse_and_save_literals](#jerry_parse_and_save_literals)
299300

300301

301302
## jerry_get_memory_limits
@@ -3204,3 +3205,59 @@ jerry_exec_snapshot (const void *snapshot_p,
32043205
- [jerry_init](#jerry_init)
32053206
- [jerry_cleanup](#jerry_cleanup)
32063207
- [jerry_parse_and_save_snapshot](#jerry_parse_and_save_snapshot)
3208+
3209+
3210+
## jerry_parse_and_save_literals
3211+
3212+
**Summary**
3213+
3214+
Collect and save the used literals from the specified source code.
3215+
3216+
**Prototype**
3217+
3218+
```c
3219+
size_t
3220+
jerry_parse_and_save_literals (const jerry_char_t *source_p,
3221+
size_t source_size,
3222+
bool is_strict,
3223+
uint8_t *buffer_p,
3224+
size_t buffer_size,
3225+
bool is_c_format);
3226+
```
3227+
3228+
- `source_p` - script source, it must be a valid utf8 string.
3229+
- `source_size` - script source size, in bytes.
3230+
- `is_strict` - strict mode.
3231+
- `buffer_p` - buffer to save literals to.
3232+
- `buffer_size` - the buffer's size.
3233+
- `is_c_format` - the output format would be C-style (true) or a simple list (false).
3234+
- return value
3235+
- the size of the literal-list, if it was generated succesfully (i.e. the list of literals isn't empty,
3236+
and literal-save support is enabled in current configuration through JERRY_ENABLE_SNAPSHOT_SAVE)
3237+
- 0 otherwise.
3238+
3239+
**Example**
3240+
3241+
```c
3242+
{
3243+
jerry_init (JERRY_INIT_EMPTY);
3244+
3245+
static uint8_t save_literal_buffer[1024];
3246+
const jerry_char_t *code_for_literal_save_p = "var obj = { a:'aa', bb:'Bb' }";
3247+
3248+
size_t literal_sizes = jerry_parse_and_save_literals (code_for_literal_save_p,
3249+
strlen ((const char *) code_for_literal_save_p),
3250+
false,
3251+
save_literal_buffer,
3252+
sizeof (save_literal_buffer),
3253+
true);
3254+
3255+
jerry_cleanup ();
3256+
}
3257+
```
3258+
3259+
**See also**
3260+
3261+
- [jerry_init](#jerry_init)
3262+
- [jerry_cleanup](#jerry_cleanup)
3263+
- [jerry_register_magic_strings](#jerry_register_magic_strings)

jerry-core/jerry-api.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,8 @@ bool jerry_foreach_object_property (const jerry_value_t obj_val, jerry_object_pr
320320
size_t jerry_parse_and_save_snapshot (const jerry_char_t *source_p, size_t source_size, bool is_for_global,
321321
bool is_strict, uint8_t *buffer_p, size_t buffer_size);
322322
jerry_value_t jerry_exec_snapshot (const void *snapshot_p, size_t snapshot_size, bool copy_bytecode);
323+
size_t jerry_parse_and_save_literals (const jerry_char_t *source_p, size_t source_size, bool is_strict,
324+
uint8_t *buffer_p, size_t buffer_size, bool is_c_format);
323325

324326
/**
325327
* @}

0 commit comments

Comments
 (0)