Fix propagation of strict mode.
JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan r.ayrapetyan@samsung.com
This commit is contained in:
committed by
Evgeny Gavrin
parent
438d2c2930
commit
b45302ee07
@@ -373,6 +373,8 @@ parse_property_assignment (void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool is_outer_scope_strict = is_strict_mode ();
|
||||||
|
|
||||||
const operand name = parse_property_name ();
|
const operand name = parse_property_name ();
|
||||||
syntax_add_prop_name (name, is_setter ? PROP_SET : PROP_GET);
|
syntax_add_prop_name (name, is_setter ? PROP_SET : PROP_GET);
|
||||||
|
|
||||||
@@ -405,6 +407,9 @@ parse_property_assignment (void)
|
|||||||
|
|
||||||
inside_function = was_in_function;
|
inside_function = was_in_function;
|
||||||
|
|
||||||
|
scopes_tree_set_strict_mode (STACK_TOP (scopes), is_outer_scope_strict);
|
||||||
|
lexer_set_strict_mode (scopes_tree_strict_mode (STACK_TOP (scopes)));
|
||||||
|
|
||||||
if (is_setter)
|
if (is_setter)
|
||||||
{
|
{
|
||||||
dump_prop_setter_decl (name, func);
|
dump_prop_setter_decl (name, func);
|
||||||
@@ -675,13 +680,15 @@ parse_function_expression (void)
|
|||||||
|
|
||||||
operand res;
|
operand res;
|
||||||
|
|
||||||
|
bool is_outer_scope_strict = is_strict_mode ();
|
||||||
|
|
||||||
syntax_start_checking_of_vargs ();
|
syntax_start_checking_of_vargs ();
|
||||||
|
|
||||||
skip_newlines ();
|
skip_newlines ();
|
||||||
if (token_is (TOK_NAME))
|
if (token_is (TOK_NAME))
|
||||||
{
|
{
|
||||||
const operand name = literal_operand (token_data_as_lit_cp ());
|
const operand name = literal_operand (token_data_as_lit_cp ());
|
||||||
syntax_check_for_eval_and_arguments_in_strict_mode (name, is_strict_mode (), tok.loc);
|
syntax_check_for_eval_and_arguments_in_strict_mode (name, is_outer_scope_strict, tok.loc);
|
||||||
|
|
||||||
skip_newlines ();
|
skip_newlines ();
|
||||||
res = parse_argument_list (VARG_FUNC_EXPR, name, NULL, NULL);
|
res = parse_argument_list (VARG_FUNC_EXPR, name, NULL, NULL);
|
||||||
@@ -717,6 +724,9 @@ parse_function_expression (void)
|
|||||||
|
|
||||||
syntax_check_for_syntax_errors_in_formal_param_list (is_strict_mode (), tok.loc);
|
syntax_check_for_syntax_errors_in_formal_param_list (is_strict_mode (), tok.loc);
|
||||||
|
|
||||||
|
scopes_tree_set_strict_mode (STACK_TOP (scopes), is_outer_scope_strict);
|
||||||
|
lexer_set_strict_mode (scopes_tree_strict_mode (STACK_TOP (scopes)));
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,3 +38,18 @@ check_syntax_error ("'use strict'; function arguments () {}");
|
|||||||
check_syntax_error ("'use strict'; var l = function arguments () {}");
|
check_syntax_error ("'use strict'; var l = function arguments () {}");
|
||||||
|
|
||||||
check_syntax_error ("function f__strict_mode_duplicate_parameters (p, p) { 'use strict'; }");
|
check_syntax_error ("function f__strict_mode_duplicate_parameters (p, p) { 'use strict'; }");
|
||||||
|
|
||||||
|
function test_strict_mode_propagation_in_func_expr_and_getters_setters () {
|
||||||
|
var p = function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var o = { get prop () { 'use strict'; return true; }, set prop (v) { 'use strict'; } };
|
||||||
|
|
||||||
|
function test () {
|
||||||
|
tmp_eval = eval;
|
||||||
|
eval = tmp_eval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user