From de1cc1e52c04a98288d7e44779628fe18f62d110 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Mon, 6 Nov 2023 12:20:43 +0300 Subject: [PATCH] =?UTF-8?q?fixes=20#1354=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BE?= =?UTF-8?q?=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=BE=D0=B2=20=D0=B3=D0=BB=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=82=D0=B5=D0=BA=D1=81=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Compiler/StackMachineCodeGenerator.cs | 5 +++-- tests/engine-behaviors.os | 20 ++++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/ScriptEngine/Compiler/StackMachineCodeGenerator.cs b/src/ScriptEngine/Compiler/StackMachineCodeGenerator.cs index e361f4e9f..baa80d944 100644 --- a/src/ScriptEngine/Compiler/StackMachineCodeGenerator.cs +++ b/src/ScriptEngine/Compiler/StackMachineCodeGenerator.cs @@ -287,15 +287,16 @@ protected override void VisitMethod(MethodNode methodNode) methodInfo.SetRuntimeParameters(entryPoint, GetVariableNames(methodCtx)); SymbolBinding binding; - try + if (!_ctx.TryFindMethodBinding(signature.MethodName, out _)) { binding = _ctx.DefineMethod(methodInfo.ToSymbol()); } - catch (CompilerException) + else { AddError(LocalizedErrors.DuplicateMethodDefinition(signature.MethodName), signature.Location); binding = default; } + _module.MethodRefs.Add(binding); _module.Methods.Add(methodInfo); } diff --git a/tests/engine-behaviors.os b/tests/engine-behaviors.os index 01867ddf2..f661c603c 100644 --- a/tests/engine-behaviors.os +++ b/tests/engine-behaviors.os @@ -52,6 +52,7 @@ ВсеТесты.Добавить("ТестДолжен_ПроверитьИнформацияОбОшибкеВнеИсключения"); ВсеТесты.Добавить("ТестДолжен_ПроверитьПередачуПараметровПоСсылке"); ВсеТесты.Добавить("ТестДолжен_ПроверитьСравнениеНаБольшеМеньше"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьНевозможностьПереопределенияГлобальногоКонтекста"); Возврат ВсеТесты; @@ -686,8 +687,25 @@ юТест.ПроверитьКодСОшибкой( "Массив = Новый Массив(1); - |Массив2 = Новый Массив(1);; + |Массив2 = Новый Массив(1); |Рез = (Массив <= Массив2);", Ошибка, "Для одинаковых объектов" ); КонецПроцедуры + +Процедура ТестДолжен_ПроверитьНевозможностьПереопределенияГлобальногоКонтекста() Экспорт + + Код = "Функция СтрНайти(знач Стр1, знач Стр2) + | Возврат -1; + |КонецФункции + | + |Рез = СтрНайти(""Ай!"", ""!""); + |Если Рез < 0 Тогда + | Сообщить(""Ой!""); + |КонецЕсли"; + + юТест.ПроверитьКодСОшибкой(Код, "СтрНайти"); + + юТест.ПроверитьКодСОшибкой("#native" + Символы.ПС + Код, "СтрНайти"); + +КонецПроцедуры