Skip to content

Commit 77d9314

Browse files
rerobikaLaszloLango
authored andcommitted
Simplify source evaluation options. (#2431)
JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik [email protected]
1 parent 76ff084 commit 77d9314

File tree

26 files changed

+88
-79
lines changed

26 files changed

+88
-79
lines changed

docs/02.API-REFERENCE.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -970,12 +970,12 @@ Perform JavaScript `eval`.
970970
jerry_value_t
971971
jerry_eval (const jerry_char_t *source_p,
972972
size_t source_size,
973-
bool is_strict);
973+
uint32_t parse_opts);
974974
```
975975

976976
- `source_p` - source code to evaluate, it must be a valid utf8 string.
977977
- `source_size` - length of the source code
978-
- `is_strict` - perform `eval` as it is called from "strict mode" code.
978+
- `parse_opts` - any combination of [jerry_parse_opts_t](#jerry_parse_opts_t) flags.
979979
- return value - result of eval, may be error value.
980980

981981
**Example**
@@ -984,7 +984,7 @@ jerry_eval (const jerry_char_t *source_p,
984984
{
985985
jerry_value_t ret_val = jerry_eval (str_to_eval,
986986
strlen (str_to_eval),
987-
false);
987+
JERRY_PARSE_NO_OPTS);
988988
}
989989
```
990990

docs/03.API-EXAMPLE.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,15 +105,15 @@ main (void)
105105
/* Evaluate script1 */
106106
eval_ret = jerry_eval (script_1,
107107
strlen ((const char *) script_1),
108-
false);
108+
JERRY_PARSE_NO_OPTS);
109109

110110
/* Free JavaScript value, returned by eval */
111111
jerry_release_value (eval_ret);
112112

113113
/* Evaluate script2 */
114114
eval_ret = jerry_eval (script_2,
115115
strlen ((const char *) script_2),
116-
false);
116+
JERRY_PARSE_NO_OPTS);
117117

118118
/* Free JavaScript value, returned by eval */
119119
jerry_release_value (eval_ret);
@@ -169,7 +169,7 @@ main (void)
169169
/* Now starting script that would output value of just initialized field */
170170
jerry_value_t eval_ret = jerry_eval (script,
171171
strlen ((const char *) script),
172-
false);
172+
JERRY_PARSE_NO_OPTS);
173173
174174
/* Free JavaScript value, returned by eval */
175175
jerry_release_value (eval_ret);
@@ -322,7 +322,7 @@ main (void)
322322
/* Evaluate entered command */
323323
ret_val = jerry_eval ((const jerry_char_t *) cmd,
324324
len,
325-
false);
325+
JERRY_PARSE_NO_OPTS);
326326
327327
/* If command evaluated successfully, print value, returned by eval */
328328
if (jerry_value_is_error (ret_val))
@@ -420,7 +420,7 @@ main (void)
420420
size_t script_size = strlen ((const char *) script);
421421

422422
/* Evaluate script */
423-
jerry_value_t eval_ret = jerry_eval (script, script_size, false);
423+
jerry_value_t eval_ret = jerry_eval (script, script_size, JERRY_PARSE_NO_OPTS);
424424

425425
/* Free JavaScript value, returned by eval */
426426
jerry_release_value (eval_ret);
@@ -509,7 +509,7 @@ main (void)
509509
/* Evaluate script */
510510
my_js_obj_val = jerry_eval (my_js_object,
511511
strlen ((const char *) my_js_object),
512-
false);
512+
JERRY_PARSE_NO_OPTS);
513513

514514
/* Create a JS function object and wrap into a jerry value */
515515
jerry_value_t add_func_obj = jerry_create_external_function (add_handler);
@@ -532,7 +532,7 @@ main (void)
532532
size_t script_size = strlen ((const char *) script);
533533

534534
/* Evaluate script */
535-
jerry_value_t eval_ret = jerry_eval (script, script_size, false);
535+
jerry_value_t eval_ret = jerry_eval (script, script_size, JERRY_PARSE_NO_OPTS);
536536

537537
/* Free JavaScript value, returned by eval */
538538
jerry_release_value (eval_ret);
@@ -583,7 +583,7 @@ main (void)
583583
jerryx_handler_print);
584584

585585
/* Evaluate the script */
586-
jerry_value_t eval_ret = jerry_eval (script, script_size, false);
586+
jerry_value_t eval_ret = jerry_eval (script, script_size, JERRY_PARSE_NO_OPTS);
587587

588588
/* Free the JavaScript value returned by eval */
589589
jerry_release_value (eval_ret);

