Skip to content

Commit de1cc1e

Browse files
committed
fixes #1354 переопределение методов глобального контекста
1 parent 8fabb4b commit de1cc1e

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

src/ScriptEngine/Compiler/StackMachineCodeGenerator.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,15 +287,16 @@ protected override void VisitMethod(MethodNode methodNode)
287287
methodInfo.SetRuntimeParameters(entryPoint, GetVariableNames(methodCtx));
288288

289289
SymbolBinding binding;
290-
try
290+
if (!_ctx.TryFindMethodBinding(signature.MethodName, out _))
291291
{
292292
binding = _ctx.DefineMethod(methodInfo.ToSymbol());
293293
}
294-
catch (CompilerException)
294+
else
295295
{
296296
AddError(LocalizedErrors.DuplicateMethodDefinition(signature.MethodName), signature.Location);
297297
binding = default;
298298
}
299+
299300
_module.MethodRefs.Add(binding);
300301
_module.Methods.Add(methodInfo);
301302
}

tests/engine-behaviors.os

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
ВсеТесты.Добавить("ТестДолжен_ПроверитьИнформацияОбОшибкеВнеИсключения");
5353
ВсеТесты.Добавить("ТестДолжен_ПроверитьПередачуПараметровПоСсылке");
5454
ВсеТесты.Добавить("ТестДолжен_ПроверитьСравнениеНаБольшеМеньше");
55+
ВсеТесты.Добавить("ТестДолжен_ПроверитьНевозможностьПереопределенияГлобальногоКонтекста");
5556

5657
Возврат ВсеТесты;
5758

@@ -686,8 +687,25 @@
686687

687688
юТест.ПроверитьКодСОшибкой(
688689
"Массив = Новый Массив(1);
689-
|Массив2 = Новый Массив(1);;
690+
|Массив2 = Новый Массив(1);
690691
|Рез = (Массив <= Массив2);",
691692
Ошибка, "Для одинаковых объектов" );
692693

693694
КонецПроцедуры
695+
696+
Процедура ТестДолжен_ПроверитьНевозможностьПереопределенияГлобальногоКонтекста() Экспорт
697+
698+
Код = "Функция СтрНайти(знач Стр1, знач Стр2)
699+
| Возврат -1;
700+
|КонецФункции
701+
|
702+
|Рез = СтрНайти(""Ай!"", ""!"");
703+
|Если Рез < 0 Тогда
704+
| Сообщить(""Ой!"");
705+
|КонецЕсли";
706+
707+
юТест.ПроверитьКодСОшибкой(Код, "СтрНайти");
708+
709+
юТест.ПроверитьКодСОшибкой("#native" + Символы.ПС + Код, "СтрНайти");
710+
711+
КонецПроцедуры

0 commit comments

Comments
 (0)