From 08bcb4953bdb5db5a40e4926c636ed4934996865 Mon Sep 17 00:00:00 2001 From: EvilBeaver Date: Mon, 6 Nov 2023 12:28:18 +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/ModuleCompilerContext.cs | 4 ++++ tests/engine-behaviors.os | 18 +++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/ScriptEngine/Compiler/ModuleCompilerContext.cs b/src/ScriptEngine/Compiler/ModuleCompilerContext.cs index b68921f1e..15f0b4fac 100644 --- a/src/ScriptEngine/Compiler/ModuleCompilerContext.cs +++ b/src/ScriptEngine/Compiler/ModuleCompilerContext.cs @@ -27,6 +27,10 @@ public ModuleCompilerContext(CompilerContext outerContext) public SymbolBinding DefineMethod(MethodInfo method) { + if (_outerCtx.TryGetMethod(method.Name, out _)) + { + throw new CompilerException($"Symbol already defined {method.Name}"); + } var sb = _moduleCtx.DefineMethod(method); ShiftIndex(ref sb); diff --git a/tests/engine-behaviors.os b/tests/engine-behaviors.os index 06c1d00c5..5db5625dd 100644 --- a/tests/engine-behaviors.os +++ b/tests/engine-behaviors.os @@ -52,6 +52,7 @@ ВсеТесты.Добавить("ТестДолжен_ПроверитьИнформацияОбОшибкеВнеИсключения"); ВсеТесты.Добавить("ТестДолжен_ПроверитьПередачуПараметровПоСсылке"); ВсеТесты.Добавить("ТестДолжен_ПроверитьСравнениеНаБольшеМеньше"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьНевозможностьПереопределенияГлобальногоКонтекста"); Возврат ВсеТесты; @@ -686,8 +687,23 @@ юТест.ПроверитьКодСОшибкой( "Массив = Новый Массив(1); - |Массив2 = Новый Массив(1);; + |Массив2 = Новый Массив(1); |Рез = (Массив <= Массив2);", Ошибка, "Для одинаковых объектов" ); КонецПроцедуры + +Процедура ТестДолжен_ПроверитьНевозможностьПереопределенияГлобальногоКонтекста() Экспорт + + Код = "Функция СтрНайти(знач Стр1, знач Стр2) + | Возврат -1; + |КонецФункции + | + |Рез = СтрНайти(""Ай!"", ""!""); + |Если Рез < 0 Тогда + | Сообщить(""Ой!""); + |КонецЕсли"; + + юТест.ПроверитьКодСОшибкой(Код, "СтрНайти"); + +КонецПроцедуры