docs/12.EXT-REFERENCE-MODULE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ load_and_evaluate_js_file (const jerry_value_t name, jerry_value_t *result)
182182
{
183183
/* We read the file into memory and call jerry_eval (), assigning the result to the out-parameter. */
184184
fread (js_file_contents, file_size, 1, js_file);
185-
(*result) = jerry_eval (js_file_contents, file_size, false);
185+
(*result) = jerry_eval (js_file_contents, file_size, JERRY_PARSE_NO_OPTS);
186186

187187
/* We release the memory holding the contents of the file. */
188188
free (js_file_contents);

jerry-core/api/jerry.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ jerry_parse (const jerry_char_t *resource_name_p, /**< resource name (usually a
391391
0,
392392
source_p,
393393
source_size,
394-
(parse_opts & JERRY_PARSE_STRICT_MODE) != 0,
394+
parse_opts,
395395
&bytecode_data_p);
396396

397397
if (ECMA_IS_VALUE_ERROR (parse_status))
@@ -466,7 +466,7 @@ jerry_parse_function (const jerry_char_t *resource_name_p, /**< resource name (u
466466
arg_list_size,
467467
source_p,
468468
source_size,
469-
(parse_opts & JERRY_PARSE_STRICT_MODE) != 0,
469+
parse_opts,
470470
&bytecode_data_p);
471471

472472
if (ECMA_IS_VALUE_ERROR (parse_status))
@@ -544,14 +544,13 @@ jerry_run (const jerry_value_t func_val) /**< function to run */
544544
jerry_value_t
545545
jerry_eval (const jerry_char_t *source_p, /**< source code */
546546
size_t source_size, /**< length of source code */
547-
bool is_strict) /**< source must conform with strict mode */
547+
uint32_t parse_opts) /**< jerry_parse_opts_t option bits */
548548
{
549549
jerry_assert_api_available ();
550550

551551
return jerry_return (ecma_op_eval_chars_buffer ((const lit_utf8_byte_t *) source_p,
552552
source_size,
553-
false,
554-
is_strict));
553+
parse_opts));
555554
} /* jerry_eval */
556555

557556
/**

jerry-core/debugger/debugger.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ jerry_debugger_send_eval (const lit_utf8_byte_t *eval_string_p, /**< evaluated s
192192
JERRY_ASSERT (!(JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_VM_IGNORE));
193193

194194
JERRY_DEBUGGER_SET_FLAGS (JERRY_DEBUGGER_VM_IGNORE);
195-
ecma_value_t result = ecma_op_eval_chars_buffer (eval_string_p + 1, eval_string_size - 1, true, false);
195+
ecma_value_t result = ecma_op_eval_chars_buffer (eval_string_p + 1, eval_string_size - 1, ECMA_PARSE_DIRECT_EVAL);
196196
JERRY_DEBUGGER_CLEAR_FLAGS (JERRY_DEBUGGER_VM_IGNORE);
197197

198198
if (!ECMA_IS_VALUE_ERROR (result))

jerry-core/ecma/base/ecma-globals.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,17 @@ typedef enum
8080
ECMA_TYPE___MAX = ECMA_TYPE_ERROR /** highest value for ecma types */
8181
} ecma_type_t;
8282

83+
84+
/**
85+
* Option flags for script parsing.
86+
*/
87+
typedef enum
88+
{
89+
ECMA_PARSE_NO_OPTS = 0, /**< no options passed */
90+
ECMA_PARSE_STRICT_MODE = (1 << 0), /**< enable strict mode */
91+
ECMA_PARSE_DIRECT_EVAL = (1 << 1) /**< is eval called directly (ECMA-262 v5, 15.1.2.1.1) */
92+
} ecma_parse_opts_t;
93+
8394
/**
8495
* Description of an ecma value
8596
*

jerry-core/ecma/builtin-objects/ecma-builtin-function.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ ecma_builtin_function_dispatch_construct (const ecma_value_t *arguments_list_p,
169169
arguments_buffer_size,
170170
function_body_buffer_p,
171171
function_body_buffer_size,
172-
false,
172+
ECMA_PARSE_NO_OPTS,
173173
&bytecode_data_p);
174174

175175
if (!ECMA_IS_VALUE_ERROR (ret_value))

jerry-core/ecma/builtin-objects/ecma-builtin-global.c

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -63,17 +63,13 @@ ecma_builtin_global_object_eval (ecma_value_t this_arg, /**< this argument */
6363
JERRY_UNUSED (this_arg);
6464
ecma_value_t ret_value = ECMA_VALUE_EMPTY;
6565

66-
bool is_direct_eval = vm_is_direct_eval_form_call ();
66+
uint32_t parse_opts = vm_is_direct_eval_form_call () ? ECMA_PARSE_DIRECT_EVAL : ECMA_PARSE_NO_OPTS;
6767

6868
/* See also: ECMA-262 v5, 10.1.1 */
69-
bool is_called_from_strict_mode_code;
70-
if (is_direct_eval)
69+
if (parse_opts && vm_is_strict_mode ())
7170
{
72-
is_called_from_strict_mode_code = vm_is_strict_mode ();
73-
}
74-
else
75-
{
76-
is_called_from_strict_mode_code = false;
71+
JERRY_ASSERT (parse_opts & ECMA_PARSE_DIRECT_EVAL);
72+
parse_opts |= ECMA_PARSE_STRICT_MODE;
7773
}
7874

