Super parsing options should be set only in direct eval call (#2863)

This patch fixes #2846.

JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik frobert@inf.u-szeged.hu
This commit is contained in:
Robert Fancsik
2019-05-10 12:23:29 +02:00
committed by László Langó
parent 063e7fde2b
commit 99c7a4040f
3 changed files with 31 additions and 2 deletions
@@ -27,6 +27,7 @@
#include "lit-magic-strings.h"
#include "lit-strings.h"
#include "vm.h"
#include "jcontext.h"
#include "jrt-libc-includes.h"
#include "jrt-bit-fields.h"
@@ -99,6 +100,13 @@ ecma_builtin_global_object_eval (ecma_value_t x) /**< routine's first argument *
parse_opts |= ECMA_PARSE_STRICT_MODE;
}
#if ENABLED (JERRY_ES2015_CLASS)
if (vm_is_direct_eval_form_call ())
{
parse_opts |= ECMA_GET_SUPER_EVAL_PARSER_OPTS ();
}
#endif /* ENABLED (JERRY_ES2015_CLASS) */
/* steps 2 to 8 */
return ecma_op_eval (ecma_get_string_from_value (x), parse_opts);
} /* ecma_builtin_global_object_eval */
-2
View File
@@ -96,8 +96,6 @@ ecma_op_eval_chars_buffer (const lit_utf8_byte_t *code_p, /**< code characters b
#endif /* JERRY_ENABLE_LINE_INFO */
#if ENABLED (JERRY_ES2015_CLASS)
parse_opts |= ECMA_GET_SUPER_EVAL_PARSER_OPTS ();
ECMA_CLEAR_SUPER_EVAL_PARSER_OPTS ();
#endif /* ENABLED (JERRY_ES2015_CLASS) */
@@ -0,0 +1,23 @@
// Copyright JS Foundation and other contributors, http://js.foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
function f ( ) { }
var B = class extends f { constructor ( ){ eval ( "eval ('super (1, 2, 3, 4)')" ) ; } }
C = class extends B { g ( ) { { ( ) => { } } } }
D = class extends C { constructor ( ) { super ( )
}
g () { eval () } }
eval = eval.bind()
new D