Skip to content

Commit

Permalink
Revert "fixes #1354 переопределение методов глобального контекста"
Browse files Browse the repository at this point in the history
Revert "Волшебная аннотация переопределения стандартного метода"
  • Loading branch information
EvilBeaver committed Dec 8, 2023
1 parent c6d7452 commit ce7dee8
Show file tree
Hide file tree
Showing 8 changed files with 13 additions and 148 deletions.
15 changes: 0 additions & 15 deletions src/OneScript.Core/Compilation/Binding/BindingExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,7 @@ This Source Code Form is subject to the terms of the
was not distributed with this file, You can obtain one
at http://mozilla.org/MPL/2.0/.
----------------------------------------------------------*/

using System.Linq;
using System.Reflection;
using OneScript.Contexts;
using OneScript.Language.SyntaxAnalysis.AstNodes;
using OneScript.Runtime.Binding;
using OneScript.Values;

Expand Down Expand Up @@ -44,16 +40,5 @@ public static IFieldSymbol ToSymbol(this BslFieldInfo info)
{
return new BslFieldSymbol { Field = info };
}

public static bool IsUniqueMethod(this SymbolTable table, MethodNode astNode)
{
var isKnown = table.TryFindMethodBinding(astNode.Signature.MethodName, out _);
if (!isKnown)
{
return true;
}

return astNode.Annotations.Any(a => BslOverrideAttribute.AcceptsIdentifier(a.Name));
}
}
}
23 changes: 0 additions & 23 deletions src/OneScript.Core/Compilation/Binding/BslOverrideAttribute.cs

This file was deleted.

23 changes: 1 addition & 22 deletions src/OneScript.Language/Localization/BilingualString.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@ This Source Code Form is subject to the terms of the
at http://mozilla.org/MPL/2.0/.
----------------------------------------------------------*/

using System;
using System.Globalization;

namespace OneScript.Localization
{
public class BilingualString : IEquatable<BilingualString>
public class BilingualString
{
private static readonly CultureInfo RussianCulture;

Expand Down Expand Up @@ -68,25 +67,5 @@ public static string Localize(string russian, string english)

return russian;
}

public bool Equals(BilingualString other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return Russian == other.Russian && English == other.English;
}

public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((BilingualString)obj);
}

public override int GetHashCode()
{
return HashCode.Combine(Russian, English);
}
}
}
24 changes: 0 additions & 24 deletions src/OneScript.Language/Localization/LocalizationExtensions.cs

This file was deleted.

12 changes: 3 additions & 9 deletions src/OneScript.Native/Compiler/CompilerHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ This Source Code Form is subject to the terms of the
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using OneScript.Compilation.Binding;
using OneScript.Contexts;
using OneScript.Language.LexicalAnalysis;
using OneScript.Language.SyntaxAnalysis.AstNodes;
Expand Down Expand Up @@ -50,15 +49,10 @@ public static object ClrValueFromLiteral(in Lexem lex)

public static IEnumerable<Attribute> GetAnnotations(IEnumerable<AnnotationNode> annotations)
{
return annotations.Select<AnnotationNode, Attribute>(a =>
{
if (BslOverrideAttribute.AcceptsIdentifier(a.Name))
{
return new BslOverrideAttribute();
}
// Возможно будут какие-то маппинги на системные атрибуты, не только на BslAnnotation
// поэтому возвращаем Attribute[] а не BslAnnotation[]

return GetBslAnnotation(a);
}).ToList();
return annotations.Select(GetBslAnnotation).ToList();
}