7975
if (!ecma_is_value_string (x))
@@ -85,8 +81,7 @@ ecma_builtin_global_object_eval (ecma_value_t this_arg, /**< this argument */
8581
{
8682
/* steps 2 to 8 */
8783
ret_value = ecma_op_eval (ecma_get_string_from_value (x),
88-
is_direct_eval,
89-
is_called_from_strict_mode_code);
84+
parse_opts);
9085
}
9186

9287
return ret_value;

jerry-core/ecma/operations/ecma-eval.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@
4545
*/
4646
ecma_value_t
4747
ecma_op_eval (ecma_string_t *code_p, /**< code string */
48-
bool is_direct, /**< is eval called directly (ECMA-262 v5, 15.1.2.1.1) */
49-
bool is_called_from_strict_mode_code) /**< is eval is called from strict mode code */
48+
uint32_t parse_opts) /**< ecma_parse_opts_t option bits */
5049
{
5150
ecma_value_t ret_value;
5251

@@ -61,8 +60,7 @@ ecma_op_eval (ecma_string_t *code_p, /**< code string */
6160

6261
ret_value = ecma_op_eval_chars_buffer (code_utf8_buffer_p,
6362
chars_num,
64-
is_direct,
65-
is_called_from_strict_mode_code);
63+
parse_opts);
6664

6765
ECMA_FINALIZE_UTF8_STRING (code_utf8_buffer_p, code_utf8_buffer_size);
6866
}
@@ -82,15 +80,19 @@ ecma_op_eval (ecma_string_t *code_p, /**< code string */
8280
ecma_value_t
8381
ecma_op_eval_chars_buffer (const lit_utf8_byte_t *code_p, /**< code characters buffer */
8482
size_t code_buffer_size, /**< size of the buffer */
85-
bool is_direct, /**< is eval called directly (ECMA-262 v5, 15.1.2.1.1) */
86-
bool is_called_from_strict_mode_code) /**< is eval is called from strict mode code */
83+
uint32_t parse_opts) /**< ecma_parse_opts_t option bits */
8784
{
8885
#ifndef JERRY_DISABLE_JS_PARSER
8986
JERRY_ASSERT (code_p != NULL);
9087

9188
ecma_compiled_code_t *bytecode_data_p;
9289

93-
bool is_strict_call = (is_direct && is_called_from_strict_mode_code);
90+
uint32_t is_strict_call = ECMA_PARSE_STRICT_MODE | ECMA_PARSE_DIRECT_EVAL;
91+
92+
if ((parse_opts & is_strict_call) != is_strict_call)
93+
{
94+
parse_opts &= (uint32_t) ~ECMA_PARSE_STRICT_MODE;
95+
}
9496

9597
#ifdef JERRY_ENABLE_LINE_INFO
9698
JERRY_CONTEXT (resource_name) = ecma_make_magic_string_value (LIT_MAGIC_STRING__EMPTY);
@@ -100,20 +102,19 @@ ecma_op_eval_chars_buffer (const lit_utf8_byte_t *code_p, /**< code characters b
100102
0,
101103
code_p,
102104
code_buffer_size,
103-
is_strict_call,
105+
parse_opts,
104106
&bytecode_data_p);
105107

106108
if (ECMA_IS_VALUE_ERROR (parse_status))
107109
{
108110
return parse_status;
109111
}
110112

111-
return vm_run_eval (bytecode_data_p, is_direct);
113+
return vm_run_eval (bytecode_data_p, parse_opts);
112114
#else /* JERRY_DISABLE_JS_PARSER */
113115
JERRY_UNUSED (code_p);
114116
JERRY_UNUSED (code_buffer_size);
115-
JERRY_UNUSED (is_direct);
116-
JERRY_UNUSED (is_called_from_strict_mode_code);
117+
JERRY_UNUSED (parse_opts);
117118

118119
return ecma_raise_syntax_error (ECMA_ERR_MSG ("The parser has been disabled."));
119120
#endif /* !JERRY_DISABLE_JS_PARSER */

jerry-core/ecma/operations/ecma-eval.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,10 @@
2626
*/
2727

2828
ecma_value_t
29-
ecma_op_eval (ecma_string_t *code_p, bool is_direct, bool is_called_from_strict_mode_code);
29+
ecma_op_eval (ecma_string_t *code_p, uint32_t parse_opts);
3030

3131
ecma_value_t
32-
ecma_op_eval_chars_buffer (const lit_utf8_byte_t *code_p, size_t code_buffer_size, bool is_direct,
33-
bool is_called_from_strict_mode_code);
32+
ecma_op_eval_chars_buffer (const lit_utf8_byte_t *code_p, size_t code_buffer_size, uint32_t parse_opts);
3433

3534
/**
3635
* @}

0 commit comments

Comments
 (0)