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:
committed by
László Langó
parent
063e7fde2b
commit
99c7a4040f
@@ -27,6 +27,7 @@
|
|||||||
#include "lit-magic-strings.h"
|
#include "lit-magic-strings.h"
|
||||||
#include "lit-strings.h"
|
#include "lit-strings.h"
|
||||||
#include "vm.h"
|
#include "vm.h"
|
||||||
|
#include "jcontext.h"
|
||||||
#include "jrt-libc-includes.h"
|
#include "jrt-libc-includes.h"
|
||||||
#include "jrt-bit-fields.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;
|
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 */
|
/* steps 2 to 8 */
|
||||||
return ecma_op_eval (ecma_get_string_from_value (x), parse_opts);
|
return ecma_op_eval (ecma_get_string_from_value (x), parse_opts);
|
||||||
} /* ecma_builtin_global_object_eval */
|
} /* ecma_builtin_global_object_eval */
|
||||||
|
|||||||
@@ -96,8 +96,6 @@ ecma_op_eval_chars_buffer (const lit_utf8_byte_t *code_p, /**< code characters b
|
|||||||
#endif /* JERRY_ENABLE_LINE_INFO */
|
#endif /* JERRY_ENABLE_LINE_INFO */
|
||||||
|
|
||||||
#if ENABLED (JERRY_ES2015_CLASS)
|
#if ENABLED (JERRY_ES2015_CLASS)
|
||||||
parse_opts |= ECMA_GET_SUPER_EVAL_PARSER_OPTS ();
|
|
||||||
|
|
||||||
ECMA_CLEAR_SUPER_EVAL_PARSER_OPTS ();
|
ECMA_CLEAR_SUPER_EVAL_PARSER_OPTS ();
|
||||||
#endif /* ENABLED (JERRY_ES2015_CLASS) */
|
#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
|
||||||
Reference in New Issue
Block a user