/
n-dimens
/
pascalabcnet
Обзор
Документация
Войти
/
n-dimens
/
pascalabcnet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
SyntaxVisitors/PatternsVisitors/SingleDeconstructChecker.cs
45 строк
1 KB
Mikhalkovich Stanislav
Ликвидация зависимости проектов PascalABCSaushkinParser и SyntaxVisitors от
31 май 2023, 14:04
31 май 2023, 14:04
af9b6ac
Код
Авторство
О чём код?
using PascalABCCompiler.SyntaxTree; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SyntaxVisitors { public class SingleDeconstructChecker : BaseEnterExitVisitor { private const string DeconstructMethodName = "deconstruct"; // в трех местах эту константу - если менять private int deconstructCount = 0; private bool isInClass = false; public static SingleDeconstructChecker New => new SingleDeconstructChecker(); public override void Enter(syntax_tree_node st) { if (st is class_definition) { isInClass = true; deconstructCount = 0; } } public override void Exit(syntax_tree_node st) { if (st is class_definition) isInClass = false; } public override void visit(method_name _method_name) { if (!isInClass) return; if (_method_name?.meth_name?.name?.ToLower() == DeconstructMethodName) deconstructCount++; if (deconstructCount > 1) throw new SyntaxVisitorError("ONLY_ONE_DECONSTRUCT_ALLOWED", _method_name.Parent.source_context); } } }