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 Тогда + | Сообщить(""Ой!""); + |КонецЕсли"; + + юТест.ПроверитьКодСОшибкой(Код, "СтрНайти"); + +КонецПроцедуры