From 9d4123c3c497ed4a37910dd499768f38d32d3df7 Mon Sep 17 00:00:00 2001 From: Levente Orban Date: Wed, 26 Apr 2017 13:29:16 +0200 Subject: [PATCH] Fix the exception handler bug (#1780) If the debugger evaluate a variable out of the scope in eval mode, its get an error. JerryScript-DCO-1.0-Signed-off-by: Levente Orban orbanl@inf.u-szeged.hu --- jerry-core/vm/vm.c | 2 +- tests/debugger/do_eval_syntax.cmd | 3 +++ tests/debugger/do_eval_syntax.expected | 8 ++++++++ tests/debugger/do_eval_syntax.js | 27 ++++++++++++++++++++++++++ 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 tests/debugger/do_eval_syntax.cmd create mode 100644 tests/debugger/do_eval_syntax.expected create mode 100644 tests/debugger/do_eval_syntax.js diff --git a/jerry-core/vm/vm.c b/jerry-core/vm/vm.c index 8907bc051..fd0d3fa39 100644 --- a/jerry-core/vm/vm.c +++ b/jerry-core/vm/vm.c @@ -2517,7 +2517,7 @@ error: #ifdef JERRY_DEBUGGER if ((JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CONNECTED) && !(frame_ctx_p->bytecode_header_p->status_flags & CBC_CODE_FLAGS_DEBUGGER_IGNORE) - && !(JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_VM_IGNORE_EXCEPTION)) + && !(JERRY_CONTEXT (debugger_flags) & (JERRY_DEBUGGER_VM_IGNORE_EXCEPTION | JERRY_DEBUGGER_VM_IGNORE))) { jerry_debugger_breakpoint_hit (JERRY_DEBUGGER_EXCEPTION_HIT); } diff --git a/tests/debugger/do_eval_syntax.cmd b/tests/debugger/do_eval_syntax.cmd new file mode 100644 index 000000000..71e2eeeb8 --- /dev/null +++ b/tests/debugger/do_eval_syntax.cmd @@ -0,0 +1,3 @@ +n +eval loop +c diff --git a/tests/debugger/do_eval_syntax.expected b/tests/debugger/do_eval_syntax.expected new file mode 100644 index 000000000..ed90be167 --- /dev/null +++ b/tests/debugger/do_eval_syntax.expected @@ -0,0 +1,8 @@ +Connecting to: localhost:5001 +Stopped at tests/debugger/do_eval_syntax.js:24 +(jerry-debugger) n +Stopped at tests/debugger/do_eval_syntax.js:26 +(jerry-debugger) eval loop +Uncaught exception: Error +(jerry-debugger) c +Connection closed. diff --git a/tests/debugger/do_eval_syntax.js b/tests/debugger/do_eval_syntax.js new file mode 100644 index 000000000..efe481de0 --- /dev/null +++ b/tests/debugger/do_eval_syntax.js @@ -0,0 +1,27 @@ +// 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 foo(loop) +{ + while(loop) + { + print("eval"); + print("syntax"); + } +} + +var a = 10; + +eval("bar = function bar() {\nprint('bar function') }"); +bar();