/
EvilBeaver
/
OneScript
Обзор
Документация
Войти
/
EvilBeaver
/
OneScript
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
src/OneScript.Core/Compilation/Binding/SymbolScope.cs
110 строк
3 KB
EvilBeaver
Удален не взлетевший класс IContext
18 май 2025, 11:38
18 май 2025, 11:38
f69d97e
Код
Авторство
О чём код?
/*---------------------------------------------------------- This Source Code Form is subject to the terms of the Mozilla Public License, v.2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. ----------------------------------------------------------*/ using System.Collections.Generic; using System.Reflection; using OneScript.Contexts; using OneScript.Runtime.Binding; using OneScript.Values; namespace OneScript.Compilation.Binding { public class SymbolScope { public SymbolsCollection<IMethodSymbol> Methods { get; } = new SymbolsCollection<IMethodSymbol>(); public SymbolsCollection<IVariableSymbol> Variables { get; } = new SymbolsCollection<IVariableSymbol>(); public int DefineVariable(IVariableSymbol symbol) { return Variables.Add(symbol); } public int DefineMethod(IMethodSymbol symbol) { return Methods.Add(symbol); } #region Static part public static SymbolScope FromObject(BslObjectValue target) { var scope = new SymbolScope(); var type = target.GetType(); foreach (var info in type.GetMethods()) { var attr = info.GetCustomAttribute<ContextMethodAttribute>(); if(attr == null) continue; var symbol = new BslMethodSymbol { Method = new ContextMethodInfo(info), }; scope.Methods.Add(symbol); } foreach (var info in type.GetProperties()) { var attr = info.GetCustomAttribute<ContextMethodAttribute>(); if(attr == null) continue; var symbol = new BslPropertySymbol { Property = new ContextPropertyInfo(info), }; scope.Variables.Add(symbol); } return scope; } public static SymbolScope FromContext(IRuntimeContextInstance target) { var scope = new SymbolScope(); for (int i = 0; i < target.GetPropCount(); i++) { var targetProp = target.GetPropertyInfo(i); scope.Variables.Add(new BslPropertySymbol { Property = targetProp }); } for (int i = 0; i < target.GetMethodsCount(); i++) { var targetMeth = target.GetMethodInfo(i); scope.Methods.Add(new BslMethodSymbol { Method = targetMeth }); } return scope; } public static SymbolScope FromMethodsAndProperties(IEnumerable<BslMethodInfo> methods, IEnumerable<BslPropertyInfo> properties) { var scope = new SymbolScope(); foreach (var methodInfo in methods) { scope.Methods.Add(methodInfo.ToSymbol()); } foreach (var propertyInfo in properties) { scope.Variables.Add(propertyInfo.ToSymbol()); } return scope; } #endregion } }