public static BslAnnotationAttribute GetBslAnnotation(AnnotationNode node)
Expand Down
2 changes: 1 addition & 1 deletion src/OneScript.Native/Compiler/ModuleCompiler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ private void RegisterLocalMethods(BslSyntaxNode module)
foreach (var methodNode in methodsSection.Children.Cast<MethodNode>())
{
var signature = methodNode.Signature;
if (!Symbols.IsUniqueMethod(methodNode))
if (Symbols.TryFindMethodBinding(signature.MethodName, out _))
{
AddError(LocalizedErrors.DuplicateMethodDefinition(signature.MethodName), signature.Location);
continue;
Expand Down
22 changes: 7 additions & 15 deletions src/ScriptEngine/Compiler/StackMachineCodeGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -287,16 +287,15 @@ protected override void VisitMethod(MethodNode methodNode)
methodInfo.SetRuntimeParameters(entryPoint, GetVariableNames(methodCtx));

SymbolBinding binding;
if (_ctx.IsUniqueMethod(methodNode))
try
{
binding = _ctx.DefineMethod(methodInfo.ToSymbol());
}
else
catch (CompilerException)
{
AddError(LocalizedErrors.DuplicateMethodDefinition(signature.MethodName), signature.Location);
binding = default;
}

_module.MethodRefs.Add(binding);
_module.Methods.Add(methodInfo);
}
Expand Down Expand Up @@ -1103,21 +1102,14 @@ private void VisitConstant(in Lexem constant)
AddCommand(OperationCode.PushConst, num);
}

private IEnumerable<Attribute> GetAnnotationAttributes(AnnotatableNode node)
private IEnumerable<BslAnnotationAttribute> GetAnnotationAttributes(AnnotatableNode node)
{
var mappedAnnotations = new List<Attribute>();
var mappedAnnotations = new List<BslAnnotationAttribute>();
foreach (var annotation in node.Annotations)
{
if (BslOverrideAttribute.AcceptsIdentifier(annotation.Name))
{
mappedAnnotations.Add(new BslOverrideAttribute());
}
else
{
var anno = new BslAnnotationAttribute(annotation.Name);
anno.SetParameters(GetAnnotationParameters(annotation));
mappedAnnotations.Add(anno);
}
var anno = new BslAnnotationAttribute(annotation.Name);
anno.SetParameters(GetAnnotationParameters(annotation));
mappedAnnotations.Add(anno);
}

return mappedAnnotations;
Expand Down
40 changes: 1 addition & 39 deletions tests/engine-behaviors.os
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,6 @@
ВсеТесты.Добавить("ТестДолжен_ПроверитьИнформацияОбОшибкеВнеИсключения");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПередачуПараметровПоСсылке");
ВсеТесты.Добавить("ТестДолжен_ПроверитьСравнениеНаБольшеМеньше");
ВсеТесты.Добавить("ТестДолжен_ПроверитьНевозможностьПереопределенияГлобальногоКонтекста");
ВсеТесты.Добавить("ТестДолжен_ПроверитьВозможностьПереопределенияГлобальногоКонтекста");

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

Expand Down Expand Up @@ -688,44 +686,8 @@

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

КонецПроцедуры

Процедура ТестДолжен_ПроверитьНевозможностьПереопределенияГлобальногоКонтекста() Экспорт

Код = "Функция СтрНайти(знач Стр1, знач Стр2)
| Возврат -1;
|КонецФункции
|
|Рез = СтрНайти(""Ай!"", ""!"");
|Если Рез < 0 Тогда
| Сообщить(""Ой!"");
|КонецЕсли";

юТест.ПроверитьКодСОшибкой(Код, "СтрНайти");

юТест.ПроверитьКодСОшибкой("#native" + Символы.ПС + Код, "СтрНайти");

КонецПроцедуры

Процедура ТестДолжен_ПроверитьВозможностьПереопределенияГлобальногоКонтекста() Экспорт

Код = "&Переопределить
|Функция СтрНайти(знач Стр1, знач Стр2)
| Возврат -1;
|КонецФункции
|
|Функция Проверить() Экспорт
| Возврат СтрНайти(""1"", ""1"");
|КонецФункции";

СкриптСтек = ЗагрузитьСценарийИзСтроки(Код);
СкриптНатив = ЗагрузитьСценарийИзСтроки("#native" + Символы.ПС + Код);

юТест.ПроверитьРавенство(-1, СкриптСтек.Проверить());
юТест.ПроверитьРавенство(-1, СкриптНатив.Проверить());

КонецПроцедуры

0 comments on commit ce7dee8

Please sign in to comment.