diff --git a/src/NUnitTests/ContextTests.cs b/src/NUnitTests/ContextTests.cs index 50717be36..e8425ca4e 100644 --- a/src/NUnitTests/ContextTests.cs +++ b/src/NUnitTests/ContextTests.cs @@ -565,6 +565,29 @@ public void TestICallDeprecatedAliasAndHaveException() Assert.IsTrue(exceptionThrown, "Безнадёжно устаревший метод должен вызвать исключение"); } + [Test] + public void TestICallExecuteWithException() + { + SystemLogger.SetWriter(this); + _messages.Clear(); + var exceptionThrown = false; + + try + { + host.RunTestString( + @"Попытка + Выполнить(""Г=1/0""); + Исключение + КонецПопытки;"); + } + catch + { + exceptionThrown = true; + } + + Assert.IsFalse(exceptionThrown, "Перехваченное в Выполнить исключение не должно вызывать внешнее"); + } + public void Write(string text) { _messages.Add(text); diff --git a/src/ScriptEngine/Machine/MachineInstance.cs b/src/ScriptEngine/Machine/MachineInstance.cs index dc5c34a48..ce9e90f66 100644 --- a/src/ScriptEngine/Machine/MachineInstance.cs +++ b/src/ScriptEngine/Machine/MachineInstance.cs @@ -1458,6 +1458,7 @@ private void Execute(int arg) ModuleLoadIndex = _scopes.Count - 1, Locals = new IVariable[method.Variables.Count], InstructionPointer = 0, + IsReentrantCall = true }; PushFrame(frame); CreateCurrentFrameLocals(method.Variables);