Fix dump of arguments / eval usage hint in preparse_scope.

JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan r.ayrapetyan@samsung.com
This commit is contained in:
Ruben Ayrapetyan
2015-07-14 21:11:03 +03:00
committed by Evgeny Gavrin
parent 005eb044a9
commit abc2b55297
2 changed files with 123 additions and 109 deletions
+46 -36
View File
@@ -2925,9 +2925,9 @@ preparse_scope (bool is_global)
opcode_counter_t scope_code_flags_oc = dump_scope_code_flags_for_rewrite (); opcode_counter_t scope_code_flags_oc = dump_scope_code_flags_for_rewrite ();
bool is_use_strict = false;
bool is_ref_arguments_identifier = false; bool is_ref_arguments_identifier = false;
bool is_ref_eval_identifier = false; bool is_ref_eval_identifier = false;
bool is_use_strict = false;
/* /*
* Check Directive Prologue for Use Strict directive (see ECMA-262 5.1 section 14.1) * Check Directive Prologue for Use Strict directive (see ECMA-262 5.1 section 14.1)
@@ -2937,7 +2937,6 @@ preparse_scope (bool is_global)
if (lit_literal_equal_type_cstr (lit_get_literal_by_cp (token_data_as_lit_cp ()), "use strict") if (lit_literal_equal_type_cstr (lit_get_literal_by_cp (token_data_as_lit_cp ()), "use strict")
&& lexer_is_no_escape_sequences_in_token_string (tok)) && lexer_is_no_escape_sequences_in_token_string (tok))
{ {
scopes_tree_set_strict_mode (STACK_TOP (scopes), true);
is_use_strict = true; is_use_strict = true;
break; break;
} }
@@ -2950,10 +2949,53 @@ preparse_scope (bool is_global)
} }
} }
while (!token_is (end_tt))
{
if (token_is (TOK_NAME))
{
if (lit_literal_equal_type_cstr (lit_get_literal_by_cp (token_data_as_lit_cp ()), "arguments"))
{
is_ref_arguments_identifier = true;
}
else if (lit_literal_equal_type_cstr (lit_get_literal_by_cp (token_data_as_lit_cp ()), "eval"))
{
is_ref_eval_identifier = true;
}
}
skip_newlines ();
}
opcode_scope_code_flags_t scope_flags = OPCODE_SCOPE_CODE_FLAGS__EMPTY;
if (is_use_strict)
{
scopes_tree_set_strict_mode (STACK_TOP (scopes), true);
scope_flags = (opcode_scope_code_flags_t) (scope_flags | OPCODE_SCOPE_CODE_FLAGS_STRICT);
}
if (!is_ref_arguments_identifier)
{
scope_flags = (opcode_scope_code_flags_t) (scope_flags | OPCODE_SCOPE_CODE_FLAGS_NOT_REF_ARGUMENTS_IDENTIFIER);
}
if (!is_ref_eval_identifier)
{
scope_flags = (opcode_scope_code_flags_t) (scope_flags | OPCODE_SCOPE_CODE_FLAGS_NOT_REF_EVAL_IDENTIFIER);
}
rewrite_scope_code_flags (scope_code_flags_oc, scope_flags);
lexer_set_strict_mode (scopes_tree_strict_mode (STACK_TOP (scopes))); lexer_set_strict_mode (scopes_tree_strict_mode (STACK_TOP (scopes)));
dump_reg_var_decl_for_rewrite (); dump_reg_var_decl_for_rewrite ();
if (lit_utf8_iterator_pos_cmp (start_loc, tok.loc) != 0)
{
lexer_seek (start_loc);
skip_newlines ();
bool is_in_var_declaration_list = false; bool is_in_var_declaration_list = false;
size_t nesting_level = 0; size_t nesting_level = 0;
@@ -2967,15 +3009,6 @@ preparse_scope (bool is_global)
*/ */
if (token_is (TOK_NAME)) if (token_is (TOK_NAME))
{ {
if (lit_literal_equal_type_cstr (lit_get_literal_by_cp (token_data_as_lit_cp ()), "arguments"))
{
is_ref_arguments_identifier = true;
}
else if (lit_literal_equal_type_cstr (lit_get_literal_by_cp (token_data_as_lit_cp ()), "eval"))
{
is_ref_eval_identifier = true;
}
if (is_in_var_declaration_list) if (is_in_var_declaration_list)
{ {
if (!var_declared (token_data_as_lit_cp ())) if (!var_declared (token_data_as_lit_cp ()))
@@ -3017,10 +3050,6 @@ preparse_scope (bool is_global)
} }
else if (token_is (TOK_KEYWORD)) else if (token_is (TOK_KEYWORD))
{ {
if (is_keyword (KW_VAR))
{
is_in_var_declaration_list = false;
}
break; break;
} }
else if (token_is (TOK_CLOSE_BRACE)) else if (token_is (TOK_CLOSE_BRACE))
@@ -3072,31 +3101,12 @@ preparse_scope (bool is_global)
} }
} }
opcode_scope_code_flags_t scope_flags = OPCODE_SCOPE_CODE_FLAGS__EMPTY;
if (is_use_strict)
{
scope_flags = (opcode_scope_code_flags_t) (scope_flags | OPCODE_SCOPE_CODE_FLAGS_STRICT);
}
if (!is_ref_arguments_identifier)
{
scope_flags = (opcode_scope_code_flags_t) (scope_flags | OPCODE_SCOPE_CODE_FLAGS_NOT_REF_ARGUMENTS_IDENTIFIER);
}
if (!is_ref_eval_identifier)
{
scope_flags = (opcode_scope_code_flags_t) (scope_flags | OPCODE_SCOPE_CODE_FLAGS_NOT_REF_EVAL_IDENTIFIER);
}
rewrite_scope_code_flags (scope_code_flags_oc, scope_flags);
if (lit_utf8_iterator_pos_cmp (start_loc, tok.loc) != 0)
{
lexer_seek (start_loc); lexer_seek (start_loc);
} }
else else
{ {
JERRY_ASSERT (token_is (end_tt));
lexer_save_token (tok); lexer_save_token (tok);
} }
} }
+4
View File
@@ -125,3 +125,7 @@ fn_expr = function (a, b, c)
} }
fn_expr (1); fn_expr (1);
(function () {
var a = [arguments];
})();