Skip to content

Commit 5bd8cb6

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 7d83293 commit 5bd8cb6

File tree

5 files changed

+631
-13
lines changed

5 files changed

+631
-13
lines changed

docs/02.API-REFERENCE.md

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

300300
- [jerry_init](#jerry_init)
301301
- [jerry_cleanup](#jerry_cleanup)
302+
- [jerry_parse_and_save_literals](#jerry_parse_and_save_literals)
302303

303304

304305
## jerry_get_memory_limits
@@ -3250,3 +3251,67 @@ jerry_exec_snapshot (const void *snapshot_p,
32503251
- [jerry_init](#jerry_init)
32513252
- [jerry_cleanup](#jerry_cleanup)
32523253
- [jerry_parse_and_save_snapshot](#jerry_parse_and_save_snapshot)
3254+
3255+
3256+
## jerry_parse_and_save_literals
3257+
3258+
**Summary**
3259+
3260+
Collect the used literals from the given source code and save them into a specific file in a list or C format.
3261+
These literals are generated by the parser, they are valid identifiers and none of them are magic string.
3262+
3263+
**Prototype**
3264+
3265+
```c
3266+
size_t
3267+
jerry_parse_and_save_literals (const jerry_char_t *source_p,
3268+
size_t source_size,
3269+
bool is_strict,
3270+
uint8_t *buffer_p,
3271+
size_t buffer_size,
3272+
bool is_c_format);
3273+
```
3274+
3275+
- `source_p` - script source, it must be a valid utf8 string.
3276+
- `source_size` - script source size, in bytes.
3277+
- `is_strict` - strict mode.
3278+
- `buffer_p` - buffer to save literals to.
3279+
- `buffer_size` - the buffer's size.
3280+
- `is_c_format` - the output format would be C-style (true) or a simple list (false).
3281+
- return value
3282+
- the size of the literal-list, if it was generated succesfully (i.e. the list of literals isn't empty,
3283+
and literal-save support is enabled in current configuration through JERRY_ENABLE_SNAPSHOT_SAVE)
3284+
- 0 otherwise.
3285+
3286+
**Example**
3287+
3288+
```c
3289+
{
3290+
jerry_init (JERRY_INIT_EMPTY);
3291+
3292+
static uint8_t save_literal_buffer[1024];
3293+
const jerry_char_t *code_for_literal_save_p = "var obj = { a:'aa', bb:'Bb' }";
3294+
3295+
size_t literal_sizes = jerry_parse_and_save_literals (code_for_literal_save_p,
3296+
strlen ((const char *) code_for_literal_save_p),
3297+
false,
3298+
save_literal_buffer,
3299+
sizeof (save_literal_buffer),
3300+
true);
3301+
3302+
if (literal_sizes != 0)
3303+
{
3304+
FILE *literal_file_p = fopen ("literals.txt", "w");
3305+
fwrite (save_literal_buffer, sizeof (uint8_t), literal_sizes, literal_file_p);
3306+
fclose (literal_file_p);
3307+
}
3308+
3309+
jerry_cleanup ();
3310+
}
3311+
```
3312+
3313+
**See also**
3314+
3315+
- [jerry_init](#jerry_init)
3316+
- [jerry_cleanup](#jerry_cleanup)
3317+
- [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
@@ -323,6 +323,8 @@ bool jerry_foreach_object_property (const jerry_value_t obj_val, jerry_object_pr
323323
size_t jerry_parse_and_save_snapshot (const jerry_char_t *source_p, size_t source_size, bool is_for_global,
324324
bool is_strict, uint8_t *buffer_p, size_t buffer_size);
325325
jerry_value_t jerry_exec_snapshot (const void *snapshot_p, size_t snapshot_size, bool copy_bytecode);
326+
size_t jerry_parse_and_save_literals (const jerry_char_t *source_p, size_t source_size, bool is_strict,
327+
uint8_t *buffer_p, size_t buffer_size, bool is_c_format);
326328

327329
/**
328330
* @}

0 commit comments

Comments
 (0)