Decompiled source of JSONCardLoader v2.5.4
JSONLoader.dll
Decompiled 10 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using APIPlugin; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using DiskCardGame; using HarmonyLib; using InscryptionAPI.Ascension; using InscryptionAPI.Card; using InscryptionAPI.Encounters; using InscryptionAPI.Guid; using InscryptionAPI.Helpers; using InscryptionAPI.Localizing; using InscryptionAPI.Masks; using InscryptionAPI.Regions; using InscryptionAPI.Saves; using InscryptionAPI.Sound; using InscryptionAPI.TalkingCards; using InscryptionAPI.TalkingCards.Animation; using InscryptionAPI.TalkingCards.Create; using InscryptionAPI.TalkingCards.Helpers; using InscryptionAPI.Triggers; using JLPlugin; using JLPlugin.ConfigilFunctions; using JLPlugin.Data; using JLPlugin.Hotkeys; using JLPlugin.SigilCode; using JLPlugin.Utils; using JLPlugin.V2.Data; using JSONLoader.Data; using JSONLoader.Data.TalkingCards; using JSONLoader.V2Code; using Microsoft.CodeAnalysis; using MonoMod.Utils; using NCalc; using PanoramicData.NCalcExtensions; using TMPro; using TinyJson; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = "")] [assembly: AssemblyCompany("JSONLoader")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("JSON Loader")] [assembly: AssemblyFileVersion("2.0.0.0")] [assembly: AssemblyInformationalVersion("2.0")] [assembly: AssemblyProduct("JSONLoader")] [assembly: AssemblyTitle("JSONLoader")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("2.0.0.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class IsReadOnlyAttribute : Attribute { } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class IsUnmanagedAttribute : Attribute { } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } public static class ImportExportUtils { private static string ID; private static string DebugPath; private static string LoggingSuffix; public static void SetID(string id) { ID = id; } public static void SetDebugPath(string path) { DebugPath = path.Substring(Plugin.BepInExDirectory.Length); LoggingSuffix = ""; } public static T ParseEnum<T>(string value) where T : unmanaged, Enum { if (Enum.TryParse<T>(value, out var result)) { return result; } int num = Math.Max(value.LastIndexOf('_'), value.LastIndexOf('.')); if (num < 0) { throw new InvalidCastException("Cannot parse " + value + " as " + typeof(T).FullName); } string text = value.Substring(0, num); string text2 = value.Substring(num + 1); return GuidManager.GetEnumValue<T>(text, text2); } public static void ApplyProperty<T, Y>(Func<T> getter, Action<T> setter, ref Y serializeInfoValue, bool toCardInfo, string category, string suffix) { if (toCardInfo) { T a = default(T); ApplyValue(ref a, ref serializeInfoValue, toA: true, category, suffix); setter(a); } else { T a2 = getter(); ApplyValue(ref a2, ref serializeInfoValue, toA: false, category, suffix); } } public static void ApplyProperty<T, Y>(ref T serializeInfoValue, Func<Y> getter, Action<Y> setter, bool toCardInfo, string category, string suffix) { if (toCardInfo) { Y b = getter(); ApplyValue(ref serializeInfoValue, ref b, toA: false, category, suffix); } else { Y b2 = default(Y); ApplyValue(ref serializeInfoValue, ref b2, toA: true, category, suffix); setter(b2); } } public static void ApplyValue<T, Y>(ref T a, ref Y b, bool toA, string category, string suffix) { if (toA) { ConvertValue(ref b, ref a, category, suffix); } else { ConvertValue(ref a, ref b, category, suffix); } } private static void ConvertValue<FromType, ToType>(ref FromType from, ref ToType to, string category, string suffix) { //IL_0882: Unknown result type (might be due to invalid IL or missing references) //IL_0889: Expected O, but got Unknown //IL_099b: Unknown result type (might be due to invalid IL or missing references) //IL_09a2: Expected O, but got Unknown LoggingSuffix = suffix; Type typeFromHandle = typeof(FromType); Type typeFromHandle2 = typeof(ToType); try { if (typeFromHandle == typeFromHandle2) { to = (ToType)(object)from; return; } if (AreNullableTypesEqual(from, to, out var a2, out var _, out var aHasValue, out var _)) { if (aHasValue) { to = (ToType)a2; } return; } if (typeFromHandle.IsGenericType && typeFromHandle.GetGenericTypeDefinition() == typeof(List<>) && typeFromHandle2.IsGenericType && typeFromHandle2.GetGenericTypeDefinition() == typeof(List<>)) { if (from != null) { IList list = (IList)Activator.CreateInstance(typeFromHandle2); to = (ToType)list; IList list2 = (IList)(object)from; for (int i = 0; i < list2.Count; i++) { object o = list2[i]; object @default = GetDefault(typeFromHandle2.GetGenericArguments().Single()); object value = ConvertType(typeFromHandle, typeFromHandle2, o, @default, category, $"{suffix}_{i + 1}"); list.Add(value); } } return; } if (typeFromHandle.IsGenericType && typeFromHandle.GetGenericTypeDefinition() == typeof(List<>) && typeFromHandle2.IsArray) { if (from != null) { IList list3 = (IList)(object)from; int length = ((from != null) ? list3.Count : 0); Array array = Array.CreateInstance(typeFromHandle2.GetElementType(), length); to = (ToType)(object)array; for (int j = 0; j < list3.Count; j++) { object obj = list3[j]; object default2 = GetDefault(typeFromHandle2.GetElementType()); object[] array2 = new object[4] { obj, default2, category, $"{suffix}_{j + 1}" }; MethodInfo methodInfo = typeof(ImportExportUtils).GetMethod("ConvertValue", BindingFlags.Static | BindingFlags.NonPublic).MakeGenericMethod(typeFromHandle.GetGenericArguments().Single(), typeFromHandle2.GetElementType()); methodInfo.Invoke(null, array2); array.SetValue(array2[1], j); } } return; } if (typeFromHandle.IsArray && typeFromHandle2.IsGenericType && typeFromHandle2.GetGenericTypeDefinition() == typeof(List<>)) { if (from != null) { IList list4 = (IList)Activator.CreateInstance(typeFromHandle2); to = (ToType)list4; Array array3 = (Array)(object)from; for (int k = 0; k < array3.Length; k++) { object value2 = array3.GetValue(k); object default3 = GetDefault(typeFromHandle2.GetGenericArguments().Single()); object[] array4 = new object[4] { value2, default3, category, $"{suffix}_{k + 1}" }; MethodInfo methodInfo2 = typeof(ImportExportUtils).GetMethod("ConvertValue", BindingFlags.Static | BindingFlags.NonPublic).MakeGenericMethod(typeFromHandle.GetElementType(), typeFromHandle2.GetGenericArguments().Single()); methodInfo2.Invoke(null, array4); list4.Add(array4[1]); } } return; } if (typeFromHandle.IsEnum && typeFromHandle2 == typeof(string)) { string text = from.ToString(); if (int.TryParse(text, out var result)) { object[] array5 = new object[3] { result, "guid", "name" }; MethodInfo methodInfo3 = typeof(GuidManager).GetMethod("TryGetGuidAndKeyEnumValue", BindingFlags.Static | BindingFlags.Public).MakeGenericMethod(typeFromHandle); if ((bool)methodInfo3.Invoke(null, array5)) { string text2 = (string)array5[1]; string text3 = (string)array5[2]; to = (ToType)(object)(text2 + "_" + text3); } else { Error($"Failed to convert enum to string! '{from}'"); to = (ToType)(object)text; } } else { to = (ToType)(object)text; } return; } if (typeFromHandle == typeof(string) && typeFromHandle2.IsEnum) { if (!string.IsNullOrEmpty((string)(object)from)) { object obj2 = typeof(ImportExportUtils).GetMethod("ParseEnum", BindingFlags.Static | BindingFlags.Public).MakeGenericMethod(typeFromHandle2).Invoke(null, new object[1] { from }); to = (ToType)obj2; } return; } if (typeFromHandle == typeof(CardInfo) && typeFromHandle2 == typeof(string)) { if (from != null) { object obj3 = from; to = (ToType)(object)((Object)((obj3 is CardInfo) ? obj3 : null)).name; } return; } if (typeFromHandle == typeof(string) && typeFromHandle2 == typeof(CardInfo)) { string text4 = (string)(object)from; if (text4 != null) { text4 = text4.Trim(); } if (string.IsNullOrEmpty(text4)) { return; } to = (ToType)(object)CardExtensions.CardByName((IEnumerable<CardInfo>)CardManager.AllCardsCopy, text4); if (to != null) { return; } CardInfo[] array6 = FindSimilarCards(text4); if (array6.Length == 0) { string text5 = string.Join(", ", CardManager.AllCardsCopy.Select((CardInfo c) => ((Object)c).name)); Error("Could not find CardInfo with name '" + text4 + "'!\nAllCards: " + text5); return; } to = (ToType)(object)array6[0]; string text6 = string.Join(" or ", array6.Select((CardInfo a) => "'" + ((Object)a).name + "'")); Warning("Could not find CardInfo with name '" + text4 + "'. Did you mean " + text6 + "?"); return; } if (typeFromHandle == typeof(string) && (typeFromHandle2 == typeof(Texture) || typeFromHandle2.IsSubclassOf(typeof(Texture)))) { string text7 = (string)(object)from; if (!string.IsNullOrEmpty(text7)) { try { to = (ToType)(object)TextureHelper.GetImageAsTexture(text7, (FilterMode)0); return; } catch (FileNotFoundException) { Error("Failed to find texture " + text7 + "!"); return; } } return; } if ((typeFromHandle == typeof(Texture) || typeFromHandle.IsSubclassOf(typeof(Texture))) && typeFromHandle2 == typeof(string)) { Texture val = (Texture)(object)from; if ((Object)(object)val != (Object)null) { string path = Path.Combine(Plugin.ExportDirectory, category, "Assets", ID + "_" + suffix + ".png"); to = (ToType)(object)ExportTexture(val, path); } return; } if (typeFromHandle == typeof(string) && typeFromHandle2 == typeof(Sprite)) { string text8 = (string)(object)from; if (!string.IsNullOrEmpty(text8)) { Texture2D imageAsTexture = TextureHelper.GetImageAsTexture(text8, (FilterMode)0); if ((Object)(object)imageAsTexture != (Object)null) { to = (ToType)(object)TextureHelper.ConvertTexture(imageAsTexture, (Vector2?)null); } } return; } if (typeFromHandle == typeof(Sprite) && typeFromHandle2 == typeof(string)) { Sprite val2 = (Sprite)(object)from; if ((Object)(object)val2 != (Object)null) { string path2 = Path.Combine(Plugin.ExportDirectory, category, "Assets", ID + "_" + suffix + ".png"); to = (ToType)(object)ExportTexture(val2.texture, path2); } return; } if (typeFromHandle.GetInterfaces().Contains(typeof(IConvertible)) && typeFromHandle2.GetInterfaces().Contains(typeof(IConvertible))) { IConvertible convertible = from as IConvertible; IConvertible convertible2 = to as IConvertible; if (convertible != null && convertible2 != null) { to = (ToType)Convert.ChangeType(convertible, typeFromHandle2); } return; } if (typeFromHandle == typeof(JSONParser.LocalizableField) && typeFromHandle2 == typeof(string)) { Error("Use ApplyLocaleField when converted from LocalizableField to string!"); } else if (typeFromHandle == typeof(string) && typeFromHandle2 == typeof(JSONParser.LocalizableField)) { Error("Use ApplyLocaleField when converted from string to LocalizableField!"); } } catch (Exception e) { Error($"Failed to convert: {typeFromHandle} to {typeFromHandle2}"); Exception(e); return; } Error($"Unsupported conversion type: {typeFromHandle} to {typeFromHandle2}\n{Environment.StackTrace}"); } private static CardInfo[] FindSimilarCards(string misspelledCardName) { List<Tuple<int, CardInfo>> list = new List<Tuple<int, CardInfo>>(); string text = misspelledCardName.ToLower().Replace("-", "").Replace("_", ""); int num = Mathf.Clamp(text.Length - 1, 1, 4); foreach (CardInfo item in CardManager.AllCardsCopy) { string text2 = ((Object)item).name.ToLower().Replace("-", "").Replace("_", ""); if (Mathf.Abs(text.Length - text2.Length) > num) { continue; } int num2 = 0; int num3 = Mathf.Max(0, text.Length - text2.Length); int num4 = text2.Length - 1; int num5 = text.Length - 1; while (num5 >= 0 && num4 >= 0) { if (text2[num4] == text[num5]) { num2++; } else { num3++; if (num3 > num) { break; } if (num4 > 0 && text2[num4 - 1] == text[num5]) { num4--; num2++; } else if (num5 > 0 && text2[num4] == text[num5 - 1]) { num5--; num2++; } } num5--; num4--; } if (num2 > 0 && num3 < num) { list.Add(new Tuple<int, CardInfo>(num2, item)); } } list.Sort((Tuple<int, CardInfo> a, Tuple<int, CardInfo> b) => b.Item1 - a.Item1); return list.Select((Tuple<int, CardInfo> a) => a.Item2).ToArray(); } private static object ConvertType(Type fromType, Type toType, object o1, object o2, string category, string suffix) { object[] array = new object[4] { o1, o2, category, suffix }; MethodInfo methodInfo = typeof(ImportExportUtils).GetMethod("ConvertValue", BindingFlags.Static | BindingFlags.NonPublic).MakeGenericMethod(fromType.GetGenericArguments().Single(), toType.GetGenericArguments().Single()); methodInfo.Invoke(null, array); return array[1]; } private static bool AreNullableTypesEqual<T, Y>(T t, Y y, out object a, out object b, out bool aHasValue, out bool bHasValue) { aHasValue = false; bHasValue = false; a = null; b = null; bool flag = typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(Nullable<>); bool flag2 = typeof(Y).IsGenericType && typeof(Y).GetGenericTypeDefinition() == typeof(Nullable<>); if (!flag && !flag2) { return false; } Type type = (flag ? Nullable.GetUnderlyingType(typeof(T)) : typeof(T)); Type type2 = (flag2 ? Nullable.GetUnderlyingType(typeof(Y)) : typeof(Y)); if (type == type2) { if (flag) { a = GetValueFromNullable(t, out aHasValue); } else { a = t; aHasValue = true; } if (flag2) { b = GetValueFromNullable(y, out bHasValue); } else { b = y; bHasValue = true; } return true; } Error($"Not same types {typeof(T)} {typeof(Y)}"); return false; } private static string ExportTexture(Texture texture, string path) { Texture2D val = (Texture2D)(object)((texture is Texture2D) ? texture : null); if (val != null) { return ExportTexture(val, path); } Texture2D texture2 = Texture2D.CreateExternalTexture(texture.width, texture.height, (TextureFormat)4, false, false, texture.GetNativeTexturePtr()); return ExportTexture(texture2, path); } private static string ExportTexture(Texture2D texture, string path) { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown //IL_006a: Unknown result type (might be due to invalid IL or missing references) if (!((Texture)texture).isReadable) { RenderTexture temporary = RenderTexture.GetTemporary(((Texture)texture).width, ((Texture)texture).height, 0, (RenderTextureFormat)7, (RenderTextureReadWrite)1); Graphics.Blit((Texture)(object)texture, temporary); RenderTexture active = RenderTexture.active; RenderTexture.active = temporary; Texture2D val = new Texture2D(((Texture)texture).width, ((Texture)texture).height); val.ReadPixels(new Rect(0f, 0f, (float)((Texture)temporary).width, (float)((Texture)temporary).height), 0, 0); val.Apply(); RenderTexture.active = active; RenderTexture.ReleaseTemporary(temporary); texture = val; } byte[] array = ImageConversion.EncodeToPNG(texture); if (array == null) { Error("Failed to turn into bytes??"); } if (string.IsNullOrEmpty(path)) { Error("path is empty????"); } string directoryName = Path.GetDirectoryName(path); if (!Directory.Exists(directoryName)) { Directory.CreateDirectory(directoryName); } File.WriteAllBytes(path, array); return Path.GetFileName(path); } public static string[] ExportTextures(IEnumerable<Texture2D> texture, string type, string fileName) { int num = 0; List<string> list = new List<string>(); foreach (Texture2D item in texture) { num++; string path = Path.Combine(Plugin.ExportDirectory, type, "Assets", $"{fileName}_{num}.png"); list.Add(ExportTexture(item, path)); } return list.ToArray(); } public static void ApplyLocaleField(string field, ref JSONParser.LocalizableField rows, ref string cardInfoEnglishField, bool toCardInfo) { if (toCardInfo) { ApplyLocaleField(field, rows, ref cardInfoEnglishField); return; } string text = cardInfoEnglishField; cardInfoEnglishField = text; ImportLocaleField(rows, cardInfoEnglishField); } private static void ImportLocaleField(JSONParser.LocalizableField rows, string cardInfoEnglishField) { //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) rows.rows.Clear(); rows.Initialize(cardInfoEnglishField); Translation val = Localization.Translations.Find((Translation a) => a.englishStringFormatted == cardInfoEnglishField); if (val != null) { foreach (KeyValuePair<Language, string> value in val.values) { string text = LocalizationManager.LanguageToCode(value.Key); rows.SetValue(rows.englishFieldName + "_" + text, value.Value); VerboseLog($"Loaded {cardInfoEnglishField} translation for {text} => {value.Key}"); } return; } VerboseLog("ApplyLocaleField could not find any translations from english '" + cardInfoEnglishField + "'"); } private static void ApplyLocaleField(string field, JSONParser.LocalizableField rows, ref string cardInfoEnglishField) { //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Invalid comparison between Unknown and I4 //IL_014d: Unknown result type (might be due to invalid IL or missing references) if (rows.rows.TryGetValue(rows.englishFieldName, out var value)) { cardInfoEnglishField = value; } else { if (rows.rows.Count <= 0) { return; } cardInfoEnglishField = rows.rows.First().Value; } VerboseLog("ApplyLocaleField " + field + " english " + cardInfoEnglishField); foreach (KeyValuePair<string, string> row in rows.rows) { if (row.Key == rows.englishFieldName) { continue; } int num = row.Key.LastIndexOf("_", StringComparison.Ordinal); if (num < 0) { VerboseError("Could not find _ of key " + row.Key + " in field " + field + "!"); continue; } int length = row.Key.Length - num - 1; string text = row.Key.Substring(num + 1, length); Language val = LocalizationManager.CodeToLanguage(text); if ((int)val != 12) { LocalizationManager.Translate("MADH.inscryption.JSONLoader", (string)null, cardInfoEnglishField, row.Value, val); VerboseLog("Translation " + cardInfoEnglishField + " to " + text + " = " + row.Value); } else { Error("Unknown language code " + text + " for card " + cardInfoEnglishField + " in field " + field); } } } private static object GetValueFromNullable<U>(U u, out bool hasValue) { Type typeFromHandle = typeof(U); if (u != null && (bool)typeFromHandle.GetProperty("HasValue", BindingFlags.Instance | BindingFlags.Public).GetValue(u)) { hasValue = true; return typeFromHandle.GetProperty("Value", BindingFlags.Instance | BindingFlags.Public).GetValue(u); } hasValue = false; Type underlyingType = Nullable.GetUnderlyingType(typeFromHandle); if (underlyingType.IsValueType) { return Activator.CreateInstance(underlyingType); } return null; } private static object GetDefault(Type type) { if (type.IsValueType) { return Activator.CreateInstance(type); } return null; } private static void VerboseLog(string message) { Plugin.VerboseLog("[" + DebugPath + "][" + ID + "][" + LoggingSuffix + "] " + message); } private static void VerboseWarning(string message) { if (Configs.VerboseLogging) { Plugin.VerboseWarning("[" + DebugPath + "][" + ID + "][" + LoggingSuffix + "] " + message); } } private static void VerboseError(string message) { if (Configs.VerboseLogging) { Plugin.VerboseError("[" + DebugPath + "][" + ID + "][" + LoggingSuffix + "] " + message); } } private static void Warning(string message) { if (Configs.VerboseLogging) { VerboseWarning(message); return; } Plugin.Log.LogWarning((object)("[" + ID + "][" + LoggingSuffix + "] " + message)); } private static void Error(string message) { if (Configs.VerboseLogging) { VerboseError(message); return; } Plugin.Log.LogError((object)("[" + ID + "][" + LoggingSuffix + "] " + message)); } private static void Exception(Exception e) { Plugin.Log.LogError((object)("[" + DebugPath + "][" + ID + "][" + LoggingSuffix + "] " + e.Message + "\n" + e.StackTrace)); } } namespace TinyJson { public static class JSONParser { public interface IFlexibleField { bool ContainsKey(string key); void SetValue(string key, string value); string ToJSON(); } public interface IInitializable { void Initialize(); } [Serializable] public class LocalizableField : IFlexibleField { public Dictionary<string, string> rows; public string englishFieldName; public LocalizableField(string EnglishFieldName) { rows = new Dictionary<string, string>(); englishFieldName = EnglishFieldName; } public void Initialize(string englishValue) { rows[englishFieldName] = englishValue; } public bool ContainsKey(string key) { return key.StartsWith(englishFieldName); } public void SetValue(string key, string value) { rows[key] = value; } public string ToJSON() { string text = ""; foreach (KeyValuePair<string, string> row in rows) { text = text + "\t\"" + row.Key + "\": \"" + row.Value + "\",\n"; } return text; } public override string ToString() { return rows.ToString(); } } [ThreadStatic] private static Stack<List<string>> splitArrayPool; [ThreadStatic] private static StringBuilder stringBuilder; [ThreadStatic] private static Dictionary<Type, Dictionary<string, FieldInfo>> fieldInfoCache; [ThreadStatic] private static Dictionary<Type, Dictionary<string, PropertyInfo>> propertyInfoCache; [ThreadStatic] private static Dictionary<Type, FieldInfo[]> publicFieldInfoCache; public static T FromJson<T>(this string json) { if (propertyInfoCache == null) { propertyInfoCache = new Dictionary<Type, Dictionary<string, PropertyInfo>>(); } if (fieldInfoCache == null) { fieldInfoCache = new Dictionary<Type, Dictionary<string, FieldInfo>>(); } if (stringBuilder == null) { stringBuilder = new StringBuilder(); } if (splitArrayPool == null) { splitArrayPool = new Stack<List<string>>(); } if (publicFieldInfoCache == null) { publicFieldInfoCache = new Dictionary<Type, FieldInfo[]>(); } stringBuilder.Length = 0; for (int i = 0; i < json.Length; i++) { char c = json[i]; switch (c) { case '"': i = AppendUntilStringEnd(appendEscapeCharacter: true, i, json); continue; case '/': if (i + 1 != json.Length && json[i + 1] == '/') { i = SkipUntilLineEnd(i, json); continue; } break; } if (!char.IsWhiteSpace(c)) { stringBuilder.Append(c); } } return (T)ParseValue(typeof(T), stringBuilder.ToString()); } private static int SkipUntilLineEnd(int startIdx, string json) { for (int i = startIdx + 2; i < json.Length; i++) { if (json[i] == '\n') { return i + 1; } } return json.Length - 1; } private static int AppendUntilStringEnd(bool appendEscapeCharacter, int startIdx, string json) { stringBuilder.Append(json[startIdx]); for (int i = startIdx + 1; i < json.Length; i++) { if (json[i] == '\\') { if (appendEscapeCharacter) { stringBuilder.Append(json[i]); } stringBuilder.Append(json[i + 1]); i++; } else { if (json[i] == '"') { stringBuilder.Append(json[i]); return i; } stringBuilder.Append(json[i]); } } return json.Length - 1; } private static List<string> Split(string json) { List<string> list = ((splitArrayPool.Count > 0) ? splitArrayPool.Pop() : new List<string>()); list.Clear(); if (json.Length == 2) { return list; } int num = 0; stringBuilder.Length = 0; for (int i = 1; i < json.Length - 1; i++) { switch (json[i]) { case '[': case '{': num++; break; case ']': case '}': num--; break; case '"': i = AppendUntilStringEnd(appendEscapeCharacter: true, i, json); continue; case ',': case ':': if (num == 0) { list.Add(stringBuilder.ToString()); stringBuilder.Length = 0; continue; } break; } stringBuilder.Append(json[i]); } list.Add(stringBuilder.ToString()); return list; } internal static object ParseValue(Type type, string json) { if (type == typeof(string)) { if (json.Length <= 2) { return string.Empty; } StringBuilder stringBuilder = new StringBuilder(json.Length); for (int i = 1; i < json.Length - 1; i++) { if (json[i] == '\\' && i + 1 < json.Length - 1) { int num = "\"\\nrtbf/".IndexOf(json[i + 1]); if (num >= 0) { stringBuilder.Append("\"\\\n\r\t\b\f/"[num]); i++; continue; } if (json[i + 1] == 'u' && i + 5 < json.Length - 1) { uint result = 0u; if (uint.TryParse(json.Substring(i + 2, 4), NumberStyles.AllowHexSpecifier, null, out result)) { stringBuilder.Append((char)result); i += 5; continue; } } } stringBuilder.Append(json[i]); } return stringBuilder.ToString(); } if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) { return Convert.ChangeType(json, type.GetGenericArguments().First(), CultureInfo.InvariantCulture); } if (type.IsPrimitive) { return Convert.ChangeType(json, type, CultureInfo.InvariantCulture); } if (type == typeof(decimal)) { decimal.TryParse(json, NumberStyles.Float, CultureInfo.InvariantCulture, out var result2); return result2; } if (type == typeof(DateTime)) { DateTime.TryParse(json.Replace("\"", ""), CultureInfo.InvariantCulture, DateTimeStyles.None, out var result3); return result3; } if (json == "null") { return null; } if (type.IsEnum) { if (json[0] == '"') { json = json.Substring(1, json.Length - 2); } try { return Enum.Parse(type, json, ignoreCase: false); } catch { return 0; } } if (type.IsArray) { Type elementType = type.GetElementType(); if (json[0] != '[' || json[json.Length - 1] != ']') { return null; } List<string> list = Split(json); Array array = Array.CreateInstance(elementType, list.Count); for (int j = 0; j < list.Count; j++) { array.SetValue(ParseValue(elementType, list[j]), j); } splitArrayPool.Push(list); return array; } if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) { Type type2 = type.GetGenericArguments()[0]; if (json[0] != '[' || json[json.Length - 1] != ']') { return null; } List<string> list2 = Split(json); IList list3 = (IList)type.GetConstructor(new Type[1] { typeof(int) }).Invoke(new object[1] { list2.Count }); for (int k = 0; k < list2.Count; k++) { list3.Add(ParseValue(type2, list2[k])); } splitArrayPool.Push(list2); return list3; } if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Dictionary<, >)) { Type[] genericArguments = type.GetGenericArguments(); Type type3 = genericArguments[0]; Type type4 = genericArguments[1]; if (type3 != typeof(string)) { return null; } if (json[0] != '{' || json[json.Length - 1] != '}') { return null; } List<string> list4 = Split(json); if (list4.Count % 2 != 0) { return null; } IDictionary dictionary = (IDictionary)type.GetConstructor(new Type[1] { typeof(int) }).Invoke(new object[1] { list4.Count / 2 }); for (int l = 0; l < list4.Count; l += 2) { if (list4[l].Length > 2) { string key = list4[l].Substring(1, list4[l].Length - 2); object value = ParseValue(type4, list4[l + 1]); dictionary[key] = value; } } return dictionary; } if (type == typeof(object)) { return ParseAnonymousValue(json); } if (json[0] == '{' && json[json.Length - 1] == '}') { return ParseObject(type, json); } return null; } private static object ParseAnonymousValue(string json) { if (json.Length == 0) { return null; } if (json[0] == '{' && json[json.Length - 1] == '}') { List<string> list = Split(json); if (list.Count % 2 != 0) { return null; } Dictionary<string, object> dictionary = new Dictionary<string, object>(list.Count / 2); for (int i = 0; i < list.Count; i += 2) { dictionary[list[i].Substring(1, list[i].Length - 2)] = ParseAnonymousValue(list[i + 1]); } return dictionary; } if (json[0] == '[' && json[json.Length - 1] == ']') { List<string> list2 = Split(json); List<object> list3 = new List<object>(list2.Count); for (int j = 0; j < list2.Count; j++) { list3.Add(ParseAnonymousValue(list2[j])); } return list3; } if (json[0] == '"' && json[json.Length - 1] == '"') { string text = json.Substring(1, json.Length - 2); return text.Replace("\\", string.Empty); } if (char.IsDigit(json[0]) || json[0] == '-') { if (json.Contains(".")) { double.TryParse(json, NumberStyles.Float, CultureInfo.InvariantCulture, out var result); return result; } int.TryParse(json, out var result2); return result2; } if (json == "true") { return true; } if (json == "false") { return false; } return null; } private static Dictionary<string, T> CreateMemberNameDictionary<T>(T[] members) where T : MemberInfo { Dictionary<string, T> dictionary = new Dictionary<string, T>(StringComparer.OrdinalIgnoreCase); foreach (T val in members) { if (val.IsDefined(typeof(IgnoreDataMemberAttribute), inherit: true)) { continue; } string name = val.Name; if (val.IsDefined(typeof(DataMemberAttribute), inherit: true)) { DataMemberAttribute dataMemberAttribute = (DataMemberAttribute)Attribute.GetCustomAttribute(val, typeof(DataMemberAttribute), inherit: true); if (!string.IsNullOrEmpty(dataMemberAttribute.Name)) { name = dataMemberAttribute.Name; } } dictionary.Add(name.ToLower(), val); } return dictionary; } private static object ParseObject(Type type, string json) { object uninitializedObject = FormatterServices.GetUninitializedObject(type); if (uninitializedObject is IInitializable initializable) { initializable.Initialize(); } List<string> list = Split(json); if (list.Count % 2 != 0) { return uninitializedObject; } if (!fieldInfoCache.TryGetValue(type, out var value)) { value = CreateMemberNameDictionary(type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy)); fieldInfoCache.Add(type, value); } if (!propertyInfoCache.TryGetValue(type, out var value2)) { value2 = CreateMemberNameDictionary(type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy)); propertyInfoCache.Add(type, value2); } for (int i = 0; i < list.Count; i += 2) { if (list[i].Length <= 2) { continue; } string text = list[i].Substring(1, list[i].Length - 2).ToLower(); string text2 = list[i + 1]; if (value.TryGetValue(text, out var value3)) { SetField(value3, uninitializedObject, text2); continue; } if (value2.TryGetValue(text, out var value4)) { SetProperty(value4, uninitializedObject, text2); continue; } bool flag = false; foreach (KeyValuePair<string, FieldInfo> item in value) { FieldInfo value5 = item.Value; if (value5.FieldType.GetInterfaces().Contains(typeof(IFlexibleField))) { object value6 = value5.GetValue(uninitializedObject); if (value6 is IFlexibleField flexibleField && flexibleField.ContainsKey(text)) { flexibleField.SetValue(text, (string)ParseValue(typeof(string), text2)); flag = true; break; } } } if (!flag) { Plugin.VerboseWarning($"{text} field not found for {type}"); } } return uninitializedObject; } private static void SetField(FieldInfo info, object o, string v) { if (info.FieldType.GetInterfaces().Contains(typeof(IFlexibleField))) { object value = info.GetValue(o); if (value == null) { Debug.LogError((object)$"{info.Name} field is null! {info.FieldType} o:{o} instance:{o}"); } else if (value is IFlexibleField flexibleField) { flexibleField.SetValue(info.Name, (string)ParseValue(typeof(string), v)); } } else { info.SetValue(o, ParseValue(info.FieldType, v)); } } private static void SetProperty(PropertyInfo info, object o, string v) { info.SetValue(o, ParseValue(info.PropertyType, v), null); } public static string ToJSON<T>(T t) { return ToJSONInternal(typeof(T), t, ""); } private static string ToJSONInternal(Type type, object t, string prefix) { try { if (type == typeof(string)) { string text = (string)t; if (text != null) { return "\"" + text + "\""; } return "\"\""; } if (type == typeof(string[])) { string[] array = (string[])t; if (array != null && array.Length != 0) { string text2 = "["; for (int i = 0; i < array.Length; i++) { string text3 = array[i]; text2 = text2 + "\"" + text3 + "\""; if (i < array.Length - 1) { text2 += ","; } } return text2 + "]"; } return "[]"; } if (type == typeof(int?)) { int? num = (int?)t; if (num.HasValue) { return num.Value.ToString(); } return "0"; } if (type == typeof(bool?)) { bool? flag = (bool?)t; if (flag.HasValue) { return flag.Value ? "true" : "false"; } return "false"; } if (type == typeof(bool)) { return ((bool)t) ? "true" : "false"; } if (type == typeof(int) || type == typeof(long)) { return t.ToString(); } if (type == typeof(Dictionary<string, string>)) { Dictionary<string, string> dictionary = (Dictionary<string, string>)t; if (dictionary != null && dictionary.Count > 0) { string text4 = "{"; int num2 = 0; foreach (KeyValuePair<string, string> item in dictionary) { text4 = ((num2++ <= 0) ? (text4 + "\n\t" + prefix + "\"" + item.Key + "\": \"" + item.Value + "\"") : (text4 + ",\n\t" + prefix + "\"" + item.Key + "\": \"" + item.Value + "\"")); } if (num2 > 0) { return text4 + "\n" + prefix + "}"; } return text4 + "}"; } return "{}"; } if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) { IList list = (IList)t; if (list != null && list.Count > 0) { Type type2 = list.GetType().GetGenericArguments().Single(); string text5 = ""; string text6 = prefix + "\t"; for (int j = 0; j < list.Count; j++) { object t2 = list[j]; text5 = text5 + "\n" + text6 + ToJSONInternal(type2, t2, text6); if (j < list.Count - 1) { text5 += ","; } } return "[" + text5 + "\n" + prefix + "]"; } return "[]"; } if (type.IsAssignableFrom(typeof(IFlexibleField))) { if (t != null) { return ((IFlexibleField)t).ToJSON(); } Dictionary<string, string> rows = ((LocalizableField)t).rows; return ToJSONInternal(rows.GetType(), rows, prefix); } if (!type.IsValueType) { if (!publicFieldInfoCache.TryGetValue(type, out var value)) { value = type.GetFields(BindingFlags.Instance | BindingFlags.Public); publicFieldInfoCache[type] = value; } string text7 = "{"; int num3 = 0; string text8 = prefix + "\t"; FieldInfo[] array2 = value; foreach (FieldInfo fieldInfo in array2) { string text9 = ToJSONInternal(fieldInfo.FieldType, fieldInfo.GetValue(t), text8); if (num3++ > 0) { text7 += ","; } text7 = text7 + "\n" + text8 + "\"" + fieldInfo.Name + "\": " + text9; } if (num3 > 0) { return text7 + "\n" + prefix + "}"; } return text7 + prefix + "}"; } } catch (Exception ex) { Plugin.Log.LogError((object)$"Something went wrong while serializing JSON type: {type} value: {t}"); Plugin.Log.LogError((object)ex); throw; } throw new NotImplementedException($"Type not supported for JSON serialization {type}"); } } } namespace JLPlugin { public static class Extensions { public static void Append<K, V>(this Dictionary<K, V> first, Dictionary<K, V> second) { second.ToList().ForEach(delegate(KeyValuePair<K, V> pair) { first[pair.Key] = pair.Value; }); } } internal static class Interpreter { public static class RegexStrings { public static string Function = "([a-zA-Z]+)(?<!if|in)(\\(((?>\\((?<c>)|[^()]+|\\)(?<-c>))*(?(c)(?!)))\\))"; public static string Variable = "\\[((?>\\[(?<c>)|[^\\[\\]]+|\\](?<-c>))*(?(c)(?!)))\\]"; public static string GeneratedVariable = "\\[([^]]*?\\.[^[]*?)\\]"; public static string Expression = "\\(((?>\\((?<c>)|[^()]+|\\)(?<-c>))*(?(c)(?!)))\\)"; } public static Random random = new Random(); public static object Process(in string input, AbilityBehaviourData abilityData, Type type = null, bool sendDebug = true, Dictionary<string, object?> additionalParameters = null) { //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Expected O, but got Unknown //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Expected O, but got Unknown //IL_00bf: Expected O, but got Unknown object obj = input; MatchCollection matchCollection = Regex.Matches(input, RegexStrings.Expression); if (matchCollection.Cast<Match>().Any((Match expressions) => expressions.Success)) { EvaluateFunctionHandler val2 = default(EvaluateFunctionHandler); foreach (Match item in matchCollection) { string value = item.Groups[0].Value; string value2 = item.Groups[1].Value; ExtendedExpression val = new ExtendedExpression(value2); EvaluateFunctionHandler obj2 = val2; if (obj2 == null) { EvaluateFunctionHandler val3 = delegate(string functionName, FunctionArgs functionArgs) { ConfigilExtensions.Extend(functionName, functionArgs, abilityData); }; EvaluateFunctionHandler val4 = val3; val2 = val3; obj2 = val4; } ((Expression)val).EvaluateFunction += obj2; if (additionalParameters != null) { Extensions.AddRange<string, object>(((Expression)val).Parameters, additionalParameters); } foreach (KeyValuePair<string, string> variable in abilityData.variables) { ((Expression)val).Parameters[variable.Key] = variable.Value; } foreach (KeyValuePair<string, object> generatedVariable in abilityData.generatedVariables) { ((Expression)val).Parameters[generatedVariable.Key] = generatedVariable.Value; } MatchCollection matchCollection2 = Regex.Matches(value2, RegexStrings.GeneratedVariable); if (matchCollection2.Cast<Match>().Any((Match variables) => variables.Success)) { foreach (Match item2 in matchCollection2) { string value3 = item2.Groups[1].Value; ((Expression)val).Parameters[value3] = ProcessGeneratedVariable(value3, abilityData); } } if (sendDebug) { Plugin.Log.LogDebug((object)("input: " + value)); } object obj3 = ((Expression)val).Evaluate(); if (type == null || matchCollection.Count > 1) { if (obj3.GetType() == typeof(bool)) { obj3 = obj3.ToString().ToLower(); } obj = obj.ToString().Replace(value, obj3.ToString()); } else { obj = obj3; } if (sendDebug) { Plugin.Log.LogDebug((object)$"output: {obj3}"); } } } return obj; } public static object ProcessGeneratedVariable(string contents, AbilityBehaviourData abilityData = null, object variable = null) { //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) List<string> list = contents.Split(new char[1] { '.' }).ToList(); object value = variable; if (variable == null && abilityData != null && !abilityData.generatedVariables.TryGetValue(list[0], out value)) { throw new Exception(list[0] + " is an invalid generated variable"); } for (int i = 1; i < list.Count; i++) { if (value == null) { return null; } if (value.GetType() == typeof(PlayableCard)) { if (list[i] == "TemporaryAbilities") { List<Ability> list2 = new List<Ability>(); foreach (List<Ability> item in ((PlayableCard)value).TemporaryMods.Select((CardModificationInfo x) => x.abilities).ToList()) { list2.AddRange(item); } value = list2; break; } if (list[i] == "AllAbilities") { List<Ability> list3 = new List<Ability>(); foreach (List<Ability> item2 in ((PlayableCard)value).TemporaryMods.Select((CardModificationInfo x) => x.abilities).ToList()) { list3.AddRange(item2); } list3.AddRange(((Card)(PlayableCard)value).Info.Abilities); value = list3; break; } } PropertyInfo property = value.GetType().GetProperty(list[i]); if ((object)property == null) { FieldInfo field = value.GetType().GetField(list[i]); if ((object)field == null) { return null; } value = field.GetValue(value); } else { if (property.GetIndexParameters().Length >= 1) { break; } value = property.GetValue(value); } } return value; } } internal static class Configs { private static ConfigEntry<bool> betaCompatibility; private static ConfigEntry<bool> verboseLogging; private static ConfigEntry<string> reloadHotkey; private static ConfigEntry<string> exportHotkey; private static ConfigFile configFile; private static Version oldConfigVersion; private static Version currentVersion; internal static bool BetaCompatibility => betaCompatibility.Value; internal static bool VerboseLogging => verboseLogging.Value; internal static string ReloadHotkey => reloadHotkey.Value; internal static string ExportHotkey => exportHotkey.Value; public static void InitializeConfigs(ConfigFile config) { configFile = config; currentVersion = new Version("2.5.3"); oldConfigVersion = GetOldConfigVersion(); betaCompatibility = config.Bind<bool>("JSONLoader", "JDLR Backwards Compatibility", true, "Set to true to enable old-style JSON files (JLDR) to be read and converted to new-style files (JLDR2)"); verboseLogging = config.Bind<bool>("JSONLoader", "Verbose Logging", false, "Set to true to see more logs on what JSONLoader is doing and what isn't working."); reloadHotkey = config.Bind<string>("Hotkeys", "Reload JLDR2 and game", "LeftShift+R", "Restarts the game and reloads all JLDR2 files."); exportHotkey = config.Bind<string>("Hotkeys", "Export all to JLDR2", "LeftControl+RightControl+X", "Exports all data in the game back to .JLDR2 files."); MigrateConfigs(); ModdedSaveManager.SaveData.SetValue("MADH.inscryption.JSONLoader", "LastLoadedVersion", (object)currentVersion.ToString()); } private static Version GetOldConfigVersion() { string value = ModdedSaveManager.SaveData.GetValue("MADH.inscryption.JSONLoader", "LastLoadedVersion"); if (string.IsNullOrEmpty(value)) { return new Version("2.5.2"); } return new Version(value); } private static void MigrateConfigs() { if (!(oldConfigVersion == currentVersion) && oldConfigVersion <= new Version("2.5.3")) { Plugin.Log.LogInfo((object)$"Migrating from {oldConfigVersion} to {currentVersion}!"); if (ReloadHotkey == (string)((ConfigEntryBase)exportHotkey).DefaultValue && ExportHotkey == (string)((ConfigEntryBase)reloadHotkey).DefaultValue) { Plugin.Log.LogInfo((object)"\tMigrating hotkeys to new defaults!"); exportHotkey.Value = (string)((ConfigEntryBase)exportHotkey).DefaultValue; reloadHotkey.Value = (string)((ConfigEntryBase)reloadHotkey).DefaultValue; configFile.Save(); } } } } [BepInPlugin("MADH.inscryption.JSONLoader", "JSONLoader", "2.5.3")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public static Plugin Instance; public const string PluginGuid = "MADH.inscryption.JSONLoader"; public const string PluginName = "JSONLoader"; public const string PluginVersion = "2.5.3"; public static string JSONLoaderDirectory = ""; public static string BepInExDirectory = ""; internal static ManualLogSource Log; private HotkeyController hotkeyController; public static string ExportDirectory => Path.Combine(JSONLoaderDirectory, "Exported"); private static List<string> GetAllJLDRFiles() { return (from a in Directory.GetFiles(Paths.PluginPath, "*.jldr*", SearchOption.AllDirectories) where (a.EndsWith(".jldr") || a.EndsWith(".jldr2")) && !a.Contains(Path.Combine(JSONLoaderDirectory, "Examples")) select a).ToList(); } private void Awake() { //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown ((BaseUnityPlugin)this).Logger.LogInfo((object)"Loading JSONLoader!"); Instance = this; Log = ((BaseUnityPlugin)this).Logger; JSONLoaderDirectory = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location); int num = ((BaseUnityPlugin)this).Info.Location.LastIndexOf("BepInEx"); if (num > 0) { BepInExDirectory = ((BaseUnityPlugin)this).Info.Location.Substring(0, num); } else { BepInExDirectory = Directory.GetParent(JSONLoaderDirectory)?.FullName ?? ""; } Harmony val = new Harmony("MADH.inscryption.JSONLoader"); val.PatchAll(); Configs.InitializeConfigs(((BaseUnityPlugin)this).Config); Log.LogWarning((object)"Note: JSONLoader now uses .jldr2 files, not .json files."); List<string> allJLDRFiles = GetAllJLDRFiles(); if (Configs.BetaCompatibility) { Log.LogWarning((object)"Note: Backwards compatibility has been enabled. Old *.jldr files will be converted to *.jldr2 automatically. This will slow down your game loading!"); JLUtils.LoadCardsFromFiles(allJLDRFiles); } LoadAll(allJLDRFiles); hotkeyController = new HotkeyController(); hotkeyController.AddHotkey(Configs.ReloadHotkey, ReloadGame); hotkeyController.AddHotkey(Configs.ExportHotkey, ExportAllToJLDR2); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Loaded JSONLoader!"); } public static void LogFields() { string text = "\n"; List<Type> list = new List<Type>(); list.Add(typeof(PlayableCard)); list.Add(typeof(CardInfo)); list.Add(typeof(CardSlot)); List<Type> list2 = list; foreach (Type item in list2) { FieldInfo[] fields = item.GetFields(); if (fields.Length != 0) { string text2 = item.Name + " fields:\n"; text += text2; text = text + new string('-', text2.Length - 1) + "\n"; FieldInfo[] array = fields; foreach (FieldInfo fieldInfo in array) { text = text + fieldInfo.Name + " (" + fieldInfo.FieldType.Name + ")\n"; } text = text + new string('-', text2.Length - 1) + "\n\n"; } PropertyInfo[] properties = item.GetProperties(); if (properties.Length != 0) { string text3 = item.Name + " properties:\n"; text += text3; text = text + new string('-', text3.Length - 1) + "\n"; PropertyInfo[] array2 = properties; foreach (PropertyInfo propertyInfo in array2) { text = text + propertyInfo.Name + " (" + propertyInfo.PropertyType.Name + ")\n"; } text = text + new string('-', text3.Length - 1) + "\n\n"; } } Log.LogInfo((object)text); } public void LoadAll(List<string> files) { TribeList.LoadAllTribes(files); SigilData.LoadAllSigils(files); CardSerializeInfo.LoadAllJLDR2(files); EncounterData.LoadAllEncounters(files); StarterDeckList.LoadAllStarterDecks(files); GramophoneData.LoadAllGramophone(files); LanguageData.LoadAllLanguages(files); MaskData.LoadAllMasks(files); LoadTalkingCards.InitAndLoad(files); } public void Update() { hotkeyController.Update(); } private void ReloadGame() { List<string> allJLDRFiles = GetAllJLDRFiles(); LoadAll(allJLDRFiles); CachedCardData.Flush(); if (SaveFile.IsAscension) { ReloadKaycees(); } if (SaveManager.SaveFile.IsPart1) { ReloadVanilla(); } } public void ExportAllToJLDR2() { TribeList.ExportAllTribes(); EncounterData.ExportAllEncounters(); StarterDeckList.ExportAllStarterDecks(); LanguageData.ExportAllLanguages(); CardSerializeInfo.ExportAllCards(); } public static void ReloadVanilla() { FrameLoopManager.Instance.SetIterationDisabled(false); MenuController.ReturnToStartScreen(); MenuController.LoadGameFromMenu(false); } public static void ReloadKaycees() { FrameLoopManager.Instance.SetIterationDisabled(false); SceneLoader.Load("Ascension_Configure"); FrameLoopManager.Instance.SetIterationDisabled(false); SaveManager.savingDisabled = false; MenuController.LoadGameFromMenu(false); } internal static void VerboseLog(string s) { if (Configs.VerboseLogging) { Log.LogInfo((object)s); } } internal static void VerboseWarning(string s) { if (Configs.VerboseLogging) { Log.LogWarning((object)s); } } internal static void VerboseError(string s) { if (Configs.VerboseLogging) { Log.LogError((object)s); } } } } namespace JLPlugin.Hotkeys { internal class HotkeyController { public class Hotkey { public KeyCode[] KeyCodes; public Action Function; } private static Action<List<KeyCode>, KeyCode> OnHotkeyPressed = delegate { }; private static KeyCode[] AllCodes = Enum.GetValues(typeof(KeyCode)).Cast<KeyCode>().ToArray(); private List<Hotkey> Hotkeys = new List<Hotkey>(); private List<KeyCode> m_pressedKeys = new List<KeyCode>(); private bool m_hotkeyActivated = false; private static KeyCode[] DeserializeKeyCodes(string hotkey) { return hotkey.Trim().Split(new char[1] { '+' }).Select(delegate(string a) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) if (!Enum.TryParse<KeyCode>(a, out KeyCode result)) { Plugin.Log.LogError((object)("Unknown hotkey: '" + a + "'. See possible hotkeys here separated by +. https://docs.unity3d.com/ScriptReference/KeyCode.html")); } return result; }) .ToArray(); } public void Update() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) KeyCode[] allCodes = AllCodes; foreach (KeyCode val in allCodes) { if (Input.GetKeyDown(val) && !m_pressedKeys.Contains(val)) { m_pressedKeys.Add(val); HotkeysChanged(val, triggerHotkey: true); } } for (int j = 0; j < m_pressedKeys.Count; j++) { KeyCode val2 = m_pressedKeys[j]; if (!Input.GetKey(val2)) { m_pressedKeys.Remove(val2); HotkeysChanged((KeyCode)0, triggerHotkey: false); m_hotkeyActivated = false; } } } private void HotkeysChanged(KeyCode pressedButton, bool triggerHotkey) { //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Invalid comparison between Unknown and I4 //IL_00ed: Unknown result type (might be due to invalid IL or missing references) if (triggerHotkey) { Hotkey hotkey = null; foreach (Hotkey hotkey2 in Hotkeys) { if (!m_hotkeyActivated && hotkey2.KeyCodes.Length != 0 && m_pressedKeys.Intersect(hotkey2.KeyCodes).Count() == hotkey2.KeyCodes.Length && (hotkey == null || hotkey.KeyCodes.Length < hotkey2.KeyCodes.Length)) { hotkey = hotkey2; } } hotkey?.Function?.Invoke(); } if ((int)pressedButton > 0) { OnHotkeyPressed?.Invoke(m_pressedKeys, pressedButton); } } public void AddHotkey(string hotkeys, Action callback) { Hotkeys.Add(new Hotkey { KeyCodes = DeserializeKeyCodes(hotkeys), Function = callback }); } } } namespace JLPlugin.V2.Data { public class CardSerializeInfo : JSONParser.IInitializable { public const string DEFAULT_MOD_PREFIX = "JSON"; private static FieldInfo[] PUBLIC_FIELD_INFOS = typeof(CardSerializeInfo).GetFields(BindingFlags.Instance | BindingFlags.Public); public string name; public string modPrefix; public string[] decals; public JSONParser.LocalizableField displayedName; public JSONParser.LocalizableField description; public int? baseAttack; public int? baseHealth; public int? bloodCost; public int? bonesCost; public int? energyCost; public string[] gemsCost; public string[] abilities; public string[] specialAbilities; public string specialStatIcon; public string[] metaCategories; public string cardComplexity; public bool? onePerDeck; public string temple; public string titleGraphic; public bool? hideAttackAndHealth; public string[] appearanceBehaviour; public string texture; public string emissionTexture; public string holoPortraitPrefab; public string animatedPortrait; public string altTexture; public string altEmissionTexture; public string pixelTexture; public string[] tribes; public string[] traits; public string evolveIntoName; public int? evolveTurns; public string defaultEvolutionName; public string tailName; public string tailLostPortrait; public string iceCubeName; public bool? flipPortraitForStrafe; public Dictionary<string, string> extensionProperties; public string filePath; public CardSerializeInfo() { Initialize(); } public void Initialize() { displayedName = new JSONParser.LocalizableField("displayedName"); description = new JSONParser.LocalizableField("description"); } public static void Apply(CardInfo cardInfo, CardSerializeInfo serializeInfo, bool toCardInfo, string cardName) { ImportExportUtils.SetID(cardName); ImportExportUtils.ApplyLocaleField("displayedName", ref serializeInfo.displayedName, ref cardInfo.displayedName, toCardInfo); ImportExportUtils.ApplyLocaleField("description", ref serializeInfo.description, ref cardInfo.description, toCardInfo); ImportExportUtils.ApplyProperty(() => ((Object)cardInfo).name, delegate(string a) { ((Object)cardInfo).name = a; }, ref serializeInfo.name, toCardInfo, "Cards", "name"); ImportExportUtils.ApplyValue(ref cardInfo.baseAttack, ref serializeInfo.baseAttack, toCardInfo, "Cards", "baseAttack"); ImportExportUtils.ApplyValue(ref cardInfo.baseHealth, ref serializeInfo.baseHealth, toCardInfo, "Cards", "baseHealth"); ImportExportUtils.ApplyValue(ref cardInfo.cost, ref serializeInfo.bloodCost, toCardInfo, "Cards", "cost"); ImportExportUtils.ApplyValue(ref cardInfo.bonesCost, ref serializeInfo.bonesCost, toCardInfo, "Cards", "bonesCost"); ImportExportUtils.ApplyValue(ref cardInfo.energyCost, ref serializeInfo.energyCost, toCardInfo, "Cards", "energyCost"); ImportExportUtils.ApplyValue(ref cardInfo.gemsCost, ref serializeInfo.gemsCost, toCardInfo, "Cards", "gemsCost"); ImportExportUtils.ApplyValue(ref cardInfo.abilities, ref serializeInfo.abilities, toCardInfo, "Cards", "abilities"); ImportExportUtils.ApplyValue(ref cardInfo.specialAbilities, ref serializeInfo.specialAbilities, toCardInfo, "Cards", "specialAbilities"); ImportExportUtils.ApplyValue(ref cardInfo.specialStatIcon, ref serializeInfo.specialStatIcon, toCardInfo, "Cards", "specialStatIcon"); ImportExportUtils.ApplyValue(ref cardInfo.metaCategories, ref serializeInfo.metaCategories, toCardInfo, "Cards", "metaCategories"); ImportExportUtils.ApplyValue(ref cardInfo.cardComplexity, ref serializeInfo.cardComplexity, toCardInfo, "Cards", "cardComplexity"); ImportExportUtils.ApplyValue(ref cardInfo.onePerDeck, ref serializeInfo.onePerDeck, toCardInfo, "Cards", "onePerDeck"); ImportExportUtils.ApplyValue(ref cardInfo.temple, ref serializeInfo.temple, toCardInfo, "Cards", "temple"); ImportExportUtils.ApplyValue(ref cardInfo.titleGraphic, ref serializeInfo.titleGraphic, toCardInfo, "Cards", "titleGraphic"); ImportExportUtils.ApplyValue(ref cardInfo.hideAttackAndHealth, ref serializeInfo.hideAttackAndHealth, toCardInfo, "Cards", "hideAttackAndHealth"); ImportExportUtils.ApplyValue(ref cardInfo.appearanceBehaviour, ref serializeInfo.appearanceBehaviour, toCardInfo, "Cards", "appearanceBehaviour"); ImportExportUtils.ApplyValue(ref cardInfo.tribes, ref serializeInfo.tribes, toCardInfo, "Cards", "tribes"); ImportExportUtils.ApplyValue(ref cardInfo.traits, ref serializeInfo.traits, toCardInfo, "Cards", "traits"); ImportExportUtils.ApplyValue(ref cardInfo.defaultEvolutionName, ref serializeInfo.defaultEvolutionName, toCardInfo, "Cards", "defaultEvolutionName"); ImportExportUtils.ApplyValue(ref cardInfo.flipPortraitForStrafe, ref serializeInfo.flipPortraitForStrafe, toCardInfo, "Cards", "flipPortraitForStrafe"); ImportExportUtils.ApplyValue(ref cardInfo.decals, ref serializeInfo.decals, toCardInfo, "Cards", "decals"); ImportExportUtils.ApplyValue(ref cardInfo.portraitTex, ref serializeInfo.texture, toCardInfo, "Cards", "texture"); ImportExportUtils.ApplyValue(ref cardInfo.alternatePortrait, ref serializeInfo.altTexture, toCardInfo, "Cards", "altTexture"); ImportExportUtils.ApplyValue(ref cardInfo.pixelPortrait, ref serializeInfo.pixelTexture, toCardInfo, "Cards", "pixelTexture"); Sprite a2 = CardExtensions.GetEmissivePortrait(cardInfo); Sprite a3 = CardExtensions.GetEmissiveAltPortrait(cardInfo); ImportExportUtils.ApplyValue(ref a2, ref serializeInfo.emissionTexture, toCardInfo, "Cards", "emissionTexture"); ImportExportUtils.ApplyValue(ref a3, ref serializeInfo.altEmissionTexture, toCardInfo, "Cards", "altEmissionTexture"); if ((Object)(object)cardInfo.portraitTex != (Object)null && (Object)(object)a2 != (Object)null) { CardExtensions.SetEmissivePortrait(cardInfo, a2); } if ((Object)(object)cardInfo.alternatePortrait != (Object)null && (Object)(object)a3 != (Object)null) { CardExtensions.SetEmissiveAltPortrait(cardInfo, a3); } if (toCardInfo) { if (!string.IsNullOrEmpty(serializeInfo.evolveIntoName)) { CardExtensions.SetEvolve(cardInfo, serializeInfo.evolveIntoName, (!serializeInfo.evolveTurns.HasValue) ? 1 : serializeInfo.evolveTurns.Value, (IEnumerable<CardModificationInfo>)null); } } else if (cardInfo.evolveParams != null) { CardInfo evolution = cardInfo.evolveParams.evolution; serializeInfo.evolveIntoName = ((evolution != null) ? ((Object)evolution).name : null); serializeInfo.evolveTurns = cardInfo.evolveParams.turnsToEvolve; } if (toCardInfo) { if (!string.IsNullOrEmpty(serializeInfo.tailName)) { CardExtensions.SetTail(cardInfo, serializeInfo.tailName, serializeInfo.tailLostPortrait, (IEnumerable<CardModificationInfo>)null); } } else if (cardInfo.tailParams != null) { CardInfo tail = cardInfo.tailParams.tail; serializeInfo.tailName = ((tail != null) ? ((Object)tail).name : null); ImportExportUtils.ApplyValue(ref cardInfo.tailParams.tailLostPortrait, ref serializeInfo.tailLostPortrait, toCardInfo, "Cards", "tailLostPortrait"); } if (toCardInfo) { if (!string.IsNullOrEmpty(serializeInfo.iceCubeName)) { CardExtensions.SetIceCube(cardInfo, serializeInfo.iceCubeName, (IEnumerable<CardModificationInfo>)null); } } else if (cardInfo.iceCubeParams != null) { serializeInfo.iceCubeName = ((Object)cardInfo.iceCubeParams.creatureWithin).name; } if (toCardInfo) { if (serializeInfo.extensionProperties != null) { foreach (KeyValuePair<string, string> extensionProperty in serializeInfo.extensionProperties) { CardExtensions.SetExtendedProperty(cardInfo, extensionProperty.Key, (object)extensionProperty.Value); } } CardExtensions.SetExtendedProperty(cardInfo, "JSONFilePath", (object)serializeInfo.filePath); } else { Dictionary<string, string> cardExtensionTable = CardManager.GetCardExtensionTable(cardInfo); if (cardExtensionTable != null && cardExtensionTable.Count > 0) { foreach (KeyValuePair<string, string> item in cardExtensionTable) { if (item.Key == "ModPrefix") { serializeInfo.modPrefix = item.Value; } } serializeInfo.extensionProperties = cardExtensionTable; } } if (toCardInfo) { if (!string.IsNullOrEmpty(serializeInfo.holoPortraitPrefab)) { cardInfo.holoPortraitPrefab = Resources.Load<GameObject>(serializeInfo.holoPortraitPrefab); } } else if ((Object)(object)cardInfo.holoPortraitPrefab != (Object)null) { serializeInfo.holoPortraitPrefab = ((object)cardInfo.holoPortraitPrefab).ToString(); } if (toCardInfo) { if (!string.IsNullOrEmpty(serializeInfo.animatedPortrait)) { cardInfo.animatedPortrait = Resources.Load<GameObject>(serializeInfo.animatedPortrait); } } else if ((Object)(object)cardInfo.animatedPortrait != (Object)null) { serializeInfo.holoPortraitPrefab = ((object)cardInfo.animatedPortrait).ToString(); } } private void ApplyLocaleField(string field, JSONParser.LocalizableField rows, out string cardInfoEnglishField) { //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Invalid comparison between Unknown and I4 //IL_00fd: Unknown result type (might be due to invalid IL or missing references) if (rows.rows.TryGetValue(rows.englishFieldName, out var value)) { cardInfoEnglishField = value; } else { if (rows.rows.Count <= 0) { cardInfoEnglishField = null; return; } cardInfoEnglishField = rows.rows.First().Value; } foreach (KeyValuePair<string, string> row in rows.rows) { if (row.Key == rows.englishFieldName) { continue; } int num = row.Key.LastIndexOf("_", StringComparison.Ordinal); if (num >= 0) { int length = row.Key.Length - num - 1; string text = row.Key.Substring(num + 1, length); Language val = LocalizationManager.CodeToLanguage(text); if ((int)val != 12) { LocalizationManager.Translate("MADH.inscryption.JSONLoader", (string)null, cardInfoEnglishField, row.Value, val); } else { Plugin.Log.LogDebug((object)$"Unknown language code {text} for card {displayedName} in field {field}"); } } } } internal void Apply(bool UpdateCard = false) { if (string.IsNullOrEmpty(name)) { throw new InvalidOperationException("Card cannot have an empty name!"); } CardInfo val = (CardInfo)(UpdateCard ? ((object)ScriptableObjectLoader<CardInfo>.AllData.Find((CardInfo x) => ((Object)x).name == name)) : ((object)CardExtensions.CardByName((IEnumerable<CardInfo>)CardManager.BaseGameCards, name))); if ((Object)(object)val != (Object)null) { Plugin.VerboseLog("Modifying " + name + " using " + ToJSON()); Apply(val, this, toCardInfo: true, ((Object)val).name); return; } Plugin.VerboseLog("New Card " + name + " using " + ToJSON()); string text = modPrefix ?? "JSON"; CardInfo val2 = ScriptableObject.CreateInstance<CardInfo>(); ((Object)val2).name = (name.StartsWith(text + "_") ? name : (text + "_" + name)); Apply(val2, this, toCardInfo: true, ((Object)val2).name); CardManager.Add(text, val2); } internal void Remove() { if (string.IsNullOrEmpty(name)) { throw new InvalidOperationException("Card cannot have an empty name!"); } CardInfo val = CardExtensions.CardByName((IEnumerable<CardInfo>)CardManager.BaseGameCards, name); if ((Object)(object)val != (Object)null) { throw new InvalidOperationException("Base game cards cannot be removed!"); } ObservableCollection<CardInfo> source = (ObservableCollection<CardInfo>)typeof(CardManager).GetField("NewCards", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null); CardInfo val2 = ((IEnumerable<CardInfo>)source).FirstOrDefault((Func<CardInfo, bool>)((CardInfo x) => ((Object)x).name == name)); if ((Object)(object)val2 != (Object)null) { CardManager.Remove(val2); } else { Plugin.Log.LogWarning((object)("Cannot remove " + name)); } } internal CardInfo ToCardInfo() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown if (string.IsNullOrEmpty(name)) { throw new InvalidOperationException("Card cannot have an empty name!"); } CardInfo val = (CardInfo)CardExtensions.CardByName((IEnumerable<CardInfo>)CardManager.BaseGameCards, name).Clone(); if ((Object)(object)val != (Object)null) { Plugin.Log.LogDebug((object)("Modifying " + name + " using " + ToJSON())); Apply(val, this, toCardInfo: true, name); return val; } string text = modPrefix ?? "JSON"; CardInfo val2 = ScriptableObject.CreateInstance<CardInfo>(); ((Object)val2).name = (name.StartsWith(text + "_") ? name : (text + "_" + name)); Apply(val2, this, toCardInfo: true, name); return val2; } public string WriteToFile(string filename, bool overwrite = true) { Plugin.Log.LogDebug((object)("Writing card " + (name ?? "Unnamed") + " to " + filename)); if (!filename.EndsWith("2")) { filename += "2"; } if (overwrite || !File.Exists(filename)) { File.WriteAllText(filename, ToJSON()); } return filename; } private string ToJSON() { string text = "{\n"; FieldInfo[] pUBLIC_FIELD_INFOS = PUBLIC_FIELD_INFOS; foreach (FieldInfo fieldInfo in pUBLIC_FIELD_INFOS) { if (fieldInfo.FieldType == typeof(string)) { string text2 = (string)fieldInfo.GetValue(this); if (!string.IsNullOrEmpty(text2)) { text = text + "\t\"" + fieldInfo.Name + "\": \"" + text2 + "\",\n"; } } else if (fieldInfo.FieldType == typeof(string[])) { string[] array = (string[])fieldInfo.GetValue(this); if (array != null && array.Length != 0) { text = text + "\t\"" + fieldInfo.Name + "\": [" + string.Join(",", array.Select((string v) => "\"" + v + "\"")) + "],\n"; } } else if (fieldInfo.FieldType == typeof(int?)) { int? num = (int?)fieldInfo.GetValue(this); if (num.HasValue) { text += $"\t\"{fieldInfo.Name}\": {num.Value},\n"; } } else if (fieldInfo.FieldType == typeof(bool?)) { bool? flag = (bool?)fieldInfo.GetValue(this); if (flag.HasValue) { text = text + "\t\"" + fieldInfo.Name + "\": " + (flag.Value ? "true" : "false") + ",\n"; } } else if (fieldInfo.FieldType == typeof(Dictionary<string, string>)) { Dictionary<string, string> dictionary = (Dictionary<string, string>)fieldInfo.GetValue(this); if (dictionary == null || dictionary.Count <= 0) { continue; } text = text + "\t\"" + fieldInfo.Name + "\": {\n"; foreach (KeyValuePair<string, string> item in dictionary.Where((KeyValuePair<string, string> kvp) => !string.IsNullOrEmpty(kvp.Key) && !string.IsNullOrEmpty(kvp.Value))) { text = text + "\t\t\"" + item.Key + "\": \"" + item.Value + "\",\n"; } text += "\t},\n"; } else { if (!fieldInfo.FieldType.IsAssignableFrom(typeof(JSONParser.IFlexibleField))) { continue; } object value = fieldInfo.GetValue(this); if (value != null) { text += ((JSONParser.IFlexibleField)value).ToJSON(); } Dictionary<string, string> rows = ((JSONParser.LocalizableField)fieldInfo.GetValue(this)).rows; foreach (KeyValuePair<string, string> item2 in rows) { text = text + "\t\"" + item2.Key + "\": " + item2.Value + ",\n"; } } } return text.TrimEnd('\n', ',') + "\n}"; } public static void LoadAllJLDR2(List<string> files) { for (int i = 0; i < files.Count; i++) { string text = files[i]; string text2 = text.Substring(text.LastIndexOf(Path.DirectorySeparatorChar) + 1); if (!text2.EndsWith("_encounter.jldr2") && !text2.EndsWith("_tribe.jldr2") && !text2.EndsWith("_tribes.jldr2") && !text2.EndsWith("_sigil.jldr2") && !text2.EndsWith("_deck.jldr2") && !text2.EndsWith("_gram.jldr2") && !text2.EndsWith("_language.jldr2") && !text2.EndsWith("_mask.jldr2") && !text2.EndsWith("_talk.jldr2")) { files.RemoveAt(i--); Plugin.VerboseLog("Loading JLDR2 Card " + text2); ImportExportUtils.SetDebugPath(text); try { CardSerializeInfo cardSerializeInfo = File.ReadAllText(text).FromJson<CardSerializeInfo>(); cardSerializeInfo.filePath = text; cardSerializeInfo.Apply(); Plugin.VerboseLog("Loaded JSON card " + cardSerializeInfo.name); } catch (Exception ex) { Plugin.Log.LogError((object)("Failed to load " + text2 + ": " + ex.Message)); Plugin.Log.LogError((object)ex); } } } } public static void ExportAllCards() { Plugin.Log.LogInfo((object)$"Exporting {CardManager.AllCardsCopy.Count} cards."); foreach (CardInfo item in CardManager.AllCardsCopy) { string text = Path.Combine(Plugin.ExportDirectory, "Cards", ((Object)item).name + ".jldr2"); ImportExportUtils.SetDebugPath(text); CardSerializeInfo cardSerializeInfo = new CardSerializeInfo(); Apply(item, cardSerializeInfo, toCardInfo: false, ((Object)item).name); string directoryName = Path.GetDirectoryName(text); if (!Directory.Exists(directoryName)) { Directory.CreateDirectory(directoryName); } cardSerializeInfo.WriteToFile(text); } } } } namespace JLPlugin.Utils { public static class CDUtils { public static void CheckValidFields(List<string> fields) { foreach (string field in fields) { if (string.IsNullOrEmpty(field)) { Plugin.Log.LogError((object)(ErrorUtil.Card + " - fieldsToEdit cannot contain an empty string")); } else if (!Dicts.CardDataFields.Contains(field)) { Plugin.Log.LogError((object)(ErrorUtil.Card + " - \"" + field + "\" is an invalid field name")); } } } public static T Assign<T>(string data, string field, Dictionary<string, T> dict) { ErrorUtil.Field = field; if (string.IsNullOrEmpty(data)) { return default(T); } if (!dict.ContainsKey(data)) { ErrorUtil.Log(data); return default(T); } return dict[data]; } public static List<T> Assign<T>(List<string> list, string field, Dictionary<string, T> dict) { ErrorUtil.Field = field; if (list == null || list.Count == 0) { return null; } List<T> list2 = new List<T>(); foreach (string item in list) { if (!dict.ContainsKey(item)) { ErrorUtil.Log(item); } else { list2.Add(dict[item]); } } if (list2.Count == 0) { return null; } return list2; } public static Texture2D Assign(string image, string field) { ErrorUtil.Field = field; if (string.IsNullOrEmpty(image)) { return null; } if (!image.EndsWith(".png")) { ErrorUtil.Log(image, ", it must be a .png"); return null; } return JLUtils.LoadTexture2D(image); } public static List<Texture> Assign(List<string> list, string field) { ErrorUtil.Field = field; if (list == null || list.Count == 0) { return null; } List<Texture> list2 = new List<Texture>(); foreach (string item in list) { if (!string.IsNullOrEmpty(item)) { if (!item.EndsWith(".png")) { ErrorUtil.Log(item, ", it must be a .png"); } else { list2.Add((Texture)(object)JLUtils.LoadTexture2D(item)); } } } if (list2.Count == 0) { return null; } return list2; } } public static class Dicts { public static readonly Dictionary<string, CardMetaCategory> MetaCategory = Enum.GetValues(typeof(CardMetaCategory)).Cast<CardMetaCategory>().ToDictionary((CardMetaCategory t) => ((object)(CardMetaCategory)(ref t)).ToString(), (CardMetaCategory t) => t); public static readonly Dictionary<string, CardComplexity> Complexity = Enum.GetValues(typeof(CardComplexity)).Cast<CardComplexity>().ToDictionary((CardComplexity t) => ((object)(CardComplexity)(ref t)).ToString(), (CardComplexity t) => t); public static readonly Dictionary<string, CardTemple> Temple = Enum.GetValues(typeof(CardTemple)).Cast<CardTemple>().ToDictionary((CardTemple t) => ((object)(CardTemple)(ref t)).ToString(), (CardTemple t) => t); public static readonly Dictionary<string, GemType> GemColour = Enum.GetValues(typeof(GemType)).Cast<GemType>().ToDictionary((GemType t) => ((object)(GemType)(ref t)).ToString(), (GemType t) => t); public static readonly Dictionary<string, SpecialStatIcon> StatIcon = Enum.GetValues(typeof(SpecialStatIcon)).Cast<SpecialStatIcon>().ToDictionary((SpecialStatIcon t) => ((object)(SpecialStatIcon)(ref t)).ToString(), (SpecialStatIcon t) => t); public static readonly Dictionary<string, Tribe> Tribes = Enum.GetValues(typeof(Tribe)).Cast<Tribe>().ToDictionary((Tribe t) => ((object)(Tribe)(ref t)).ToString(), (Tribe t) => t); public static readonly Dictionary<string, Trait> Traits = Enum.GetValues(typeof(Trait)).Cast<Trait>().ToDictionary((Trait t) => ((object)(Trait)(ref t)).ToString(), (Trait t) => t); public static readonly Dictionary<string, SpecialTriggeredAbility> SpecialAbilities = Enum.GetValues(typeof(SpecialTriggeredAbility)).Cast<SpecialTriggeredAbility>().ToDictionary((SpecialTriggeredAbility t) => ((object)(SpecialTriggeredAbility)(ref t)).ToString(), (SpecialTriggeredAbility t) => t); public static readonly Dictionary<string, Ability> Abilities = Enum.GetValues(typeof(Ability)).Cast<Ability>().ToDictionary((Ability t) => ((object)(Ability)(ref t)).ToString(), (Ability t) => t); public static readonly Dictionary<string, Appearance> AppearanceBehaviour = Enum.GetValues(typeof(Appearance)).Cast<Appearance>().ToDictionary((Appearance t) => ((object)(Appearance)(ref t)).ToString(), (Appearance t) => t); public static readonly List<string> CardDataFields = (from elem in typeof(CardData).GetFields() select elem.Name).ToList(); } [StructLayout(LayoutKind.Sequential, Size = 1)] public struct ErrorUtil { public static string Card { get; set; } public static string Field { get; set; } public static string Message { get; set; } public static void Log(string Data, string addition = "") { Plugin.Log.LogError((object)string.Format(Message + addition, Card, Field, Data)); } public static void Clear() { Card = null; Field = null; Message = null; } } [Obsolete] public static class IDUtils { public static EvolveIdentifier GenerateEvolveIdentifier(CardData card) { //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Expected O, but got Unknown if (card.evolution == null) { return null; } if (string.IsNullOrEmpty(card.evolution.name)) { Plugin.Log.LogError((object)(card.name + " - evolution must have a name")); return null; } return new EvolveIdentifier(card.evolution.name, (card.evolution.turnsToEvolve == 0) ? 1 : card.evolution.turnsToEvolve, (CardModificationInfo)null); } public static TailIdentifier GenerateTailIdentifier(CardData card) { //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Expected O, but got Unknown if (card.tail == null) { return null; } if (string.IsNullOrEmpty(card.tail.name)) { Plugin.Log.LogError((object)(card.name + " - tail must have a name")); return null; } return new TailIdentifier(card.tail.name, CDUtils.Assign(card.tail.tailLostPortrait, "tailLostPortrait"), (CardModificationInfo)null); } public static IceCubeIdentifier GenerateIceCubeIdentifier(CardData card) { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown if (card.iceCube == null) { return null; } if (string.IsNullOrEmpty(card.iceCube.creatureWithin)) { Plugin.Log.LogError((object)(card.name + " - iceCube must have a creatureWithin")); return null; } return new IceCubeIdentifier(card.iceCube.creatureWithin, (CardModificationInfo)null); } public static List<AbilityIdentifier> GenerateAbilityIdentifiers(List<AbilityData> list) { return list?.Select((AbilityData elem) => AbilityIdentifier.GetAbilityIdentifier(elem.GUID, elem.name)).ToList(); } public static List<SpecialAbilityIdentifier> GenerateSpecialAbilityIdentifiers(List<SpecialAbilityData> list) { return list?.Select((SpecialAbilityData elem) => SpecialAbilityIdentifier.GetID(elem.GUID, elem.name)).ToList(); } } [Obsolete] public static class JLUtils { public static void LoadCardsFromFiles(List<string> files) { Dictionary<string, CardData> dictionary = new Dictionary<string, CardData>(); for (int num = files.Count - 1; num >= 0; num--) { string text = files[num]; string text2 = text.Substring(text.LastIndexOf(Path.DirectorySeparatorChar) + 1); if (text.EndsWith(".jldr")) { files.RemoveAt(num); CardData cardData = File.ReadAllText(text).FromJson<CardData>(); if (cardData == null) { Plugin.Log.LogWarning((object)("Failed to load " + text2)); } else { dictionary.Add(text, cardData); } } } List<CardData> allKnownCards = dictionary.Values.ToList(); foreach (KeyValuePair<string, CardData> item2 in dictionary) { string key = item2.Key; CardData value = item2.Value; CardSerializeInfo cardSerializeInfo = value.ConvertToV2(allKnownCards); if (cardSerializeInfo != null) { string item = cardSerializeInfo.WriteToFile(key, overwrite: false); files.Add(item); } else { Plugin.Log.LogError((object)(key + " is a JLDR without a valid name")); } } } public static Texture2D LoadTexture2D(string image) { //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Expected O, but got Unknown string[] files = Directory.GetFiles(Paths.PluginPath, image, SearchOption.AllDirectories); if (files.Length == 0) { Plugin.Log.LogError((object)(ErrorUtil.Card + " - Couldn't find texture \"" + image + "\" to load into " + ErrorUtil.Field)); return null; } if (files.Length > 1) { Plugin.Log.LogError((object)(ErrorUtil.Card + " - Couldn't load \"" + image + "\" into " + ErrorUtil.Field + ", more than one file with that name found in the plugins folder")); return null; } byte[] array = File.ReadAllBytes(files[0]); Texture2D val = new Texture2D(2, 2); if (!ImageConversion.LoadImage(val, array)) { Plugin.Log.LogError((object)(ErrorUtil.Card + " - Couldn't load \"" + image + "\" into " + ErrorUtil.Field)); return null; } return val; } } } namespace JLPlugin.SigilCode { public abstract class ConfigurableBase : ActivatedAbilityBehaviour { public SigilData abilityData = new SigilData(); public Ability ability = (Ability)0; public override Ability Ability => ability; public PlayableCard PlayableCard => ((Component)this).GetComponent<PlayableCard>(); } public abstract class ConfigurableSpecialBase : SpecialCardBehaviour { public SigilData abilityData = new SigilData(); public SpecialTriggeredAbility specialAbility = (SpecialTriggeredAbility)0; } [HarmonyPatch(typeof(CardTriggerHandler), "AddAbility", new Type[] { typeof(Ability) })] public class Add_Ability_patch { [HarmonyPrefix] public static bool Prefix(Ability ability, CardTriggerHandler __instance) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) if (!SigilDicts.ArgumentList.ContainsKey(ability)) { return true; } Type item = SigilDicts.ArgumentList[ability].Item1; if ((!__instance.triggeredAbilities.Exists((Tuple<Ability, AbilityBehaviour> x) => x.Item1 == ability) || AbilitiesUtil.GetInfo(ability).canStack) && !AbilitiesUtil.GetInfo(ability).passive) { ConfigurableBase configurableBase = ((Component)__instance).gameObject.AddComponent(item) as ConfigurableBase; configurableBase.abilityData = SigilData.GetAbilityArguments(ability); configurableBase.ability = ability; __instance.triggeredAbilities.Add(new Tuple<Ability, AbilityBehaviour>(ability, (AbilityBehaviour)(object)configurableBase)); } return false; } } [HarmonyPatch(typeof(CardTriggerHandler), "AddAbility", new Type[] { typeof(SpecialTriggeredAbility) })] public class Add__Special_Ability_patch { [HarmonyPrefix] public static bool Prefix(SpecialTriggeredAbility ability, CardTriggerHandler __instance) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) if (!SigilDicts.SpecialArgumentList.ContainsKey(ability)) { return true; } Type item = SigilDicts.SpecialArgumentList[ability].Item1; if (!__instance.specialAbilities.Exists((Tuple<SpecialTriggeredAbility, SpecialCardBehaviour> x) => x.Item1 == ability)) { ConfigurableSpecialBase configurableSpecialBase = ((Component)__instance).gameObject.AddComponent(item) as ConfigurableSpecialBase; configurableSpecialBase.abilityData = SigilData.GetAbilityArguments(ability); __instance.specialAbilities.Add(new Tuple<SpecialTriggeredAbility, SpecialCardBehaviour>(ability, (SpecialCardBehaviour)(object)configurableSpecialBase)); } return false; } } [HarmonyPatch(/*Could not decode attribute arguments.*/)] public class GetOpposingSlots_patch { [HarmonyPostfix] public static void Postfix(PlayableCard __instance, ref List<CardSlot> __result) { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) if (!__instance.OnBoard) { return; } foreach (CardSlot item in Singleton<BoardManager>.Instance.AllSlotsCopy) { if ((Object)(object)item.Card == (Object)null) { continue; } foreach (Ability triggeredAbility in item.Card.GetTriggeredAbilities()) { if (!SigilDicts.ArgumentList.ContainsKey(triggeredAbility) || !item.Card.HasAbility(triggeredAbility)) { continue; } foreach (AbilityBehaviourData item2 in SigilData.GetAbilityArguments(triggeredAbility).abilityBehaviour.Where((AbilityBehaviourData x) => x?.extraAttacks != null)) { foreach (extraAttacks extraAttack in item2.extraAttacks) { SigilData.UpdateVariables(item2, item.Card); item2.generatedVariables["TriggerCard"] = __instance; if (SigilData.ConvertArgument(extraAttack.runOnCondition, item2) == "false") { continue; } CardSlot val = slotData.GetSlot(extraAttack.attackingSlot, item2); if (extraAttack.attackingSlot == null) { val = item; } if (!((Object)(object)val == (Object)(object)__instance.slot)) { continue; } __result.Remove(__instance.Slot.opposingSlot); foreach (slotData item3 in extraAttack.slotsToAttack) { CardSlot slot = slotData.GetSlot(item3, item2); if ((Object)(object)slot != (Object)null) { __result.Add(slot); } } } } } } } } [HarmonyPatch] public class OnBoardCleanup_patch { [HarmonyPrefix] [HarmonyPatch(typeof(TurnManager), "CleanupPhase")] public static void CleanupPhase() { //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) foreach (CardSlot item in Singleton<BoardManager>.Instance.AllSlotsCopy) { if ((Object)(object)item.Card == (Object)null) { continue; } foreach (Ability triggeredAbility in item.Card.GetTriggeredAbilities()) { if (SigilDicts.ArgumentList.ContainsKey(triggeredAbility)) { ((Card)item.Card).Info.temporaryDecals.Clear(); ((Card)item.Card).RenderCard(); } } foreach (SpecialTriggeredAbility specialAbility in ((Card)item.Card).Info.SpecialAbilities) { if (SigilDicts.SpecialArgumentList.ContainsKey(specialAbility)) { ((Card)item.Card).Info.temporaryDecals.Clear(); ((Card)item.Card).RenderCard(); } } } } } [HarmonyPatch(typeof(PlayableCard), "GetPassiveAttackBuffs")] public class PassiveAttackBuffs_patch { [HarmonyPostfix] public static void Postfix(ref int __result, ref PlayableCard __instance) { //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) if (!__instance.OnBoard) { return; } foreach (CardSlot item in Singleton<BoardManager>.Instance.AllSlotsCopy) { if ((Object)(object)item.Card == (Object)null) { continue; } foreach (Ability triggeredAbility in item.Card.GetTriggeredAbilities()) { if (SigilDicts.ArgumentList.ContainsKey(triggeredAbility)) { ApplyBuffs(SigilData.GetAbilityArguments(triggeredAbility).abilityBehaviour, item, ref __result, ref __instance); } } foreach (SpecialTriggeredAbility specialAbility in ((Card)item.Card).Info.SpecialAbilities) { if (SigilDicts.SpecialArgumentList.ContainsKey(specialAbility)) { ApplyBuffs(SigilData.GetAbilityArguments(specialAbility).abilityBehaviour, item, ref __result, ref __instance); } } } } public static void ApplyBuffs(List<AbilityBehaviourData> AbilityBehaviourList, CardSlot slot, ref int __result, ref PlayableCard __instance) { foreach (AbilityBehaviourData item in AbilityBehaviourList.Where((AbilityBehaviourData x) => x.trigger?.triggerType == "Passive")) { if (item.buffCards == null) { continue; } foreach (buffCards buffCard in item.buffCards) { SigilData.UpdateVariables(item, slot.Card); if (SigilData.ConvertArgument(buffCard.runOnCondition, item, sendDebug: false) == "false") { continue; } CardSlot val = slotData.GetSlot(buffCard.slot, item, sendDebug: false); if (buffCard.slot == null) { val = slot; } if (!((Object)(object)val == (Object)(object)__instance.slot)) { continue; } if (!string.IsNullOrEmpty(buffCard.addStats)) { string text = SigilData.ConvertArgument(buffCard.addStats.Split(new char[1] { '/' })[0], item, sendDebug: false); if (text != "?") { __result += int.Parse(text); } } if (!string.IsNullOrEmpty(buffCard.setStats)) { string text2 = SigilData.ConvertArgument(buffCard.setStats.Split(new char[1] { '/' })[0], item, sendDebug: false); if (text2 != "?") { __result = int.Parse(text2) - ((Card)slot.Card).Info.Attack; } } } } } } [HarmonyPatch(typeof(PlayableCard), "GetPassiveHealthBuffs")] public class PassiveHealthBuffs_patch { [HarmonyPostfix] public static void Postfix(ref int __result, ref PlayableCard __instance) { //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) if (!__instance.OnBoard) { return; } foreach (CardSlot item in Singleton<BoardManager>.Instance.AllSlotsCopy) { if ((Object)(object)item.Card == (Object)null) { continue; } foreach (Ability triggeredAbility in item.Card.GetTriggeredAbilities()) { if (SigilDicts.ArgumentList.ContainsKey(triggeredAbility)) { ApplyBuffs(SigilData.GetAbilityArguments(triggeredAbility).abilityBehaviour, item, ref __result, ref __instance); } } foreach (SpecialTriggeredAbility specialAbility in ((Card)item.Card).Info.SpecialAbilities) { if (SigilDicts.SpecialArgumentList.ContainsKey(specialAbility)) { ApplyBuffs(SigilData.GetAbilityArguments(specialAbility).abilityBehaviour, item, ref __result, ref __instance); } } } } public static void ApplyBuffs(List<AbilityBehaviourData> AbilityBehaviourList, CardSlot slot, ref int __result, ref PlayableCard __instance) { foreach (AbilityBehaviourData item in AbilityBehaviourList.Where((AbilityBehaviourData x) => x.trigger?.triggerType == "Passive")) { if (item.buffCards == null) { continue; } foreach (buffCards buffCard in item.buffCards) { SigilData.UpdateVariables(item, slot.Card); if (SigilData.ConvertArgument(buffCard.runOnCondition, item, sendDebug: false) == "false") { continue; } CardSlot val = slotData.GetSlot(buffCard.slot, item, sendDebug: false); if (buffCard.slot == null) { val = slot; } if (!((Object)(object)val == (Object)(object)__instance.slot)) { continue; } if (!string.IsNullOrEmpty(buffCard.addStats)) { string text = SigilData.ConvertArgument(buffCard.addStats.Split(new char[1] { '/' })[1], item, sendDebug: false); if (text != "?") { __result += int.Parse(text); } } if (!string.IsNullOrEmpty(buffCard.setStats)) { string text2 = SigilData.ConvertArgument(buffCard.setStats.Split(new char[1] { '/' })[1], item, sendDebug: false); if (text2 != "?") { __result = int.Parse(text2) - ((Card)slot.Card).Info.Health; } } if (((Card)__instance).Info.Health + __result <= 0) { ((MonoBehaviour)Singleton<BoardManager>.Instance).StartCoroutine(__instance.Die(false, (PlayableCard)null, true)); } } } } } public static class CachedCardData { private static Dictionary<string, CardSerializeInfo> CardDataCache = new Dictionary<string, CardSerializeInfo>(); public static CardSerializeInfo? Get(string filePath) { if (filePath == null) { return null; } if (!CardDataCache.ContainsKey(filePath)) { return null; } return CardDataCache[filePath]; } public static void Add(string filePath, CardSerializeInfo data) { CardDataCache[filePath] = data; } public static bool Contains(string? filePath) { return filePath != null && CardDataCache.ContainsKey(filePath); } public static void Flush() { CardDataCache.Clear(); } } public class ConfigurableMain : ConfigurableBase, IOnBellRung, IOnOtherCardAddedToHand, IOnCardAssignedToSlotContext, IOnCardDealtDamageDirectly { public override int BonesCost => (abilityData.activationCost?.bonesCost).GetValueOrDefault(); public override int EnergyCost => (abilityData.activationCost?.energyCost).GetValueOrDefault(); public override int Priority => abilityData.priority.GetValueOrDefault(); public override bool CanActivate() { AbilityBehaviourData abilityBehaviourData = abilityData.abilityBehaviour.Where((AbilityBehaviourData x) => x.trigger?.triggerType == "OnActivate").ToList()[0]; if (abilityBehaviourData == null) { return false; } SigilData.UpdateVariables(abilityBehaviourData, base.PlayableCard); return (SigilData.ConvertArgument(abilityBehaviourData.trigger?.activatesForCardsWithCondition, abilityBehaviourData) ?? "true") == "true"; } public override IEnumerator Activate() { int BloodCost = (abilityData.activationCost?.bloodCost).GetValueOrDefault(); if (BloodCost > 0) { List<CardSlot> occupiedSlots = Singleton<BoardManager>.Instance.PlayerSlotsCopy.FindAll((CardSlot x) => (Object)(object)x.Card != (Object)null && (Object)(object)x.Card != (Object)(object)((AbilityBehaviour)this).Card); if (!((Object)(object)Singleton<BoardManager>.Instance != (Object)null) || Singleton<BoardManager>.Instance.AvailableSacrificeValueInSlots(occupiedSlots) < BloodCost) { ((Card)base.PlayableCard).Anim.LightNegationEffect(); AudioController.Instance.PlaySound2D("toneless_negate", (MixerGroup)10, 0.2f, 0f, (Pitch)null, (Repetition)null, (Randomization)null, (Distortion)null, false); yield return (object)new WaitForSeconds(0.25f); yield break; } Singleton<BoardManager>.Instance.CancelledSacrifice = false; yield return Singleton<BoardManager>.Instance.ChooseSacrificesForCard(occupiedSlots, ((AbilityBehaviour)this).Card, BloodCost); if (Singleton<BoardManager>.Instance.CancelledSacrifice) { yield break; } } List<GemType> GemCost = abilityData.activationCost?.gemsCost?.Select((string s) => ImportExportUtils.ParseEnum<GemType>(s)).ToList() ?? new List<GemType>(); foreach (GemType Gem in GemCost) { if (!Singleton<ResourcesManager>.Instance.HasGem(Gem)) { ((Card)base.PlayableCard).Anim.LightNegationEffect(); AudioController.Instance.PlaySound2D("toneless_negate", (MixerGroup)10, 0.2f, 0f, (Pitch)null, (Repetition)null, (Randomization)null, (Distortion)null, false); yield return (object)new WaitForSeconds(0.25f); yield break; } } yield return TriggerSigil("OnActivate"); } public void Start() { if (abilityData?.abilityBehaviour == null) { return; } foreach (AbilityBehaviourData item in abilityData.abilityBehaviour) { item.TurnsInPlay = 0; string extendedProperty = CardExtensions.GetExtendedProperty(((Card)base.PlayableCard).Info, "JSONFilePath"); if (extendedProperty != null) { if (!CachedCardData.Contains(extendedProperty)) { CachedCardData.Add(extendedProperty, File.ReadAllText(extendedProperty).FromJson<CardSerializeInfo>()); } CardSerializeInfo cardSerializeInfo = CachedCardData.Get(extendedProperty); if (cardSerializeInfo.extensionProperties != null) { foreach (KeyValuePair<string, string> extensionProperty in cardSerializeI
plugins/Libs/Antlr3.Runtime.dll
Decompiled 10 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using Antlr.Runtime.Debug; using Antlr.Runtime.Misc; using Antlr.Runtime.Tree; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("Antlr3.Runtime")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Tunnel Vision Laboratories, LLC")] [assembly: AssemblyProduct("Antlr3.Runtime")] [assembly: AssemblyCopyright("Copyright © Sam Harwell 2013")] [assembly: AssemblyTrademark("")] [assembly: CLSCompliant(true)] [assembly: AllowPartiallyTrustedCallers] [assembly: ComVisible(false)] [assembly: Guid("7a0b4db7-f127-4cf5-ac2c-e294957efcd6")] [assembly: AssemblyFileVersion("3.5.1.0")] [assembly: AssemblyInformationalVersion("3.5.1")] [assembly: AssemblyVersion("3.5.0.2")] namespace Antlr.Runtime { [Serializable] [FileIOPermission(SecurityAction.Demand, Unrestricted = true)] public class ANTLRFileStream : ANTLRStringStream { protected string fileName; public override string SourceName => fileName; public ANTLRFileStream(string fileName) : this(fileName, null) { } public ANTLRFileStream(string fileName, Encoding encoding) { this.fileName = fileName; Load(fileName, encoding); } public virtual void Load(string fileName, Encoding encoding) { if (fileName != null) { string text = ((encoding != null) ? File.ReadAllText(fileName, encoding) : File.ReadAllText(fileName)); data = text.ToCharArray(); n = data.Length; } } } [Serializable] public class ANTLRInputStream : ANTLRReaderStream { public ANTLRInputStream(Stream input) : this(input, null) { } public ANTLRInputStream(Stream input, int size) : this(input, size, null) { } public ANTLRInputStream(Stream input, Encoding encoding) : this(input, 1024, encoding) { } public ANTLRInputStream(Stream input, int size, Encoding encoding) : this(input, size, 1024, encoding) { } public ANTLRInputStream(Stream input, int size, int readBufferSize, Encoding encoding) : base(GetStreamReader(input, encoding), size, readBufferSize) { } private static StreamReader GetStreamReader(Stream input, Encoding encoding) { if (encoding != null) { return new StreamReader(input, encoding); } return new StreamReader(input); } } [Serializable] public class ANTLRReaderStream : ANTLRStringStream { public const int ReadBufferSize = 1024; public const int InitialBufferSize = 1024; public ANTLRReaderStream(TextReader r) : this(r, 1024, 1024) { } public ANTLRReaderStream(TextReader r, int size) : this(r, size, 1024) { } public ANTLRReaderStream(TextReader r, int size, int readChunkSize) { Load(r, size, readChunkSize); } public virtual void Load(TextReader r, int size, int readChunkSize) { if (r == null) { return; } if (size <= 0) { size = 1024; } if (readChunkSize <= 0) { readChunkSize = 1024; } try { data = r.ReadToEnd().ToCharArray(); n = data.Length; } finally { r.Dispose(); } } } [Serializable] public class ANTLRStringStream : ICharStream, IIntStream { protected char[] data; protected int n; protected int p; private int line = 1; private int charPositionInLine; protected int markDepth; protected IList<CharStreamState> markers; protected int lastMarker; public string name; public virtual int Index => p; public virtual int Line { get { return line; } set { line = value; } } public virtual int CharPositionInLine { get { return charPositionInLine; } set { charPositionInLine = value; } } public virtual int Count => n; public virtual string SourceName => name; public ANTLRStringStream(string input) : this(input, null) { } public ANTLRStringStream(string input, string sourceName) : this(input.ToCharArray(), input.Length, sourceName) { } public ANTLRStringStream(char[] data, int numberOfActualCharsInArray) : this(data, numberOfActualCharsInArray, null) { } public ANTLRStringStream(char[] data, int numberOfActualCharsInArray, string sourceName) { if (data == null) { throw new ArgumentNullException("data"); } if (numberOfActualCharsInArray < 0) { throw new ArgumentOutOfRangeException(); } if (numberOfActualCharsInArray > data.Length) { throw new ArgumentException(); } this.data = data; n = numberOfActualCharsInArray; name = sourceName; } protected ANTLRStringStream() { data = new char[0]; } public virtual void Reset() { p = 0; line = 1; charPositionInLine = 0; markDepth = 0; } public virtual void Consume() { if (p < n) { charPositionInLine++; if (data[p] == '\n') { line++; charPositionInLine = 0; } p++; } } public virtual int LA(int i) { if (i == 0) { return 0; } if (i < 0) { i++; if (p + i - 1 < 0) { return -1; } } if (p + i - 1 >= n) { return -1; } return data[p + i - 1]; } public virtual int LT(int i) { return LA(i); } public virtual int Mark() { if (markers == null) { markers = new List<CharStreamState>(); markers.Add(null); } markDepth++; CharStreamState charStreamState = null; if (markDepth >= markers.Count) { charStreamState = new CharStreamState(); markers.Add(charStreamState); } else { charStreamState = markers[markDepth]; } charStreamState.p = Index; charStreamState.line = Line; charStreamState.charPositionInLine = CharPositionInLine; lastMarker = markDepth; return markDepth; } public virtual void Rewind(int m) { if (m < 0) { throw new ArgumentOutOfRangeException(); } CharStreamState charStreamState = markers[m]; Seek(charStreamState.p); line = charStreamState.line; charPositionInLine = charStreamState.charPositionInLine; Release(m); } public virtual void Rewind() { Rewind(lastMarker); } public virtual void Release(int marker) { markDepth = marker; markDepth--; } public virtual void Seek(int index) { if (index <= p) { p = index; return; } while (p < index) { Consume(); } } public virtual string Substring(int start, int length) { if (start < 0) { throw new ArgumentOutOfRangeException(); } if (length < 0) { throw new ArgumentOutOfRangeException(); } if (start + length > data.Length) { throw new ArgumentException(); } if (length == 0) { return string.Empty; } return new string(data, start, length); } public override string ToString() { return new string(data); } } public class AstParserRuleReturnScope<TTree, TToken> : ParserRuleReturnScope<TToken>, IAstRuleReturnScope<TTree>, IAstRuleReturnScope, IRuleReturnScope { private TTree _tree; public TTree Tree { get { return _tree; } set { _tree = value; } } object IAstRuleReturnScope.Tree => Tree; } public abstract class BaseRecognizer { public const int MemoRuleFailed = -2; public const int MemoRuleUnknown = -1; public const int InitialFollowStackSize = 100; public const int DefaultTokenChannel = 0; public const int Hidden = 99; public const string NextTokenRuleName = "nextToken"; protected internal RecognizerSharedState state; public TextWriter TraceDestination { get; set; } public virtual int NumberOfSyntaxErrors => state.syntaxErrors; public virtual int BacktrackingLevel { get { return state.backtracking; } set { state.backtracking = value; } } public virtual bool Failed => state.failed; public virtual string[] TokenNames => null; public virtual string GrammarFileName => null; public abstract string SourceName { get; } public virtual IDebugEventListener DebugListener => null; public BaseRecognizer() : this(new RecognizerSharedState()) { } public BaseRecognizer(RecognizerSharedState state) { if (state == null) { state = new RecognizerSharedState(); } this.state = state; InitDFAs(); } public virtual void SetState(RecognizerSharedState value) { state = value; } protected virtual void InitDFAs() { } public virtual void Reset() { if (state != null) { state._fsp = -1; state.errorRecovery = false; state.lastErrorIndex = -1; state.failed = false; state.syntaxErrors = 0; state.backtracking = 0; int num = 0; while (state.ruleMemo != null && num < state.ruleMemo.Length) { state.ruleMemo[num] = null; num++; } } } public virtual object Match(IIntStream input, int ttype, BitSet follow) { object currentInputSymbol = GetCurrentInputSymbol(input); if (input.LA(1) == ttype) { input.Consume(); state.errorRecovery = false; state.failed = false; return currentInputSymbol; } if (state.backtracking > 0) { state.failed = true; return currentInputSymbol; } return RecoverFromMismatchedToken(input, ttype, follow); } public virtual void MatchAny(IIntStream input) { state.errorRecovery = false; state.failed = false; input.Consume(); } public virtual bool MismatchIsUnwantedToken(IIntStream input, int ttype) { return input.LA(2) == ttype; } public virtual bool MismatchIsMissingToken(IIntStream input, BitSet follow) { if (follow == null) { return false; } if (follow.Member(1)) { BitSet a = ComputeContextSensitiveRuleFOLLOW(); follow = follow.Or(a); if (state._fsp >= 0) { follow.Remove(1); } } if (follow.Member(input.LA(1)) || follow.Member(1)) { return true; } return false; } public virtual void ReportError(RecognitionException e) { if (!state.errorRecovery) { state.syntaxErrors++; state.errorRecovery = true; DisplayRecognitionError(TokenNames, e); } } public virtual void DisplayRecognitionError(string[] tokenNames, RecognitionException e) { string errorHeader = GetErrorHeader(e); string errorMessage = GetErrorMessage(e, tokenNames); EmitErrorMessage(errorHeader + " " + errorMessage); } public virtual string GetErrorMessage(RecognitionException e, string[] tokenNames) { string result = e.Message; if (e is UnwantedTokenException) { UnwantedTokenException ex = (UnwantedTokenException)e; string text = "<unknown>"; result = string.Concat(str3: (ex.Expecting != -1) ? tokenNames[ex.Expecting] : "EndOfFile", str0: "extraneous input ", str1: GetTokenErrorDisplay(ex.UnexpectedToken), str2: " expecting "); } else if (e is MissingTokenException) { MissingTokenException ex2 = (MissingTokenException)e; string text2 = "<unknown>"; text2 = ((ex2.Expecting != -1) ? tokenNames[ex2.Expecting] : "EndOfFile"); result = "missing " + text2 + " at " + GetTokenErrorDisplay(e.Token); } else if (e is MismatchedTokenException) { MismatchedTokenException ex3 = (MismatchedTokenException)e; string text3 = "<unknown>"; result = string.Concat(str3: (ex3.Expecting != -1) ? tokenNames[ex3.Expecting] : "EndOfFile", str0: "mismatched input ", str1: GetTokenErrorDisplay(e.Token), str2: " expecting "); } else if (e is MismatchedTreeNodeException) { MismatchedTreeNodeException ex4 = (MismatchedTreeNodeException)e; string text4 = "<unknown>"; text4 = ((ex4.Expecting != -1) ? tokenNames[ex4.Expecting] : "EndOfFile"); string text5 = ((ex4.Node != null) ? (ex4.Node.ToString() ?? string.Empty) : string.Empty); result = "mismatched tree node: " + text5 + " expecting " + text4; } else if (e is NoViableAltException) { result = "no viable alternative at input " + GetTokenErrorDisplay(e.Token); } else if (e is EarlyExitException) { result = "required (...)+ loop did not match anything at input " + GetTokenErrorDisplay(e.Token); } else if (e is MismatchedSetException) { MismatchedSetException ex5 = (MismatchedSetException)e; result = "mismatched input " + GetTokenErrorDisplay(e.Token) + " expecting set " + ex5.Expecting; } else if (e is MismatchedNotSetException) { MismatchedNotSetException ex6 = (MismatchedNotSetException)e; result = "mismatched input " + GetTokenErrorDisplay(e.Token) + " expecting set " + ex6.Expecting; } else if (e is FailedPredicateException) { FailedPredicateException ex7 = (FailedPredicateException)e; result = "rule " + ex7.RuleName + " failed predicate: {" + ex7.PredicateText + "}?"; } return result; } public virtual string GetErrorHeader(RecognitionException e) { string text = SourceName ?? string.Empty; if (text.Length > 0) { text += " "; } return $"{text}line {e.Line}:{e.CharPositionInLine + 1}"; } public virtual string GetTokenErrorDisplay(IToken t) { string text = t.Text; if (text == null) { text = ((t.Type != -1) ? ("<" + t.Type + ">") : "<EOF>"); } text = Regex.Replace(text, "\n", "\\\\n"); text = Regex.Replace(text, "\r", "\\\\r"); text = Regex.Replace(text, "\t", "\\\\t"); return "'" + text + "'"; } public virtual void EmitErrorMessage(string msg) { if (TraceDestination != null) { TraceDestination.WriteLine(msg); } } public virtual void Recover(IIntStream input, RecognitionException re) { if (state.lastErrorIndex == input.Index) { input.Consume(); } state.lastErrorIndex = input.Index; BitSet set = ComputeErrorRecoverySet(); BeginResync(); ConsumeUntil(input, set); EndResync(); } public virtual void BeginResync() { } public virtual void EndResync() { } protected virtual BitSet ComputeErrorRecoverySet() { return CombineFollows(exact: false); } protected virtual BitSet ComputeContextSensitiveRuleFOLLOW() { return CombineFollows(exact: true); } protected virtual BitSet CombineFollows(bool exact) { int fsp = state._fsp; BitSet bitSet = new BitSet(); for (int num = fsp; num >= 0; num--) { BitSet bitSet2 = state.following[num]; bitSet.OrInPlace(bitSet2); if (exact) { if (!bitSet2.Member(1)) { break; } if (num > 0) { bitSet.Remove(1); } } } return bitSet; } protected virtual object RecoverFromMismatchedToken(IIntStream input, int ttype, BitSet follow) { RecognitionException e = null; if (MismatchIsUnwantedToken(input, ttype)) { e = new UnwantedTokenException(ttype, input, TokenNames); BeginResync(); input.Consume(); EndResync(); ReportError(e); object currentInputSymbol = GetCurrentInputSymbol(input); input.Consume(); return currentInputSymbol; } if (MismatchIsMissingToken(input, follow)) { object missingSymbol = GetMissingSymbol(input, e, ttype, follow); e = new MissingTokenException(ttype, input, missingSymbol); ReportError(e); return missingSymbol; } e = new MismatchedTokenException(ttype, input, TokenNames); throw e; } public virtual object RecoverFromMismatchedSet(IIntStream input, RecognitionException e, BitSet follow) { if (MismatchIsMissingToken(input, follow)) { ReportError(e); return GetMissingSymbol(input, e, 0, follow); } throw e; } protected virtual object GetCurrentInputSymbol(IIntStream input) { return null; } protected virtual object GetMissingSymbol(IIntStream input, RecognitionException e, int expectedTokenType, BitSet follow) { return null; } public virtual void ConsumeUntil(IIntStream input, int tokenType) { int num = input.LA(1); while (num != -1 && num != tokenType) { input.Consume(); num = input.LA(1); } } public virtual void ConsumeUntil(IIntStream input, BitSet set) { int num = input.LA(1); while (num != -1 && !set.Member(num)) { input.Consume(); num = input.LA(1); } } protected void PushFollow(BitSet fset) { if (state._fsp + 1 >= state.following.Length) { Array.Resize(ref state.following, state.following.Length * 2); } state.following[++state._fsp] = fset; } protected void PopFollow() { state._fsp--; } public virtual IList<string> GetRuleInvocationStack() { return GetRuleInvocationStack(new StackTrace(fNeedFileInfo: true)); } public static IList<string> GetRuleInvocationStack(StackTrace trace) { if (trace == null) { throw new ArgumentNullException("trace"); } List<string> list = new List<string>(); StackFrame[] array = trace.GetFrames() ?? new StackFrame[0]; for (int num = array.Length - 1; num >= 0; num--) { GrammarRuleAttribute[] array2 = (GrammarRuleAttribute[])array[num].GetMethod().GetCustomAttributes(typeof(GrammarRuleAttribute), inherit: true); if (array2 != null && array2.Length != 0) { list.Add(array2[0].Name); } } return list; } public virtual List<string> ToStrings(ICollection<IToken> tokens) { if (tokens == null) { return null; } List<string> list = new List<string>(tokens.Count); foreach (IToken token in tokens) { list.Add(token.Text); } return list; } public virtual int GetRuleMemoization(int ruleIndex, int ruleStartIndex) { if (state.ruleMemo[ruleIndex] == null) { state.ruleMemo[ruleIndex] = new Dictionary<int, int>(); } if (!state.ruleMemo[ruleIndex].TryGetValue(ruleStartIndex, out var value)) { return -1; } return value; } public virtual bool AlreadyParsedRule(IIntStream input, int ruleIndex) { int ruleMemoization = GetRuleMemoization(ruleIndex, input.Index); switch (ruleMemoization) { case -1: return false; case -2: state.failed = true; break; default: input.Seek(ruleMemoization + 1); break; } return true; } public virtual void Memoize(IIntStream input, int ruleIndex, int ruleStartIndex) { int value = (state.failed ? (-2) : (input.Index - 1)); if (state.ruleMemo == null && TraceDestination != null) { TraceDestination.WriteLine("!!!!!!!!! memo array is null for " + GrammarFileName); } if (ruleIndex >= state.ruleMemo.Length && TraceDestination != null) { TraceDestination.WriteLine("!!!!!!!!! memo size is " + state.ruleMemo.Length + ", but rule index is " + ruleIndex); } if (state.ruleMemo[ruleIndex] != null) { state.ruleMemo[ruleIndex][ruleStartIndex] = value; } } public virtual int GetRuleMemoizationCacheSize() { int num = 0; int num2 = 0; while (state.ruleMemo != null && num2 < state.ruleMemo.Length) { IDictionary<int, int> dictionary = state.ruleMemo[num2]; if (dictionary != null) { num += dictionary.Count; } num2++; } return num; } public virtual void TraceIn(string ruleName, int ruleIndex, object inputSymbol) { if (TraceDestination != null) { TraceDestination.Write("enter " + ruleName + " " + inputSymbol); if (state.backtracking > 0) { TraceDestination.Write(" backtracking=" + state.backtracking); } TraceDestination.WriteLine(); } } public virtual void TraceOut(string ruleName, int ruleIndex, object inputSymbol) { if (TraceDestination == null) { return; } TraceDestination.Write("exit " + ruleName + " " + inputSymbol); if (state.backtracking > 0) { TraceDestination.Write(" backtracking=" + state.backtracking); if (state.failed) { TraceDestination.Write(" failed"); } else { TraceDestination.Write(" succeeded"); } } TraceDestination.WriteLine(); } [Conditional("ANTLR_DEBUG")] protected virtual void DebugEnterRule(string grammarFileName, string ruleName) { DebugListener?.EnterRule(grammarFileName, ruleName); } [Conditional("ANTLR_DEBUG")] protected virtual void DebugExitRule(string grammarFileName, string ruleName) { DebugListener?.ExitRule(grammarFileName, ruleName); } [Conditional("ANTLR_DEBUG")] protected virtual void DebugEnterSubRule(int decisionNumber) { DebugListener?.EnterSubRule(decisionNumber); } [Conditional("ANTLR_DEBUG")] protected virtual void DebugExitSubRule(int decisionNumber) { DebugListener?.ExitSubRule(decisionNumber); } [Conditional("ANTLR_DEBUG")] protected virtual void DebugEnterAlt(int alt) { DebugListener?.EnterAlt(alt); } [Conditional("ANTLR_DEBUG")] protected virtual void DebugEnterDecision(int decisionNumber, bool couldBacktrack) { DebugListener?.EnterDecision(decisionNumber, couldBacktrack); } [Conditional("ANTLR_DEBUG")] protected virtual void DebugExitDecision(int decisionNumber) { DebugListener?.ExitDecision(decisionNumber); } [Conditional("ANTLR_DEBUG")] protected virtual void DebugLocation(int line, int charPositionInLine) { DebugListener?.Location(line, charPositionInLine); } [Conditional("ANTLR_DEBUG")] protected virtual void DebugSemanticPredicate(bool result, string predicate) { DebugListener?.SemanticPredicate(result, predicate); } [Conditional("ANTLR_DEBUG")] protected virtual void DebugBeginBacktrack(int level) { DebugListener?.BeginBacktrack(level); } [Conditional("ANTLR_DEBUG")] protected virtual void DebugEndBacktrack(int level, bool successful) { DebugListener?.EndBacktrack(level, successful); } [Conditional("ANTLR_DEBUG")] protected virtual void DebugRecognitionException(RecognitionException ex) { DebugListener?.RecognitionException(ex); } } [Serializable] public sealed class BitSet : ICloneable { private const int BITS = 64; private const int LOG_BITS = 6; private const int MOD_MASK = 63; private ulong[] _bits; public BitSet() : this(64) { } [CLSCompliant(false)] public BitSet(ulong[] bits) { _bits = bits; } public BitSet(IEnumerable<int> items) : this() { foreach (int item in items) { Add(item); } } public BitSet(int nbits) { _bits = new ulong[(nbits - 1 >> 6) + 1]; } public static BitSet Of(int el) { BitSet bitSet = new BitSet(el + 1); bitSet.Add(el); return bitSet; } public static BitSet Of(int a, int b) { BitSet bitSet = new BitSet(Math.Max(a, b) + 1); bitSet.Add(a); bitSet.Add(b); return bitSet; } public static BitSet Of(int a, int b, int c) { BitSet bitSet = new BitSet(); bitSet.Add(a); bitSet.Add(b); bitSet.Add(c); return bitSet; } public static BitSet Of(int a, int b, int c, int d) { BitSet bitSet = new BitSet(); bitSet.Add(a); bitSet.Add(b); bitSet.Add(c); bitSet.Add(d); return bitSet; } public BitSet Or(BitSet a) { if (a == null) { return this; } BitSet obj = (BitSet)Clone(); obj.OrInPlace(a); return obj; } public void Add(int el) { int num = WordNumber(el); if (num >= _bits.Length) { GrowToInclude(el); } _bits[num] |= BitMask(el); } public void GrowToInclude(int bit) { int size = Math.Max(_bits.Length << 1, NumWordsToHold(bit)); SetSize(size); } public void OrInPlace(BitSet a) { if (a != null) { if (a._bits.Length > _bits.Length) { SetSize(a._bits.Length); } for (int num = Math.Min(_bits.Length, a._bits.Length) - 1; num >= 0; num--) { _bits[num] |= a._bits[num]; } } } private void SetSize(int nwords) { Array.Resize(ref _bits, nwords); } private static ulong BitMask(int bitNumber) { int num = bitNumber & 0x3F; return (ulong)(1L << num); } public object Clone() { return new BitSet((ulong[])_bits.Clone()); } public int Size() { int num = 0; for (int num2 = _bits.Length - 1; num2 >= 0; num2--) { ulong num3 = _bits[num2]; if (num3 != 0L) { for (int num4 = 63; num4 >= 0; num4--) { if ((num3 & (ulong)(1L << num4)) != 0L) { num++; } } } } return num; } public override int GetHashCode() { throw new NotImplementedException(); } public override bool Equals(object other) { if (other == null || !(other is BitSet)) { return false; } BitSet bitSet = (BitSet)other; int num = Math.Min(_bits.Length, bitSet._bits.Length); for (int i = 0; i < num; i++) { if (_bits[i] != bitSet._bits[i]) { return false; } } if (_bits.Length > num) { for (int j = num + 1; j < _bits.Length; j++) { if (_bits[j] != 0L) { return false; } } } else if (bitSet._bits.Length > num) { for (int k = num + 1; k < bitSet._bits.Length; k++) { if (bitSet._bits[k] != 0L) { return false; } } } return true; } public bool Member(int el) { if (el < 0) { return false; } int num = WordNumber(el); if (num >= _bits.Length) { return false; } return (_bits[num] & BitMask(el)) != 0; } public void Remove(int el) { int num = WordNumber(el); if (num < _bits.Length) { _bits[num] &= ~BitMask(el); } } public bool IsNil() { for (int num = _bits.Length - 1; num >= 0; num--) { if (_bits[num] != 0L) { return false; } } return true; } private static int NumWordsToHold(int el) { return (el >> 6) + 1; } public int NumBits() { return _bits.Length << 6; } public int LengthInLongWords() { return _bits.Length; } public int[] ToArray() { int[] array = new int[Size()]; int num = 0; for (int i = 0; i < _bits.Length << 6; i++) { if (Member(i)) { array[num++] = i; } } return array; } private static int WordNumber(int bit) { return bit >> 6; } public override string ToString() { return ToString(null); } public string ToString(string[] tokenNames) { StringBuilder stringBuilder = new StringBuilder(); string value = ","; bool flag = false; stringBuilder.Append('{'); for (int i = 0; i < _bits.Length << 6; i++) { if (Member(i)) { if (i > 0 && flag) { stringBuilder.Append(value); } if (tokenNames != null) { stringBuilder.Append(tokenNames[i]); } else { stringBuilder.Append(i); } flag = true; } } stringBuilder.Append('}'); return stringBuilder.ToString(); } } [Serializable] public class BufferedTokenStream : ITokenStream, IIntStream, ITokenStreamInformation { private ITokenSource _tokenSource; [CLSCompliant(false)] protected List<IToken> _tokens = new List<IToken>(100); private int _lastMarker; [CLSCompliant(false)] protected int _p = -1; public virtual ITokenSource TokenSource { get { return _tokenSource; } set { _tokenSource = value; _tokens.Clear(); _p = -1; } } public virtual int Index => _p; public virtual int Range { get; protected set; } public virtual int Count => _tokens.Count; public virtual string SourceName => _tokenSource.SourceName; public virtual IToken LastToken => LB(1); public virtual IToken LastRealToken { get { int num = 0; IToken token; do { num++; token = LB(num); } while (token != null && token.Line <= 0); return token; } } public virtual int MaxLookBehind => int.MaxValue; public BufferedTokenStream() { } public BufferedTokenStream(ITokenSource tokenSource) { _tokenSource = tokenSource; } public virtual int Mark() { if (_p == -1) { Setup(); } _lastMarker = Index; return _lastMarker; } public virtual void Release(int marker) { } public virtual void Rewind(int marker) { Seek(marker); } public virtual void Rewind() { Seek(_lastMarker); } public virtual void Reset() { _p = 0; _lastMarker = 0; } public virtual void Seek(int index) { _p = index; } public virtual void Consume() { if (_p == -1) { Setup(); } _p++; Sync(_p); } protected virtual void Sync(int i) { int num = i - _tokens.Count + 1; if (num > 0) { Fetch(num); } } protected virtual void Fetch(int n) { for (int i = 0; i < n; i++) { IToken token = TokenSource.NextToken(); token.TokenIndex = _tokens.Count; _tokens.Add(token); if (token.Type == -1) { break; } } } public virtual IToken Get(int i) { if (i < 0 || i >= _tokens.Count) { throw new IndexOutOfRangeException("token index " + i + " out of range 0.." + (_tokens.Count - 1)); } return _tokens[i]; } public virtual int LA(int i) { return LT(i).Type; } protected virtual IToken LB(int k) { if (_p - k < 0) { return null; } return _tokens[_p - k]; } public virtual IToken LT(int k) { if (_p == -1) { Setup(); } if (k == 0) { return null; } if (k < 0) { return LB(-k); } int num = _p + k - 1; Sync(num); if (num >= _tokens.Count) { return _tokens[_tokens.Count - 1]; } if (num > Range) { Range = num; } return _tokens[_p + k - 1]; } protected virtual void Setup() { Sync(0); _p = 0; } public virtual List<IToken> GetTokens() { return _tokens; } public virtual List<IToken> GetTokens(int start, int stop) { return GetTokens(start, stop, (BitSet)null); } public virtual List<IToken> GetTokens(int start, int stop, BitSet types) { if (_p == -1) { Setup(); } if (stop >= _tokens.Count) { stop = _tokens.Count - 1; } if (start < 0) { start = 0; } if (start > stop) { return null; } List<IToken> list = new List<IToken>(); for (int i = start; i <= stop; i++) { IToken token = _tokens[i]; if (types == null || types.Member(token.Type)) { list.Add(token); } } if (list.Count == 0) { list = null; } return list; } public virtual List<IToken> GetTokens(int start, int stop, IEnumerable<int> types) { return GetTokens(start, stop, new BitSet(types)); } public virtual List<IToken> GetTokens(int start, int stop, int ttype) { return GetTokens(start, stop, BitSet.Of(ttype)); } public override string ToString() { if (_p == -1) { Setup(); } Fill(); return ToString(0, _tokens.Count - 1); } public virtual string ToString(int start, int stop) { if (start < 0 || stop < 0) { return null; } if (_p == -1) { Setup(); } if (stop >= _tokens.Count) { stop = _tokens.Count - 1; } StringBuilder stringBuilder = new StringBuilder(); for (int i = start; i <= stop; i++) { IToken token = _tokens[i]; if (token.Type == -1) { break; } stringBuilder.Append(token.Text); } return stringBuilder.ToString(); } public virtual string ToString(IToken start, IToken stop) { if (start != null && stop != null) { return ToString(start.TokenIndex, stop.TokenIndex); } return null; } public virtual void Fill() { if (_p == -1) { Setup(); } if (_tokens[_p].Type != -1) { int num = _p + 1; Sync(num); while (_tokens[num].Type != -1) { num++; Sync(num); } } } } public static class CharStreamConstants { public const int EndOfFile = -1; } [Serializable] public class CharStreamState { public int p; public int line; public int charPositionInLine; } [Serializable] public class ClassicToken : IToken { private string text; private int type; private int line; private int charPositionInLine; private int channel; private int index; public string Text { get { return text; } set { text = value; } } public int Type { get { return type; } set { type = value; } } public int Line { get { return line; } set { line = value; } } public int CharPositionInLine { get { return charPositionInLine; } set { charPositionInLine = value; } } public int Channel { get { return channel; } set { channel = value; } } public int StartIndex { get { return -1; } set { } } public int StopIndex { get { return -1; } set { } } public int TokenIndex { get { return index; } set { index = value; } } public ICharStream InputStream { get { return null; } set { } } public ClassicToken(int type) { this.type = type; } public ClassicToken(IToken oldToken) { text = oldToken.Text; type = oldToken.Type; line = oldToken.Line; charPositionInLine = oldToken.CharPositionInLine; channel = oldToken.Channel; } public ClassicToken(int type, string text) { this.type = type; this.text = text; } public ClassicToken(int type, string text, int channel) { this.type = type; this.text = text; this.channel = channel; } public override string ToString() { string text = ""; if (channel > 0) { text = ",channel=" + channel; } string text2 = Text; if (text2 != null) { text2 = text2.Replace("\n", "\\\\n"); text2 = text2.Replace("\r", "\\\\r"); text2 = text2.Replace("\t", "\\\\t"); } else { text2 = "<no text>"; } return "[@" + TokenIndex + ",'" + text2 + "',<" + type + ">" + text + "," + line + ":" + CharPositionInLine + "]"; } } [Serializable] public class CommonToken : IToken { private int type; private int line; private int charPositionInLine = -1; private int channel; [NonSerialized] private ICharStream input; private string text; private int index = -1; private int start; private int stop; public string Text { get { if (text != null) { return text; } if (input == null) { return null; } if (start <= stop && stop < input.Count) { return input.Substring(start, stop - start + 1); } return "<EOF>"; } set { text = value; } } public int Type { get { return type; } set { type = value; } } public int Line { get { return line; } set { line = value; } } public int CharPositionInLine { get { return charPositionInLine; } set { charPositionInLine = value; } } public int Channel { get { return channel; } set { channel = value; } } public int StartIndex { get { return start; } set { start = value; } } public int StopIndex { get { return stop; } set { stop = value; } } public int TokenIndex { get { return index; } set { index = value; } } public ICharStream InputStream { get { return input; } set { input = value; } } public CommonToken() { } public CommonToken(int type) { this.type = type; } public CommonToken(ICharStream input, int type, int channel, int start, int stop) { this.input = input; this.type = type; this.channel = channel; this.start = start; this.stop = stop; } public CommonToken(int type, string text) { this.type = type; channel = 0; this.text = text; } public CommonToken(IToken oldToken) { text = oldToken.Text; type = oldToken.Type; line = oldToken.Line; index = oldToken.TokenIndex; charPositionInLine = oldToken.CharPositionInLine; channel = oldToken.Channel; input = oldToken.InputStream; if (oldToken is CommonToken) { start = ((CommonToken)oldToken).start; stop = ((CommonToken)oldToken).stop; } } public override string ToString() { string text = ""; if (channel > 0) { text = ",channel=" + channel; } string text2 = Text; if (text2 != null) { text2 = Regex.Replace(text2, "\n", "\\\\n"); text2 = Regex.Replace(text2, "\r", "\\\\r"); text2 = Regex.Replace(text2, "\t", "\\\\t"); } else { text2 = "<no text>"; } return "[@" + TokenIndex + "," + start + ":" + stop + "='" + text2 + "',<" + type + ">" + text + "," + line + ":" + CharPositionInLine + "]"; } [OnSerializing] internal void OnSerializing(StreamingContext context) { if (text == null) { text = Text; } } } [Serializable] public class CommonTokenStream : BufferedTokenStream { private int _channel; public int Channel => _channel; public override ITokenSource TokenSource { get { return base.TokenSource; } set { base.TokenSource = value; _channel = 0; } } public CommonTokenStream() { } public CommonTokenStream(ITokenSource tokenSource) : this(tokenSource, 0) { } public CommonTokenStream(ITokenSource tokenSource, int channel) : base(tokenSource) { _channel = channel; } public override void Consume() { if (_p == -1) { Setup(); } _p++; _p = SkipOffTokenChannels(_p); } protected override IToken LB(int k) { if (k == 0 || _p - k < 0) { return null; } int num = _p; for (int i = 1; i <= k; i++) { num = SkipOffTokenChannelsReverse(num - 1); } if (num < 0) { return null; } return _tokens[num]; } public override IToken LT(int k) { if (_p == -1) { Setup(); } if (k == 0) { return null; } if (k < 0) { return LB(-k); } int num = _p; for (int i = 1; i < k; i++) { num = SkipOffTokenChannels(num + 1); } if (num > Range) { Range = num; } return _tokens[num]; } protected virtual int SkipOffTokenChannels(int i) { Sync(i); while (_tokens[i].Channel != _channel) { i++; Sync(i); } return i; } protected virtual int SkipOffTokenChannelsReverse(int i) { while (i >= 0 && _tokens[i].Channel != _channel) { i--; } return i; } public override void Reset() { base.Reset(); _p = SkipOffTokenChannels(0); } protected override void Setup() { _p = 0; _p = SkipOffTokenChannels(_p); } } public delegate int SpecialStateTransitionHandler(DFA dfa, int s, IIntStream input); public class DFA { protected short[] eot; protected short[] eof; protected char[] min; protected char[] max; protected short[] accept; protected short[] special; protected short[][] transition; protected int decisionNumber; protected BaseRecognizer recognizer; public bool debug; public virtual string Description => "n/a"; public SpecialStateTransitionHandler SpecialStateTransition { get; private set; } public DFA() : this(SpecialStateTransitionDefault) { } public DFA(SpecialStateTransitionHandler specialStateTransition) { SpecialStateTransition = specialStateTransition ?? new SpecialStateTransitionHandler(SpecialStateTransitionDefault); } public virtual int Predict(IIntStream input) { if (input == null) { throw new ArgumentNullException("input"); } int marker = input.Mark(); int num = 0; try { char c; while (true) { int num2 = special[num]; if (num2 >= 0) { num = SpecialStateTransition(this, num2, input); if (num == -1) { NoViableAlt(num, input); return 0; } input.Consume(); continue; } if (accept[num] >= 1) { return accept[num]; } c = (char)input.LA(1); if (c >= min[num] && c <= max[num]) { int num3 = transition[num][c - min[num]]; if (num3 < 0) { if (eot[num] < 0) { NoViableAlt(num, input); return 0; } num = eot[num]; input.Consume(); } else { num = num3; input.Consume(); } } else { if (eot[num] < 0) { break; } num = eot[num]; input.Consume(); } } if (c == '\uffff' && eof[num] >= 0) { return accept[eof[num]]; } NoViableAlt(num, input); return 0; } finally { input.Rewind(marker); } } [Conditional("DEBUG_DFA")] private void DfaDebugMessage(string format, params object[] args) { Console.Error.WriteLine(format, args); } [Conditional("DEBUG_DFA")] private void DfaDebugInvalidSymbol(int s) { Console.Error.WriteLine("min[{0}]={1}", s, min[s]); Console.Error.WriteLine("max[{0}]={1}", s, max[s]); Console.Error.WriteLine("eot[{0}]={1}", s, eot[s]); Console.Error.WriteLine("eof[{0}]={1}", s, eof[s]); for (int i = 0; i < transition[s].Length; i++) { Console.Error.Write(transition[s][i] + " "); } Console.Error.WriteLine(); } protected virtual void NoViableAlt(int s, IIntStream input) { if (recognizer.state.backtracking > 0) { recognizer.state.failed = true; return; } NoViableAltException ex = new NoViableAltException(Description, decisionNumber, s, input); Error(ex); throw ex; } public virtual void Error(NoViableAltException nvae) { } private static int SpecialStateTransitionDefault(DFA dfa, int s, IIntStream input) { return -1; } public static short[] UnpackEncodedString(string encodedString) { int num = 0; for (int i = 0; i < encodedString.Length; i += 2) { num += encodedString[i]; } short[] array = new short[num]; int num2 = 0; for (int j = 0; j < encodedString.Length; j += 2) { char c = encodedString[j]; char c2 = encodedString[j + 1]; for (int k = 1; k <= c; k++) { array[num2++] = (short)c2; } } return array; } public static char[] UnpackEncodedStringToUnsignedChars(string encodedString) { int num = 0; for (int i = 0; i < encodedString.Length; i += 2) { num += encodedString[i]; } char[] array = new char[num]; int num2 = 0; for (int j = 0; j < encodedString.Length; j += 2) { char c = encodedString[j]; char c2 = encodedString[j + 1]; for (int k = 1; k <= c; k++) { array[num2++] = c2; } } return array; } [Conditional("ANTLR_DEBUG")] protected virtual void DebugRecognitionException(RecognitionException ex) { recognizer.DebugListener?.RecognitionException(ex); } } [Serializable] public class EarlyExitException : RecognitionException { private readonly int _decisionNumber; public int DecisionNumber => _decisionNumber; public EarlyExitException() { } public EarlyExitException(string message) : base(message) { } public EarlyExitException(string message, Exception innerException) : base(message, innerException) { } public EarlyExitException(int decisionNumber, IIntStream input) : base(input) { _decisionNumber = decisionNumber; } public EarlyExitException(string message, int decisionNumber, IIntStream input) : base(message, input) { _decisionNumber = decisionNumber; } public EarlyExitException(string message, int decisionNumber, IIntStream input, Exception innerException) : base(message, input, innerException) { _decisionNumber = decisionNumber; } protected EarlyExitException(SerializationInfo info, StreamingContext context) : base(info, context) { if (info == null) { throw new ArgumentNullException("info"); } _decisionNumber = info.GetInt32("DecisionNumber"); } [SecurityCritical] public override void GetObjectData(SerializationInfo info, StreamingContext context) { if (info == null) { throw new ArgumentNullException("info"); } base.GetObjectData(info, context); info.AddValue("DecisionNumber", DecisionNumber); } } [Serializable] public class FailedPredicateException : RecognitionException { private readonly string _ruleName; private readonly string _predicateText; public string RuleName => _ruleName; public string PredicateText => _predicateText; public FailedPredicateException() { } public FailedPredicateException(string message) : base(message) { } public FailedPredicateException(string message, Exception innerException) : base(message, innerException) { } public FailedPredicateException(IIntStream input, string ruleName, string predicateText) : base(input) { _ruleName = ruleName; _predicateText = predicateText; } public FailedPredicateException(string message, IIntStream input, string ruleName, string predicateText) : base(message, input) { _ruleName = ruleName; _predicateText = predicateText; } public FailedPredicateException(string message, IIntStream input, string ruleName, string predicateText, Exception innerException) : base(message, input, innerException) { _ruleName = ruleName; _predicateText = predicateText; } protected FailedPredicateException(SerializationInfo info, StreamingContext context) : base(info, context) { if (info == null) { throw new ArgumentNullException("info"); } _ruleName = info.GetString("RuleName"); _predicateText = info.GetString("PredicateText"); } [SecurityCritical] public override void GetObjectData(SerializationInfo info, StreamingContext context) { if (info == null) { throw new ArgumentNullException("info"); } base.GetObjectData(info, context); info.AddValue("RuleName", _ruleName); info.AddValue("PredicateText", _predicateText); } public override string ToString() { return "FailedPredicateException(" + RuleName + ",{" + PredicateText + "}?)"; } } [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public sealed class GrammarRuleAttribute : Attribute { private readonly string _name; public string Name => _name; public GrammarRuleAttribute(string name) { _name = name; } } public interface IAstRuleReturnScope : IRuleReturnScope { object Tree { get; } } public interface IAstRuleReturnScope<TAstLabel> : IAstRuleReturnScope, IRuleReturnScope { new TAstLabel Tree { get; } } public interface ICharStream : IIntStream { int Line { get; set; } int CharPositionInLine { get; set; } string Substring(int start, int length); int LT(int i); } public interface IIntStream { int Index { get; } int Count { get; } string SourceName { get; } void Consume(); int LA(int i); int Mark(); void Rewind(int marker); void Rewind(); void Release(int marker); void Seek(int index); } public interface IRuleReturnScope { object Start { get; } object Stop { get; } } public interface IRuleReturnScope<TLabel> : IRuleReturnScope { new TLabel Start { get; } new TLabel Stop { get; } } public interface ITemplateRuleReturnScope { object Template { get; } } public interface ITemplateRuleReturnScope<TTemplate> : ITemplateRuleReturnScope { new TTemplate Template { get; } } public interface IToken { string Text { get; set; } int Type { get; set; } int Line { get; set; } int CharPositionInLine { get; set; } int Channel { get; set; } int StartIndex { get; set; } int StopIndex { get; set; } int TokenIndex { get; set; } ICharStream InputStream { get; set; } } public interface ITokenSource { string SourceName { get; } string[] TokenNames { get; } IToken NextToken(); } public interface ITokenStream : IIntStream { int Range { get; } ITokenSource TokenSource { get; } IToken LT(int k); IToken Get(int i); string ToString(int start, int stop); string ToString(IToken start, IToken stop); } public interface ITokenStreamInformation { IToken LastToken { get; } IToken LastRealToken { get; } int MaxLookBehind { get; } } [Serializable] public class LegacyCommonTokenStream : ITokenStream, IIntStream { [NonSerialized] private ITokenSource _tokenSource; protected List<IToken> tokens; protected IDictionary<int, int> channelOverrideMap; protected List<int> discardSet; protected int channel; protected bool discardOffChannelTokens; protected int lastMarker; protected int p = -1; public virtual int Index => p; public virtual int Range { get; protected set; } public virtual int Count => tokens.Count; public virtual ITokenSource TokenSource => _tokenSource; public virtual string SourceName => TokenSource.SourceName; public LegacyCommonTokenStream() { tokens = new List<IToken>(500); } public LegacyCommonTokenStream(ITokenSource tokenSource) : this() { _tokenSource = tokenSource; } public LegacyCommonTokenStream(ITokenSource tokenSource, int channel) : this(tokenSource) { this.channel = channel; } public virtual void SetTokenSource(ITokenSource tokenSource) { _tokenSource = tokenSource; tokens.Clear(); p = -1; channel = 0; } public virtual void FillBuffer() { if (p != -1) { return; } int num = 0; IToken token = _tokenSource.NextToken(); while (token != null && token.Type != -1) { bool flag = false; if (channelOverrideMap != null && channelOverrideMap.TryGetValue(token.Type, out var value)) { token.Channel = value; } if (discardSet != null && discardSet.Contains(token.Type)) { flag = true; } else if (discardOffChannelTokens && token.Channel != channel) { flag = true; } if (!flag) { token.TokenIndex = num; tokens.Add(token); num++; } token = _tokenSource.NextToken(); } p = 0; p = SkipOffTokenChannels(p); } public virtual void Consume() { if (p < tokens.Count) { p++; p = SkipOffTokenChannels(p); } } protected virtual int SkipOffTokenChannels(int i) { int count = tokens.Count; while (i < count && tokens[i].Channel != channel) { i++; } return i; } protected virtual int SkipOffTokenChannelsReverse(int i) { while (i >= 0 && tokens[i].Channel != channel) { i--; } return i; } public virtual void SetTokenTypeChannel(int ttype, int channel) { if (channelOverrideMap == null) { channelOverrideMap = new Dictionary<int, int>(); } channelOverrideMap[ttype] = channel; } public virtual void DiscardTokenType(int ttype) { if (discardSet == null) { discardSet = new List<int>(); } discardSet.Add(ttype); } public virtual void SetDiscardOffChannelTokens(bool discardOffChannelTokens) { this.discardOffChannelTokens = discardOffChannelTokens; } public virtual IList<IToken> GetTokens() { if (p == -1) { FillBuffer(); } return tokens; } public virtual IList<IToken> GetTokens(int start, int stop) { return GetTokens(start, stop, (BitSet)null); } public virtual IList<IToken> GetTokens(int start, int stop, BitSet types) { if (p == -1) { FillBuffer(); } if (stop >= tokens.Count) { stop = tokens.Count - 1; } if (start < 0) { start = 0; } if (start > stop) { return null; } IList<IToken> list = new List<IToken>(); for (int i = start; i <= stop; i++) { IToken token = tokens[i]; if (types == null || types.Member(token.Type)) { list.Add(token); } } if (list.Count == 0) { list = null; } return list; } public virtual IList<IToken> GetTokens(int start, int stop, IList<int> types) { return GetTokens(start, stop, new BitSet(types)); } public virtual IList<IToken> GetTokens(int start, int stop, int ttype) { return GetTokens(start, stop, BitSet.Of(ttype)); } public virtual IToken LT(int k) { if (p == -1) { FillBuffer(); } if (k == 0) { return null; } if (k < 0) { return LB(-k); } if (p + k - 1 >= tokens.Count) { return tokens[tokens.Count - 1]; } int num = p; for (int i = 1; i < k; i++) { num = SkipOffTokenChannels(num + 1); } if (num >= tokens.Count) { return tokens[tokens.Count - 1]; } if (num > Range) { Range = num; } return tokens[num]; } protected virtual IToken LB(int k) { if (p == -1) { FillBuffer(); } if (k == 0) { return null; } if (p - k < 0) { return null; } int num = p; for (int i = 1; i <= k; i++) { num = SkipOffTokenChannelsReverse(num - 1); } if (num < 0) { return null; } return tokens[num]; } public virtual IToken Get(int i) { return tokens[i]; } public virtual int LA(int i) { return LT(i).Type; } public virtual int Mark() { if (p == -1) { FillBuffer(); } lastMarker = Index; return lastMarker; } public virtual void Release(int marker) { } public virtual void Rewind(int marker) { Seek(marker); } public virtual void Rewind() { Seek(lastMarker); } public virtual void Reset() { p = 0; lastMarker = 0; } public virtual void Seek(int index) { p = index; } public override string ToString() { if (p == -1) { throw new InvalidOperationException("Buffer is not yet filled."); } return ToString(0, tokens.Count - 1); } public virtual string ToString(int start, int stop) { if (start < 0 || stop < 0) { return null; } if (p == -1) { throw new InvalidOperationException("Buffer is not yet filled."); } if (stop >= tokens.Count) { stop = tokens.Count - 1; } StringBuilder stringBuilder = new StringBuilder(); for (int i = start; i <= stop; i++) { IToken token = tokens[i]; stringBuilder.Append(token.Text); } return stringBuilder.ToString(); } public virtual string ToString(IToken start, IToken stop) { if (start != null && stop != null) { return ToString(start.TokenIndex, stop.TokenIndex); } return null; } } public abstract class Lexer : BaseRecognizer, ITokenSource { protected ICharStream input; public string Text { get { if (state.text != null) { return state.text; } return input.Substring(state.tokenStartCharIndex, CharIndex - state.tokenStartCharIndex); } set { state.text = value; } } public int Line { get { return input.Line; } set { input.Line = value; } } public int CharPositionInLine { get { return input.CharPositionInLine; } set { input.CharPositionInLine = value; } } public virtual ICharStream CharStream { get { return input; } set { input = null; Reset(); input = value; } } public override string SourceName => input.SourceName; public virtual int CharIndex => input.Index; public Lexer() { } public Lexer(ICharStream input) { this.input = input; } public Lexer(ICharStream input, RecognizerSharedState state) : base(state) { this.input = input; } public override void Reset() { base.Reset(); if (input != null) { input.Seek(0); } if (state != null) { state.token = null; state.type = 0; state.channel = 0; state.tokenStartCharIndex = -1; state.tokenStartCharPositionInLine = -1; state.tokenStartLine = -1; state.text = null; } } public virtual IToken NextToken() { while (true) { state.token = null; state.channel = 0; state.tokenStartCharIndex = input.Index; state.tokenStartCharPositionInLine = input.CharPositionInLine; state.tokenStartLine = input.Line; state.text = null; if (input.LA(1) == -1) { break; } try { ParseNextToken(); if (state.token == null) { Emit(); goto IL_00b0; } if (state.token != Tokens.Skip) { goto IL_00b0; } goto end_IL_007d; IL_00b0: return state.token; end_IL_007d:; } catch (MismatchedRangeException e) { ReportError(e); } catch (MismatchedTokenException e2) { ReportError(e2); } catch (RecognitionException ex) { ReportError(ex); Recover(ex); } } return GetEndOfFileToken(); } public virtual IToken GetEndOfFileToken() { return new CommonToken(input, -1, 0, input.Index, input.Index) { Line = Line, CharPositionInLine = CharPositionInLine }; } public virtual void Skip() { state.token = Tokens.Skip; } public abstract void mTokens(); public virtual void Emit(IToken token) { state.token = token; } public virtual IToken Emit() { IToken token = new CommonToken(input, state.type, state.channel, state.tokenStartCharIndex, CharIndex - 1); token.Line = state.tokenStartLine; token.Text = state.text; token.CharPositionInLine = state.tokenStartCharPositionInLine; Emit(token); return token; } public virtual void Match(string s) { int num = 0; while (num < s.Length) { if (input.LA(1) != s[num]) { if (state.backtracking > 0) { state.failed = true; break; } MismatchedTokenException ex = new MismatchedTokenException(s[num], input, TokenNames); Recover(ex); throw ex; } num++; input.Consume(); state.failed = false; } } public virtual void MatchAny() { input.Consume(); } public virtual void Match(int c) { if (input.LA(1) != c) { if (state.backtracking <= 0) { MismatchedTokenException ex = new MismatchedTokenException(c, input, TokenNames); Recover(ex); throw ex; } state.failed = true; } else { input.Consume(); state.failed = false; } } public virtual void MatchRange(int a, int b) { if (input.LA(1) < a || input.LA(1) > b) { if (state.backtracking <= 0) { MismatchedRangeException ex = new MismatchedRangeException(a, b, input); Recover(ex); throw ex; } state.failed = true; } else { input.Consume(); state.failed = false; } } public override void ReportError(RecognitionException e) { DisplayRecognitionError(TokenNames, e); } public override string GetErrorMessage(RecognitionException e, string[] tokenNames) { string text = null; if (e is MismatchedTokenException) { MismatchedTokenException ex = (MismatchedTokenException)e; return "mismatched character " + GetCharErrorDisplay(e.Character) + " expecting " + GetCharErrorDisplay(ex.Expecting); } if (e is NoViableAltException) { _ = (NoViableAltException)e; return "no viable alternative at character " + GetCharErrorDisplay(e.Character); } if (e is EarlyExitException) { _ = (EarlyExitException)e; return "required (...)+ loop did not match anything at character " + GetCharErrorDisplay(e.Character); } if (e is MismatchedNotSetException) { MismatchedNotSetException ex2 = (MismatchedNotSetException)e; return "mismatched character " + GetCharErrorDisplay(e.Character) + " expecting set " + ex2.Expecting; } if (e is MismatchedSetException) { MismatchedSetException ex3 = (MismatchedSetException)e; return "mismatched character " + GetCharErrorDisplay(e.Character) + " expecting set " + ex3.Expecting; } if (e is MismatchedRangeException) { MismatchedRangeException ex4 = (MismatchedRangeException)e; return "mismatched character " + GetCharErrorDisplay(e.Character) + " expecting set " + GetCharErrorDisplay(ex4.A) + ".." + GetCharErrorDisplay(ex4.B); } return base.GetErrorMessage(e, tokenNames); } public virtual string GetCharErrorDisplay(int c) { string text = ((char)c).ToString(); switch (c) { case -1: text = "<EOF>"; break; case 10: text = "\\n"; break; case 9: text = "\\t"; break; case 13: text = "\\r"; break; } return "'" + text + "'"; } public virtual void Recover(RecognitionException re) { input.Consume(); } [Conditional("ANTLR_TRACE")] public virtual void TraceIn(string ruleName, int ruleIndex) { string inputSymbol = ((char)input.LT(1)).ToString() + " line=" + Line + ":" + CharPositionInLine; base.TraceIn(ruleName, ruleIndex, inputSymbol); } [Conditional("ANTLR_TRACE")] public virtual void TraceOut(string ruleName, int ruleIndex) { string inputSymbol = ((char)input.LT(1)).ToString() + " line=" + Line + ":" + CharPositionInLine; base.TraceOut(ruleName, ruleIndex, inputSymbol); } protected virtual void ParseNextToken() { mTokens(); } } [Serializable] public class MismatchedNotSetException : MismatchedSetException { public MismatchedNotSetException() { } public MismatchedNotSetException(string message) : base(message) { } public MismatchedNotSetException(string message, Exception innerException) : base(message, innerException) { } public MismatchedNotSetException(BitSet expecting, IIntStream input) : base(expecting, input) { } public MismatchedNotSetException(string message, BitSet expecting, IIntStream input) : base(message, expecting, input) { } public MismatchedNotSetException(string message, BitSet expecting, IIntStream input, Exception innerException) : base(message, expecting, input, innerException) { } protected MismatchedNotSetException(SerializationInfo info, StreamingContext context) : base(info, context) { } public override string ToString() { return string.Concat("MismatchedNotSetException(", UnexpectedType, "!=", base.Expecting, ")"); } } [Serializable] public class MismatchedRangeException : RecognitionException { private readonly int _a; private readonly int _b; public int A => _a; public int B => _b; public MismatchedRangeException() { } public MismatchedRangeException(string message) : base(message) { } public MismatchedRangeException(string message, Exception innerException) : base(message, innerException) { } public MismatchedRangeException(int a, int b, IIntStream input) : base(input) { _a = a; _b = b; } public MismatchedRangeException(string message, int a, int b, IIntStream input) : base(message, input) { _a = a; _b = b; } public MismatchedRangeException(string message, int a, int b, IIntStream input, Exception innerException) : base(message, input, innerException) { _a = a; _b = b; } protected MismatchedRangeException(SerializationInfo info, StreamingContext context) : base(info, context) { if (info == null) { throw new ArgumentNullException("info"); } _a = info.GetInt32("A"); _b = info.GetInt32("B"); } [SecurityCritical] public override void GetObjectData(SerializationInfo info, StreamingContext context) { if (info == null) { throw new ArgumentNullException("info"); } base.GetObjectData(info, context); info.AddValue("A", _a); info.AddValue("B", _b); } public override string ToString() { return "MismatchedRangeException(" + UnexpectedType + " not in [" + A + "," + B + "])"; } } [Serializable] public class MismatchedSetException : RecognitionException { private readonly BitSet _expecting; public BitSet Expecting => _expecting; public MismatchedSetException() { } public MismatchedSetException(string message) : base(message) { } public MismatchedSetException(string message, Exception innerException) : base(message, innerException) { } public MismatchedSetException(BitSet expecting, IIntStream input) : base(input) { _expecting = expecting; } public MismatchedSetException(string message, BitSet expecting, IIntStream input) : base(message, input) { _expecting = expecting; } public MismatchedSetException(string message, BitSet expecting, IIntStream input, Exception innerException) : base(message, input, innerException) { _expecting = expecting; } protected MismatchedSetException(SerializationInfo info, StreamingContext context) : base(info, context) { if (info == null) { throw new ArgumentNullException("info"); } _expecting = (BitSet)info.GetValue("Expecting", typeof(BitSet)); } [SecurityCritical] public override void GetObjectData(SerializationInfo info, StreamingContext context) { if (info == null) { throw new ArgumentNullException("info"); } base.GetObjectData(info, context); info.AddValue("Expecting", _expecting); } public override string ToString() { return string.Concat("MismatchedSetException(", UnexpectedType, "!=", Expecting, ")"); } } [Serializable] public class MismatchedTokenException : RecognitionException { private readonly int _expecting; private readonly ReadOnlyCollection<string> _tokenNames; public int Expecting => _expecting; public ReadOnlyCollection<string> TokenNames => _tokenNames; public MismatchedTokenException() { } public MismatchedTokenException(string message) : base(message) { } public MismatchedTokenException(string message, Exception innerException) : base(message, innerException) { } public MismatchedTokenException(int expecting, IIntStream input) : this(expecting, input, null) { } public MismatchedTokenException(int expecting, IIntStream input, IList<string> tokenNames) : base(input) { _expecting = expecting; if (tokenNames != null) { _tokenNames = new ReadOnlyCollection<string>(new List<string>(tokenNames)); } } public MismatchedTokenException(string message, int expecting, IIntStream input, IList<string> tokenNames) : base(message, input) { _expecting = expecting; if (tokenNames != null) { _tokenNames = new ReadOnlyCollection<string>(new List<string>(tokenNames)); } } public MismatchedTokenException(string message, int expecting, IIntStream input, IList<string> tokenNames, Exception innerException) : base(message, input, innerException) { _expecting = expecting; if (tokenNames != null) { _tokenNames = new ReadOnlyCollection<string>(new List<string>(tokenNames)); } } protected MismatchedTokenException(SerializationInfo info, StreamingContext context) : base(info, context) { if (info == null) { throw new ArgumentNullException("info"); } _expecting = info.GetInt32("Expecting"); _tokenNames = new ReadOnlyCollection<string>((string[])info.GetValue("TokenNames", typeof(string[]))); } [SecurityCritical] public override void GetObjectData(SerializationInfo info, StreamingContext context) { if (info == null) { throw new ArgumentNullException("info"); } base.GetObjectData(info, context); info.AddValue("Expecting", _expecting); info.AddValue("TokenNames", (_tokenNames != null) ? new List<string>(_tokenNames).ToArray() : null); } public override string ToString() { int unexpectedType = UnexpectedType; string text = ((TokenNames != null && unexpectedType >= 0 && unexpectedType < TokenNames.Count) ? TokenNames[unexpectedType] : unexpectedType.ToString()); string text2 = ((TokenNames != null && Expecting >= 0 && Expecting < TokenNames.Count) ? TokenNames[Expecting] : Expecting.ToString()); return "MismatchedTokenException(" + text + "!=" + text2 + ")"; } } [Serializable] public class MismatchedTreeNodeException : RecognitionException { private readonly int _expecting; public int Expecting => _expecting; public MismatchedTreeNodeException() { } public MismatchedTreeNodeException(string message) : base(message) { } public MismatchedTreeNodeException(string message, Exception innerException) : base(message, innerException) { } public MismatchedTreeNodeException(int expecting, ITreeNodeStream input) : base(input) { _expecting = expecting; } public MismatchedTreeNodeException(string message, int expecting, ITreeNodeStream input) : base(message, input) { _expecting = expecting; } public MismatchedTreeNodeException(string message, int expecting, ITreeNodeStream input, Exception innerException) : base(message, input, innerException) { _expecting = expecting; } protected MismatchedTreeNodeException(SerializationInfo info, StreamingContext context) : base(info, context) { if (info == null) { throw new ArgumentNullException("info"); } _expecting = info.GetInt32("Expecting"); } [SecurityCritical] public override void GetObjectData(SerializationInfo info, StreamingContext context) { if (info == null) { throw new ArgumentNullException("info"); } base.GetObjectData(info, context); info.AddValue("Expecting", _expecting); } public override string ToString() { return "MismatchedTreeNodeException(" + UnexpectedType + "!=" + Expecting + ")"; } } [Serializable] public class MissingTokenException : MismatchedTokenException { private readonly object _inserted; public virtual int MissingType => base.Expecting; public MissingTokenException() { } public MissingTokenException(string message) : base(message) { } public MissingTokenException(string message, Exception innerException) : base(message, innerException) { } public MissingTokenException(int expecting, IIntStream input, object inserted) : this(expecting, input, inserted, null) { } public MissingTokenException(int expecting, IIntStream input, object inserted, IList<string> tokenNames) : base(expecting, input, tokenNames) { _inserted = inserted; } public MissingTokenException(string message, int expecting, IIntStream input, object inserted, IList<string> tokenNames) : base(message, expecting, input, tokenNames) { _inserted = inserted; } public MissingTokenException(string message, int expecting, IIntStream input, object inserted, IList<string> tokenNames, Exception innerException) : base(message, expecting, input, tokenNames, innerException) { _inserted = inserted; } protected MissingTokenException(SerializationInfo info, StreamingContext context) : base(info, context) { } public override string ToString() { if (_inserted != null && base.Token != null) { return string.Concat("MissingTokenException(inserted ", _inserted, " at ", base.Token.Text, ")"); } if (base.Token != null) { return "MissingTokenException(at " + base.Token.Text + ")"; } return "MissingTokenException"; } } [Serializable] public class NoViableAltException : RecognitionException { private readonly string _grammarDecisionDescription; private readonly int _decisionNumber; private readonly int _stateNumber; public int DecisionNumber => _decisionNumber; public string GrammarDecisionDescription => _grammarDecisionDescription; public int StateNumber => _stateNumber; public NoViableAltException() { } public NoViableAltException(string grammarDecisionDescription) { _grammarDecisionDescription = grammarDecisionDescription; } public NoViableAltException(string message, string grammarDecisionDescription) : base(message) { _grammarDecisionDescription = grammarDecisionDescription; } public NoViableAltException(string message, string grammarDecisionDescription, Exception innerException) : base(message, innerException) { _grammarDecisionDescription = grammarDecisionDescription; } public NoViableAltException(string grammarDecisionDescription, int decisionNumber, int stateNumber, IIntStream input) : this(grammarDecisionDescription, decisionNumber, stateNumber, input, 1) { } public NoViableAltException(string grammarDecisionDescription, int decisionNumber, int stateNumber, IIntStream input, int k) : base(input, k) { _grammarDecisionDescription = grammarDecisionDescription; _decisionNumber = decisionNumber; _stateNumber = stateNumber; } public NoViableAltException(string message, string grammarDecisionDescription, int decisionNumber, int stateNumber, IIntStream input) : this(message, grammarDecisionDescription, decisionNumber, stateNumber, input, 1) { } public NoViableAltException(string message, string grammarDecisionDescription, int decisionNumber, int stateNumber, IIntStream input, int k) : base(message, input, k) { _grammarDecisionDescription = grammarDecisionDescription; _decisionNumber = decisionNumber; _stateNumber = stateNumber; } public NoViableAltException(string message, string grammarDecisionDescription, int decisionNumber, int stateNumber, IIntStream input, Exception innerException) : this(message, grammarDecisionDescription, decisionNumber, stateNumber, input, 1, innerException) { } public NoViableAltException(string message, string grammarDecisionDescription, int decisionNumber, int stateNumber, IIntStream input, int k, Exception innerException) : base(message, input, k, innerException) { _grammarDecisionDescription = grammarDecisionDescription; _decisionNumber = decisionNumber; _stateNumber = stateNumber; } protected NoViableAltException(SerializationInfo info, StreamingContext context) : base(info, context) { if (info == null) { throw new ArgumentNullException("info"); } _grammarDecisionDescription = info.GetString("GrammarDecisionDescription"); _decisionNumber = info.GetInt32("DecisionNumber"); _stateNumber = info.GetInt32("StateNumber"); } [SecurityCritical] public override void GetObjectData(SerializationInfo info, StreamingContext context) { if (info == null) { throw new ArgumentNullException("info"); } base.GetObjectData(info, context); info.AddValue("GrammarDecisionDescription", _grammarDecisionDescription); info.AddValue("DecisionNumber", _decisionNumber); info.AddValue("StateNumber", _stateNumber); } public override string ToString() { if (base.Input is ICharStream) { return "NoViableAltException('" + (char)UnexpectedType + "'@[" + GrammarDecisionDescription + "])"; } return "NoViableAltException(" + UnexpectedType + "@[" + GrammarDecisionDescription + "])"; } } public class Parser : BaseRecognizer { public ITokenStream input; public virtual ITokenStream TokenStream { get { return input; } set { input = null; Reset(); input = value; } } public override string SourceName => input.SourceName; public Parser(ITokenStream input) { TokenStream = input; } public Parser(ITokenStream input, RecognizerSharedState state) : base(state) { this.input = input; } public override void Reset() { base.Reset(); if (input != null) { input.Seek(0); } } protected override object GetCurrentInputSymbol(IIntStream input) { return ((ITokenStream)input).LT(1); } protected override object GetMissingSymbol(IIntStream input, RecognitionException e, int expectedTokenType, BitSet follow) { string text = null; text = ((expectedTokenType != -1) ? ("<missing " + TokenNames[expectedTokenType] + ">") : "<missing EOF>"); CommonToken commonToken = new CommonToken(expectedTokenType, text); IToken token = ((ITokenStream)input).LT(1); if (token.Type == -1) { token = ((ITokenStream)input).LT(-1); } commonToken.Line = token.Line; commonToken.CharPositionInLine = token.CharPositionInLine; commonToken.Channel = 0; commonToken.InputStream = token.InputStream; return commonToken; } [Conditional("ANTLR_TRACE")] public virtual void TraceIn(string ruleName, int ruleIndex) { base.TraceIn(ruleName, ruleIndex, input.LT(1)); } [Conditional("ANTLR_TRACE")] public virtual void TraceOut(string ruleName, int ruleIndex) { base.TraceOut(ruleName, ruleIndex, input.LT(1)); } } public class ParserRuleReturnScope<TToken> : IRuleReturnScope<TToken>, IRuleReturnScope { private TToken _start; private TToken _stop; public TToken Start { get { return _start; } set { _start = value; } } public TToken Stop { get { return _stop; } set { _stop = value; } } object IRuleReturnScope.Start => Start; object IRuleReturnScope.Stop => Stop; } [Serializable] public class RecognitionException : Exception { private IIntStream _input; private int _k; private int _index; private IToken _token; private object _node; private int _c; private int _line; private int _charPositionInLine; private bool _approximateLineInfo; public virtual int UnexpectedType { get { if (_input is ITokenStream) { return _token.Type; } if (_input is ITreeNodeStream treeNodeStream) { return treeNodeStream.TreeAdaptor.GetType(_node); } return _c; } } public bool ApproximateLineInfo { get { return _approximateLineInfo; } protected set { _approximateLineInfo = value; } } public IIntStream Input { get { return _input; } protected set { _input = value; } } public int Lookahead => _k; public IToken Token { get { return _token; } set { _token = value; } } public object Node { get { return _node; } protected set { _node = value; } } public int Character { get { return _c; } protected set { _c = value; } } public int Index { get { return _index; } protected set { _index = value; } } public int Line { get { return _line; } set { _line = value; } } public int CharPositionInLine { get { return _charPositionInLine; } set { _charPositionInLine = value; } } public RecognitionException() : this("A recognition error occurred.", null, null) { } public RecognitionException(IIntStream input) : this("A recognition error occurred.", input, 1, null) { } public RecognitionException(IIntStream input, int k) : this("A recognition error occurred.", input, k, null) { } public RecognitionException(string message) : this(message, null, null) { } public RecognitionException(string message, IIntStream input) : this(message, input, 1, null) { } public RecognitionException(string message, IIntStream input, int k) : this(message, input, k, null) { } public RecognitionException(string message, Exception innerException) : this(message, null, innerException) { } public RecognitionException(string message, IIntStream input, Exception innerException) : this(message, input, 1, innerException) { } public RecognitionException(string message, IIntStream input, int k, Exception innerException) : base(message, innerException) { _input = input; _k = k; if (input == null) { return; } _index = input.Index + k - 1; if (input is ITokenStream) { _token = ((ITokenStream)input).LT(k); _line = _token.Line; _charPositionInLine = _token.CharPositionInLine; } if (input is ITreeNodeStream input2) { ExtractInformationFromTreeNodeStream(input2, k); return; } if (input is ICharStream) { int marker = input.Mark(); try { for (int i = 0; i < k - 1; i++) { input.Consume(); } _c = input.LA(1); _line = ((ICharStream)input).Line; _charPositionInLine = ((ICharStream)input).CharPositionInLine; return; } finally { input.Rewind(marker); } } _c = input.LA(k); } protected RecognitionException(SerializationInfo info, StreamingContext context) : base(info, context) { if (info == null) { throw new ArgumentNullException("info"); } _index = info.GetInt32("Index"); _c = info.GetInt32("C"); _line = info.GetInt32("Line"); _charPositionInLine = info.GetInt32("CharPositionInLine"); _approximateLineInfo = info.GetBoolean("ApproximateLineInfo"); } [SecurityCritical] public override void GetObjectData(SerializationInfo info, StreamingContext context) { if (info == null) { throw new ArgumentNullException("info"); } base.GetObjectData(info, context); info.AddValue("Index", _index); info.AddValue("C", _c); info.AddValue("Line", _line); info.AddValue("CharPositionInLine", _charPositionInLine); info.AddValue("ApproximateLineInfo", _approximateLineInfo); } protected virtual void ExtractInformationFromTreeNodeStream(ITreeNodeStream input) { _node = input.LT(1); object obj = null; if (input is IPositionTrackingStream positionTrackingStream) { obj = positionTrackingStream.GetKnownPositionElement(allowApproximateLocation: false); if (obj == null) { obj = positionTrackingStream.GetKnownPositionElement(allowApproximateLocation: true); _approximateLineInfo = obj != null; } } if (input is ITokenStreamInformation tokenStreamInformation) { IToken lastToken = tokenStreamInformation.LastToken; IToken lastRealToken = tokenStreamInformation.LastRealToken; if (lastRealToken != null) { _token = lastRealToken; _line = lastRealToken.Line; _charPositionInLine = lastRealToken.CharPositionInLine; _approximateLineInfo = lastRealToken.Equals(lastToken); } return; } ITreeAdaptor treeAdaptor = input.TreeAdaptor; IToken token = treeAdaptor.GetToken(obj ?? _node); if (token != null) { _token = token; if (token.Line <= 0) { int num = -1; object obj2 = input.LT(num); while (obj2 != null) { IToken token2 = treeAdaptor.GetToken(obj2); if (token2 != null && token2.Line > 0) { _line = token2.Line; _charPositionInLine = token2.CharPositionInLine; _approximateLineInfo = true; break; } num--; try { obj2 = input.LT(num); } catch (NotSupportedException) { obj2 = null; } } } else { _line = token.Line; _charPositionInLine = token.CharPositionInLine; } } else if (_node is ITree) { _line = ((ITree)_node).Line; _charPositionInLine = ((ITree)_node).CharPositionInLine; if (_node is CommonTree) { _token = ((CommonTree)_node).Token; } } else { int type = treeAdaptor.GetType(_node); string text = treeAdaptor.GetText(_node); _token = new CommonToken(type, text); } } protected virtual void ExtractInformationFromTreeNodeStream(ITreeNodeStream input, int k) { int marker = input.Mark(); try { for (int i = 0; i < k - 1; i++) { input.Consume(); } ExtractInformationFromTreeNodeStream(input); } finally { input.Rewind(marker); } } } public class RecognizerSharedState { public BitSet[] following; [CLSCompliant(false)] public int _fsp; public bool errorRecovery; public int lastErrorIndex; public bool failed; public int syntaxErrors; public int backtracking; public IDictionary<int, int>[] ruleMemo; public IToken token; public int tokenStartCharIndex; public int tokenStartLine; public int tokenStartCharPositionInLine; public int channel; public int type; public string text; public RecognizerSharedState() { following = new BitSet[100]; _fsp = -1; lastErrorIndex = -1; tokenStartCharIndex = -1; } public RecognizerSharedState(RecognizerSharedState state) { if (state == null) { throw new ArgumentNullException("state"); } following = (BitSet[])state.following.Clone(); _fsp = state._fsp; errorRecovery = state.errorRecovery; lastErrorIndex = state.lastErrorIndex; failed = state.failed; syntaxErrors = state.syntaxErrors; backtracking = state.backtracking; if (state.ruleMemo != null) { ruleMemo = (IDictionary<int, int>[])state.ruleMemo.Clone(); } token = state.token; tokenStartCharIndex = state.tokenStartCharIndex; tokenStartCharPositionInLine = state.tokenStartCharPositionInLine; channel = state.channel; type = state.type; text = state.text; } } public class TemplateParserRuleReturnScope<TTemplate, TToken> : ParserRuleReturnScope<TToken>, ITemplateRuleReturnScope<TTemplate>, ITemplateRuleReturnScope { private TTemplate _template; public TTemplate Template { get { return _template; } set { _template = value; } } object ITemplateRuleReturnScope.Template => Template; } public static class TokenChannels { public const int Default = 0; public const int Hidden = 99; } [Serializable] [DebuggerDisplay("TODO: TokenRewriteStream debugger display")] public class TokenRewriteStream : CommonTokenStream { protected class RewriteOperation { public int instructionIndex; public int index; public object text; protected TokenRewriteStream stream; protected RewriteOperation(TokenRewriteStream stream, int index) { this.stream = stream; this.index = index; } protected RewriteOperation(TokenRewriteStream stream, int index, object text) { this.index = index; this.text = text; this.stream = stream; } public virtual int Execute(StringBuilder buf) { return index; } public override string ToString() { string name = GetType().Name; int num = name.IndexOf('$'); name = name.Substring(num + 1); return $"<{name}@{stream._tokens[index]}:\"{text}\">"; } } private class InsertBeforeOp : RewriteOperation { public InsertBeforeOp(TokenRewriteStream stream, int index, object text) : base(stream, index, text) { } public override int Execute(StringBuilder buf) { buf.Append(text); if (stream._tokens[index].Type != -1) { buf.Append(stream._tokens[index].Text); } return index + 1; } } private class ReplaceOp : RewriteOperation { public int lastIndex; public ReplaceOp(TokenRewriteStream stream, int from, int to, object text) : base(stream, from, text) { lastIndex = to; } public override int Execute(StringBuilder buf) { if (text != null) { buf.Append(text); } return lastIndex + 1; } public override string ToString() { if (text == null) { return $"<DeleteOp@{stream._tokens[index]}..{stream._tokens[lastIndex]}>"; } return $"<ReplaceOp@{stream._tokens[index]}..{stream._tokens[lastIndex]}:\"{text}\">"; } } public const string DEFAULT_PROGRAM_NAME = "default"; public const int PROGRAM_INIT_SIZE = 100; public const int MIN_TOKEN_INDEX = 0; protected IDictionary<string, IList<RewriteOperation>> programs; protected IDictionary<string, int> lastRewriteTokenIndexes; public TokenRewriteStream() { Init(); } protected void Init() { programs = new Dictionary<string, IList<RewriteOperation>>(); programs["default"] = new List<RewriteOperation>(100); lastRewriteTokenIndexes = new Dictionary<string, int>(); } public TokenRewriteStream(ITokenSource tokenSource) : base(tokenSource) { Init(); } public TokenRewriteStream(ITokenSource tokenSource, int channel) : base(tokenSource, channel) { Init(); } public virtual void Rollback(int instructionIndex) { Rollback("default", instructionIndex); } public virtual void Rollback(string programName, int instructionIndex) { if (programs.TryGetValue(programName, out var value) && value != null) { List<RewriteOperation> list = new List<RewriteOperation>(); for (int i = 0; i <= instructionIndex; i++) { list.Add(value[i]); } programs[programName] = list; } } public virtual void DeleteProgram() { DeleteProgram("default"); } public virtual void DeleteProgram(string programName) { Rollback(programName, 0); } public virtual void InsertAfter(IToken t, object text) { InsertAfter("default", t, text); } public virtual void InsertAfter(int index, object text) { InsertAfter("default", index, text); } public virtual void InsertAfter(string programName, IToken t, object text) { InsertAfter(programName, t.TokenIndex, text); } public virtual void InsertAfter(string programName, int index, object text) { InsertBefore(programName, index + 1, text); } public virtual void InsertBefore(IToken t, object text) { InsertBefore("default", t, text); } public virtual void InsertBefore(int index, object text) { InsertBefore("default", index, text); } public virtual void InsertBefore(string programName, IToken t, object text) { InsertBefore(programName, t.TokenIndex, text); } public virtual void InsertBefore(string programName, int index, object text) { RewriteOperation rewriteOperation = new InsertBeforeOp(this, index, text); IList<RewriteOperation> program = GetProgram(programName); rewriteOperation.instructionIndex = program.Count; program.Add(rewriteOperation); } public virtual void Replace(int index, object text) { Replace("default", index, index, text); } public virtual void Replace(int from, int to, object text) { Replace("default", from, to, text); } public virtual void Replace(IToken indexT, object text) { Replace("default", indexT, indexT, text); } public virtual void Replace(IToken from, IToken to, object text) { Replace("default", from, to, text); } public virtual void Replace(string programName, int from, int to, object text) { if (from > to || from < 0 || to < 0 || to >= _tokens.Count) { throw new ArgumentException("replace: range invalid: " + from + ".." + to + "(size=" + _tokens.Count + ")"); } RewriteOperation rewriteOperation = new ReplaceOp(this, from, to, text); IList<RewriteOperation> program = GetProgram(programName); rewriteOperation.instructionIndex = program.Count; program.Add(rewriteOperation); } public virtual void Replace(string programName, IToken from, IToken to, object text) { Replace(programName, from.TokenIndex, to.TokenIndex, text); } public virtual void Delete(int index) { Delete("default", index, index); } public virtual void Delete(int from, int to) { Delete("default", from, to); } public virtual void Delete(IToken indexT) { Delete("default", indexT, indexT); } public virtual void Delete(IToken from, IToken to) { Delete("default", from, to); } public virtual void Delete(string programName, int from, int to) { Replace(programName, from, to, null); } public virtual void Delete(string programName, IToken from, IToken to) { Replace(programName, from, to, null); } public virtual int GetLastRewriteTokenIndex() { return GetLastRewriteTokenIndex("default"); } protected virtual int GetLastRewriteTokenIndex(string programName) { if (lastRewriteTokenIndexes.TryGetValue(programName, out var value)) { return value; } return -1; } protected virtual void SetLastRewriteTokenIndex(string programName, int i) { lastRewriteTokenIndexes[programName] = i; } protected virtual IList<RewriteOperation> GetProgram(string name) { if (!programs.TryGetValue(name, out var value) || value == null) { return InitializeProgram(name); } return value; } private IList<RewriteOperation> InitializeProgram(string name) { IList<RewriteOperation> list = new List<RewriteOperation>(100); programs[name] = list; return list; } public virtual string ToOriginalString() { Fill(); return ToOriginalString(0, Count - 1); } public virtual string ToOriginalString(int start, int end) { StringBuilder stringBuilder = new StringBuilder(); for (int i = start; i >= 0 && i <= end && i < _tokens.Count; i++) { if (Get(i).Type != -1) { stringBuilder.Append(Get(i).Text); } } return stringBuilder.ToString(); } public override string ToString() { Fill(); return ToString(0, Count - 1); } public virtual string ToString(string programName) { Fill(); return ToString(programName, 0, Count - 1); } public override string ToString(int start, int end) { return ToString("default", start, end); } public virtual string ToString(string programName, int start, int end) { if (!programs.TryGetValue(programName, out var value)) { value = null; } if (end > _tokens.Count - 1) { end = _tokens.Count - 1; } if (start < 0) { start = 0; } if (value == null || value.Count == 0) { return ToOriginalString(start, end); } StringBuilder stringBuilder = new StringBuilder(); IDictionary<int, RewriteOperation> dictionary = ReduceToSingleOperationPerIndex(value); int num = start; while (num <= end && num < _tokens.Count) { RewriteOperation value2; bool num2 = dictionary.TryGetValue(num, out value2); if (num2) { dictionary.Remove(num); } if (!num2 || value2 == null) { IToken token = _tokens[num]; if (token.Type != -1) { stringBuilder.Append(token.Text); } num++; } else { num = value2.Execute(stringBuilder); } } if (end == _tokens.Count - 1) { foreach (RewriteOperation value3 in dictionary.Values) { if (value3.index >= _tokens.Count - 1) { stringBuilder.Append(value3.text); } } } return stringBuilder.ToString(); } protected virtual IDictionary<int, RewriteOperation> ReduceToSingleOperationPerIndex(IList<RewriteOperation> rewrites) { for (int i = 0; i < rewrites.Count; i++) { RewriteOperation rewriteOperation = rewrites[i]; if (rewriteOperation == null || !(rewriteOperation is ReplaceOp)) { continue; } ReplaceOp replaceOp = (ReplaceOp)rewrites[i]; IList<RewriteOperation> kindOfOps = GetKindOfOps(rewrites, typeof(InsertBeforeOp), i); for (int j = 0; j < kindOfOps.Count; j++) { InsertBeforeOp insertBeforeOp = (InsertBeforeOp)kindOfOps[j]; if (insertBeforeOp.index == replaceOp.index) { rewrites[insertBeforeOp.instructionIndex] = null; replaceOp.text = insertBeforeOp.text.ToString() + ((replaceOp.text != null) ? replaceOp.text.ToString() : string.Empty); } else if (insertBeforeOp.index > replaceOp.index && insertBeforeOp.index <= replaceOp.lastIndex) { rewrites[insertBeforeOp.instructionIndex] = null; } } IList<RewriteOperation> kindOfOps2 = GetKindOfOps(rewrites, typeof(ReplaceOp), i); for (int k = 0; k < kindOfOps2.Count; k++) { ReplaceOp replaceOp2 = (ReplaceOp)kindOfOps2[k]; if (replaceOp2.index >= replaceOp.index && replaceOp2.lastIndex <= replaceOp.lastIndex) { rewrites[replaceOp2.instructionIndex] = null; continue; } bool flag = replaceOp2.lastIndex < replaceOp.index || replaceOp2.index > replaceOp.lastIndex; bool flag2 = replaceOp2.index == replaceOp.index && replaceOp2.lastIndex == replaceOp.lastIndex; if (replaceOp2.text == null && replaceOp.text == null && !flag) { rewrites[replaceOp2.instructionIndex] = null; replaceOp.index = Math.Min(replaceOp2.index, replaceOp.index); replaceOp.lastIndex = Math.Max(replaceOp2.lastIndex, replaceOp.lastIndex); Console.WriteLine("new rop " + replaceOp); } else if (!flag && !flag2) { throw new ArgumentException(string.Concat("replace op boundaries of ", replaceOp, " overlap with previous ", replaceOp2)); } } } for (int l = 0; l < rewrites.Count; l++) { RewriteOperation rewriteOperation2 = rewrites[l]; if (rewriteOperation2 == null || !(rewriteOperation2 is InsertBeforeOp)) { continue; } InsertBeforeOp insertBeforeOp2 = (InsertBeforeOp)rewrites[l]; IList<RewriteOperation> kindOfOps3 = GetKindOfOps(rewrites, typeof(InsertBeforeOp), l); for (int m = 0; m < kindOfOps3.Count; m++) { InsertBeforeOp insertBeforeOp3 = (InsertBeforeOp)kindOfOps3[m]; if (insertBeforeOp3.index == insertBeforeOp2.index) { insertBeforeOp2.text = CatOpText(insertBeforeOp2.text, insertBeforeOp3.text); rewrites[insertBeforeOp3.instructionIndex] = null; } } IList<RewriteOperation> kindOfOps4 = GetKindOfOps(rewrites, typeof(ReplaceOp), l); for (int n = 0; n < kindOfOps4.Count; n++) { ReplaceOp replaceOp3 = (ReplaceOp)kindOfOps4[n]; if (insertBeforeOp2.index == replaceOp3.index) { replaceOp3.text = CatOpText(insertBeforeOp2.text, replaceOp3.text); rewrites[l] = null; } else if (insertBeforeOp2.index >= replaceOp3.index && insertBeforeOp2.index <= replaceOp3.lastIndex) { throw new ArgumentException(string.Concat("insert op ", insertBeforeOp2, " within boundaries of previous ", replaceOp3)); } } } IDictionary<int, RewriteOperation> dictionary = new Dictionary<int, RewriteOperation>(); for (int num = 0; num < rewrites.Count; num++) { RewriteOperation rewriteOperation3 = rewrites[num]; if (rewriteOperation3 != null) { if (dictionary.TryGetValue(rewriteOperation3.index, out var value) && value != null) { throw new Exception("should only be one op per index"); } dictionary[rewriteOperation3.index] = rewriteOperation3; } } return dictionary; } protected virtual string CatOpText(object a, object b) { return string.Concat(a, b); } protected virtual IList<RewriteOperation> GetKindOfOps(IList<RewriteOperation> rewrites, Type kind) { return GetKindOfOps(rewrites, kind, rewrites.Count); } protected virtual IList<RewriteOperation> GetKindOfOps(IList<RewriteOperation> rewrites, Type kind, int before) { IList<RewriteOperation> list = new List<RewriteOperation>(); for (int i = 0; i < before && i < rewrites.Count; i++) { RewriteOperation rewriteOperation = rewrites[i]; if (rewriteOperation != null && (object)rewriteOperation.GetType() == kind) { list.Add(rewriteOperation); } } return list; } public virtual string ToDebugString() { return ToDebugString(0, Count - 1); } public virtual string ToDebugString(int start, int end) { StringBuilder stringBuilder = new StringBuilder(); for (int i = start; i >= 0 && i <= end && i < _tokens.Count; i++) { stringBuilder.Append(Get(i)); } return stringBuilder.ToString(); } } public static class Tokens { public static readonly IToken Skip = new CommonToken(0); } public static class TokenTypes { public const int EndOfFile = -1; public const int Invalid = 0; public const int EndOfRule = 1; public const int Down = 2; public const int Up = 3; public const int Min = 4; } public class UnbufferedTokenStream : LookaheadStream<IToken>, ITokenStream, IIntStream, ITokenStreamInformation { [CLSCompliant(false)] protected ITokenSource tokenSource; protected int tokenIndex; protected int channel; private readonly ListStack<IToken> _realTokens = new ListStack<IToken> { null }; public ITokenSource TokenSource => tokenSource; public string SourceName => TokenSource.SourceName; public IToken LastToken => LB(1); public IToken LastRealToken => _realTokens.Peek(); public int MaxLookBehind => 1; public UnbufferedTokenStream(ITokenSource tokenSource) { this.tokenSource = tokenSource; } public override int Mark() { _realTokens.Push(_realTokens.Peek()); return base.Mark(); } public override void Release(int marker) { base.Release(marker); _realTokens.Pop(); } public override void Clear() { _realTokens.Clear(); _realTokens.Push(null); } public override void Consume() { base.Consume(); if (base.PreviousElement != null && base.PreviousElement.Line > 0) { _realTokens[_realTokens.Count - 1] = base.PreviousElement; } } public override IToken NextElement() { IToken token = tokenSource.NextToken(); token.TokenIndex = tokenIndex++; return token; } public override bool IsEndOfFile(IToken o) { return o.Type == -1; } public IToken Get(int i) { throw new NotSupportedException("Absolute token indexes are meaningless in an unbuffered stream"); } public int LA(int i) { return LT(i).Type; } public string ToString(int start, int stop) { return "n/a"; } public string ToString(IToken start, IToken stop) { return "n/a"; } } [Serializable] public class UnwantedTokenException : MismatchedTokenException { public virtual IToken UnexpectedToken => base.Token; public UnwantedTokenException() { } public UnwantedTokenException(string message) : base(message) { } public UnwantedTokenException(string message, Exception innerException) : base(message, innerException) { } public UnwantedTokenException(int expecting, IIntStream input) : base(expecting, input) { } public UnwantedTokenException(int expecting, IIntStream input, IList<string> tokenNames) : base(expecting, input, tokenNames) { } public UnwantedTokenException(string message, int expecting, IIntStream input, IList<string> tokenNames) : base(message, expecting, input, tokenNames) { } public UnwantedTokenException(string message, int expecting, IIntStream input, IList<string> tokenNames, Exception innerException) : base(message, expecting, input, tokenNames, innerE
plugins/Libs/NCalc.dll
Decompiled 10 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Text; using System.Threading; using Antlr.Runtime; using Antlr.Runtime.Tree; using NCalc.Domain; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyFileVersion("3.5.0.4")] [assembly: AssemblyInformationalVersion("3.5.0+cbc3cfcd0b")] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = "")] [assembly: AssemblyCompany("https://github.com/ncalc")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyCopyright("Sebastien Ros and contributors")] [assembly: AssemblyDescription("NCalc is a mathematical expressions evaluator in .NET. NCalc can parse any expression and evaluate the result, including static or dynamic parameters and custom functions. This version targets .NET Standard 2.0 framework.")] [assembly: AssemblyProduct("NCalc")] [assembly: AssemblyTitle("NCalc")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/ncalc/ncalc.git")] [assembly: AssemblyVersion("3.5.0.0")] [GeneratedCode("Nerdbank.GitVersioning.Tasks", "3.4.244.2758")] [ExcludeFromCodeCoverage] internal static class ThisAssembly { internal const string AssemblyConfiguration = "Release"; internal const string AssemblyFileVersion = "3.5.0.4"; internal const string AssemblyInformationalVersion = "3.5.0+cbc3cfcd0b"; internal const string AssemblyName = "NCalc"; internal const string AssemblyTitle = "NCalc"; internal const string AssemblyVersion = "3.5.0.0"; internal static readonly DateTime GitCommitDate = new DateTime(637904536960000000L, DateTimeKind.Utc); internal const string GitCommitId = "cbc3cfcd0b440d3378cde3ecdf0183064ab15f85"; internal const bool IsPrerelease = false; internal const bool IsPublicRelease = true; internal const string RootNamespace = "NCalc"; } namespace NCalc { public delegate void EvaluateFunctionHandler(string name, FunctionArgs args); public delegate void EvaluateParameterHandler(string name, ParameterArgs args); public class EvaluationException : ApplicationException { public EvaluationException(string message) : base(message) { } public EvaluationException(string message, Exception innerException) : base(message, innerException) { } } [Flags] public enum EvaluateOptions { None = 1, IgnoreCase = 2, NoCache = 4, IterateParameters = 8, RoundAwayFromZero = 0x10 } public class Expression { protected string OriginalExpression; protected CultureInfo CultureInfo; private static bool _cacheEnabled = true; private static Dictionary<string, WeakReference> _compiledExpressions = new Dictionary<string, WeakReference>(); private static readonly ReaderWriterLock Rwl = new ReaderWriterLock(); protected Dictionary<string, IEnumerator> ParameterEnumerators; protected Dictionary<string, object> ParametersBackup; private Dictionary<string, object> _parameters; public EvaluateOptions Options { get; set; } public static bool CacheEnabled { get { return _cacheEnabled; } set { _cacheEnabled = value; if (!CacheEnabled) { _compiledExpressions = new Dictionary<string, WeakReference>(); } } } public string Error { get; private set; } public LogicalExpression ParsedExpression { get; private set; } public Dictionary<string, object> Parameters { get { return _parameters ?? (_parameters = new Dictionary<string, object>()); } set { _parameters = value; } } public event EvaluateFunctionHandler EvaluateFunction; public event EvaluateParameterHandler EvaluateParameter; public Expression(string expression) : this(expression, EvaluateOptions.None, CultureInfo.CurrentCulture) { } public Expression(string expression, CultureInfo cultureInfo) : this(expression, EvaluateOptions.None, cultureInfo) { } public Expression(string expression, EvaluateOptions options) : this(expression, options, CultureInfo.CurrentCulture) { } public Expression(string expression, EvaluateOptions options, CultureInfo cultureInfo) { if (string.IsNullOrEmpty(expression)) { throw new ArgumentException("Expression can't be empty", "expression"); } OriginalExpression = expression; Options = options; CultureInfo = cultureInfo; } public Expression(LogicalExpression expression) : this(expression, EvaluateOptions.None, CultureInfo.CurrentCulture) { } public Expression(LogicalExpression expression, EvaluateOptions options, CultureInfo cultureInfo) { if (expression == null) { throw new ArgumentException("Expression can't be null", "expression"); } ParsedExpression = expression; Options = options; CultureInfo = cultureInfo; } private static void CleanCache() { List<string> list = new List<string>(); try { Rwl.AcquireWriterLock(-1); foreach (KeyValuePair<string, WeakReference> compiledExpression in _compiledExpressions) { if (!compiledExpression.Value.IsAlive) { list.Add(compiledExpression.Key); } } foreach (string item in list) { _compiledExpressions.Remove(item); } } finally { Rwl.ReleaseReaderLock(); } } public static LogicalExpression Compile(string expression, bool nocache) { //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown LogicalExpression logicalExpression = null; if (_cacheEnabled && !nocache) { try { Rwl.AcquireReaderLock(-1); if (_compiledExpressions.ContainsKey(expression)) { WeakReference weakReference = _compiledExpressions[expression]; logicalExpression = weakReference.Target as LogicalExpression; if (weakReference.IsAlive && logicalExpression != null) { return logicalExpression; } } } finally { Rwl.ReleaseReaderLock(); } } if (logicalExpression == null) { NCalcParser nCalcParser = new NCalcParser((ITokenStream)new CommonTokenStream((ITokenSource)(object)new NCalcLexer((ICharStream)new ANTLRStringStream(expression)))); logicalExpression = nCalcParser.GetExpression(); if (nCalcParser.Errors != null && nCalcParser.Errors.Count > 0) { throw new EvaluationException(string.Join(Environment.NewLine, nCalcParser.Errors.ToArray())); } if (_cacheEnabled && !nocache) { try { Rwl.AcquireWriterLock(-1); _compiledExpressions[expression] = new WeakReference(logicalExpression); } finally { Rwl.ReleaseWriterLock(); } CleanCache(); } } return logicalExpression; } public bool HasErrors() { try { if (ParsedExpression == null) { ParsedExpression = Compile(OriginalExpression, (Options & EvaluateOptions.NoCache) == EvaluateOptions.NoCache); } return ParsedExpression != null && Error != null; } catch (Exception ex) { Error = ex.Message; return true; } } public object Evaluate() { if (HasErrors()) { throw new EvaluationException(Error); } if (ParsedExpression == null) { ParsedExpression = Compile(OriginalExpression, (Options & EvaluateOptions.NoCache) == EvaluateOptions.NoCache); } EvaluationVisitor evaluationVisitor = new EvaluationVisitor(Options, CultureInfo); evaluationVisitor.EvaluateFunction += this.EvaluateFunction; evaluationVisitor.EvaluateParameter += this.EvaluateParameter; evaluationVisitor.Parameters = Parameters; if ((Options & EvaluateOptions.IterateParameters) == EvaluateOptions.IterateParameters) { int num = -1; ParametersBackup = new Dictionary<string, object>(); foreach (string key in Parameters.Keys) { ParametersBackup.Add(key, Parameters[key]); } ParameterEnumerators = new Dictionary<string, IEnumerator>(); foreach (object value in Parameters.Values) { if (!(value is IEnumerable)) { continue; } int num2 = 0; foreach (object item in (IEnumerable)value) { _ = item; num2++; } if (num == -1) { num = num2; } else if (num2 != num) { throw new EvaluationException("When IterateParameters option is used, IEnumerable parameters must have the same number of items"); } } foreach (string key2 in Parameters.Keys) { if (Parameters[key2] is IEnumerable enumerable) { ParameterEnumerators.Add(key2, enumerable.GetEnumerator()); } } List<object> list = new List<object>(); for (int i = 0; i < num; i++) { foreach (string key3 in ParameterEnumerators.Keys) { IEnumerator enumerator5 = ParameterEnumerators[key3]; enumerator5.MoveNext(); Parameters[key3] = enumerator5.Current; } ParsedExpression.Accept(evaluationVisitor); list.Add(evaluationVisitor.Result); } return list; } ParsedExpression.Accept(evaluationVisitor); return evaluationVisitor.Result; } } public class FunctionArgs : EventArgs { private object _result; private Expression[] _parameters = new Expression[0]; public object Result { get { return _result; } set { _result = value; HasResult = true; } } public bool HasResult { get; set; } public Expression[] Parameters { get { return _parameters; } set { _parameters = value; } } public object[] EvaluateParameters() { object[] array = new object[_parameters.Length]; for (int i = 0; i < array.Length; i++) { array[i] = _parameters[i].Evaluate(); } return array; } } [GeneratedCode("ANTLR", "3.5.0.2")] [CLSCompliant(false)] public class NCalcLexer : Lexer { private class DFA10 : DFA { private const string DFA10_eotS = "\u0003\uffff\u0001\u0006\u0003\uffff"; private const string DFA10_eofS = "\a\uffff"; private const string DFA10_minS = "\u0002.\u0001\uffff\u00010\u0003\uffff"; private const string DFA10_maxS = "\u00019\u0001e\u0001\uffff\u00019\u0003\uffff"; private const string DFA10_acceptS = "\u0002\uffff\u0001\u0001\u0001\uffff\u0001\u0003\u0001\u0001\u0001\u0002"; private const string DFA10_specialS = "\a\uffff}>"; private static readonly string[] DFA10_transitionS; private static readonly short[] DFA10_eot; private static readonly short[] DFA10_eof; private static readonly char[] DFA10_min; private static readonly char[] DFA10_max; private static readonly short[] DFA10_accept; private static readonly short[] DFA10_special; private static readonly short[][] DFA10_transition; public override string Description => "262:1: FLOAT : ( ( DIGIT )* '.' ( DIGIT )+ ( EXPONENT )? | ( DIGIT )+ '.' ( DIGIT )* ( EXPONENT )? | ( DIGIT )+ EXPONENT );"; static DFA10() { DFA10_transitionS = new string[7] { "\u0001\u0002\u0001\uffff\n\u0001", "\u0001\u0003\u0001\uffff\n\u0001\v\uffff\u0001\u0004\u001f\uffff\u0001\u0004", "", "\n\u0005", "", "", "" }; DFA10_eot = DFA.UnpackEncodedString("\u0003\uffff\u0001\u0006\u0003\uffff"); DFA10_eof = DFA.UnpackEncodedString("\a\uffff"); DFA10_min = DFA.UnpackEncodedStringToUnsignedChars("\u0002.\u0001\uffff\u00010\u0003\uffff"); DFA10_max = DFA.UnpackEncodedStringToUnsignedChars("\u00019\u0001e\u0001\uffff\u00019\u0003\uffff"); DFA10_accept = DFA.UnpackEncodedString("\u0002\uffff\u0001\u0001\u0001\uffff\u0001\u0003\u0001\u0001\u0001\u0002"); DFA10_special = DFA.UnpackEncodedString("\a\uffff}>"); int num = DFA10_transitionS.Length; DFA10_transition = new short[num][]; for (int i = 0; i < num; i++) { DFA10_transition[i] = DFA.UnpackEncodedString(DFA10_transitionS[i]); } } public DFA10(BaseRecognizer recognizer) { base.recognizer = recognizer; base.decisionNumber = 10; base.eot = DFA10_eot; base.eof = DFA10_eof; base.min = DFA10_min; base.max = DFA10_max; base.accept = DFA10_accept; base.special = DFA10_special; base.transition = DFA10_transition; } public override void Error(NoViableAltException nvae) { } } private class DFA17 : DFA { private const string DFA17_eotS = "\u0001\uffff\u0001!\u0001\uffff\u0001#\u0002\uffff\u0001%\u0005\uffff\u0001)\u0001+\u0001.\u0002\uffff\u00010\u0001\uffff\u0006\u001e\u00018\u0017\uffff\u0003\u001e\u0001<\u0002\u001e\u0002\uffff\u0002\u001e\u0001@\u0001\uffff\u0001A\u0001B\u0001\u001e\u0003\uffff\u0001D\u0001\uffff"; private const string DFA17_eofS = "E\uffff"; private const string DFA17_minS = "\u0001\t\u0001=\u0001\uffff\u0001&\u0002\uffff\u0001*\u0005\uffff\u0001<\u0002=\u0002\uffff\u0001|\u0001\uffff\u0001R\u0001A\u0001N\u0001R\u0001O\u0001+\u0001.\u0017\uffff\u0001U\u0001L\u0001D\u00010\u0001T\u00010\u0002\uffff\u0001E\u0001S\u00010\u0001\uffff\u00020\u0001E\u0003\uffff\u00010\u0001\uffff"; private const string DFA17_maxS = "\u0001~\u0001=\u0001\uffff\u0001&\u0002\uffff\u0001*\u0005\uffff\u0001>\u0001=\u0001>\u0002\uffff\u0001|\u0001\uffff\u0001r\u0001a\u0001n\u0001r\u0001o\u00019\u0001e\u0017\uffff\u0001u\u0001l\u0001d\u0001z\u0001t\u00019\u0002\uffff\u0001e\u0001s\u0001z\u0001\uffff\u0002z\u0001e\u0003\uffff\u0001z\u0001\uffff"; private const string DFA17_acceptS = "\u0002\uffff\u0001\u0003\u0001\uffff\u0001\u0006\u0001\a\u0001\uffff\u0001\n\u0001\v\u0001\f\u0001\r\u0001\u000e\u0003\uffff\u0001\u0018\u0001\u0019\u0001\uffff\u0001\u001c\a\uffff\u0001$\u0001%\u0001&\u0001'\u0001\"\u0001)\u0001\u0002\u0001\u0001\u0001\u0004\u0001\u0005\u0001\t\u0001\b\u0001\u0010\u0001\u0011\u0001\u0012\u0001\u000f\u0001\u0014\u0001\u0013\u0001\u0016\u0001\u0017\u0001\u0015\u0001\u001b\u0001\u001a\u0006\uffff\u0001(\u0001#\u0003\uffff\u0001 \u0003\uffff\u0001\u001f\u0001!\u0001\u001d\u0001\uffff\u0001\u001e"; private const string DFA17_specialS = "E\uffff}>"; private static readonly string[] DFA17_transitionS; private static readonly short[] DFA17_eot; private static readonly short[] DFA17_eof; private static readonly char[] DFA17_min; private static readonly char[] DFA17_max; private static readonly short[] DFA17_accept; private static readonly short[] DFA17_special; private static readonly short[][] DFA17_transition; public override string Description => "1:1: Tokens : ( T__48 | T__49 | T__50 | T__51 | T__52 | T__53 | T__54 | T__55 | T__56 | T__57 | T__58 | T__59 | T__60 | T__61 | T__62 | T__63 | T__64 | T__65 | T__66 | T__67 | T__68 | T__69 | T__70 | T__71 | T__72 | T__73 | T__74 | T__75 | TRUE | FALSE | AND | OR | NOT | ID | INTEGER | FLOAT | STRING | DATETIME | NAME | EXPONENT | WS );"; static DFA17() { DFA17_transitionS = new string[69] { "\u0002\u001f\u0001\uffff\u0002\u001f\u0012\uffff\u0001\u001f\u0001\u0001\u0001\uffff\u0001\u001c\u0001\uffff\u0001\u0002\u0001\u0003\u0001\u001b\u0001\u0004\u0001\u0005\u0001\u0006\u0001\a\u0001\b\u0001\t\u0001\u001a\u0001\n\n\u0019\u0001\v\u0001\uffff\u0001\f\u0001\r\u0001\u000e\u0001\u000f\u0001\uffff\u0001\u0015\u0003\u001e\u0001\u0018\u0001\u0014\a\u001e\u0001\u0017\u0001\u0016\u0004\u001e\u0001\u0013\u0006\u001e\u0001\u001d\u0002\uffff\u0001\u0010\u0001\u001e\u0001\uffff\u0001\u0015\u0003\u001e\u0001\u0018\u0001\u0014\a\u001e\u0001\u0017\u0001\u0016\u0004\u001e\u0001\u0013\u0006\u001e\u0001\uffff\u0001\u0011\u0001\uffff\u0001\u0012", "\u0001 ", "", "\u0001\"", "", "", "\u0001$", "", "", "", "", "", "\u0001&\u0001'\u0001(", "\u0001*", "\u0001,\u0001-", "", "", "\u0001/", "", "\u00011\u001f\uffff\u00011", "\u00012\u001f\uffff\u00012", "\u00013\u001f\uffff\u00013", "\u00014\u001f\uffff\u00014", "\u00015\u001f\uffff\u00015", "\u00017\u0001\uffff\u00017\u0002\uffff\n6", "\u0001\u001a\u0001\uffff\n\u0019\v\uffff\u0001\u001a\u001f\uffff\u0001\u001a", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "\u00019\u001f\uffff\u00019", "\u0001:\u001f\uffff\u0001:", "\u0001;\u001f\uffff\u0001;", "\n\u001e\a\uffff\u001a\u001e\u0004\uffff\u0001\u001e\u0001\uffff\u001a\u001e", "\u0001=\u001f\uffff\u0001=", "\n6", "", "", "\u0001>\u001f\uffff\u0001>", "\u0001?\u001f\uffff\u0001?", "\n\u001e\a\uffff\u001a\u001e\u0004\uffff\u0001\u001e\u0001\uffff\u001a\u001e", "", "\n\u001e\a\uffff\u001a\u001e\u0004\uffff\u0001\u001e\u0001\uffff\u001a\u001e", "\n\u001e\a\uffff\u001a\u001e\u0004\uffff\u0001\u001e\u0001\uffff\u001a\u001e", "\u0001C\u001f\uffff\u0001C", "", "", "", "\n\u001e\a\uffff\u001a\u001e\u0004\uffff\u0001\u001e\u0001\uffff\u001a\u001e", "" }; DFA17_eot = DFA.UnpackEncodedString("\u0001\uffff\u0001!\u0001\uffff\u0001#\u0002\uffff\u0001%\u0005\uffff\u0001)\u0001+\u0001.\u0002\uffff\u00010\u0001\uffff\u0006\u001e\u00018\u0017\uffff\u0003\u001e\u0001<\u0002\u001e\u0002\uffff\u0002\u001e\u0001@\u0001\uffff\u0001A\u0001B\u0001\u001e\u0003\uffff\u0001D\u0001\uffff"); DFA17_eof = DFA.UnpackEncodedString("E\uffff"); DFA17_min = DFA.UnpackEncodedStringToUnsignedChars("\u0001\t\u0001=\u0001\uffff\u0001&\u0002\uffff\u0001*\u0005\uffff\u0001<\u0002=\u0002\uffff\u0001|\u0001\uffff\u0001R\u0001A\u0001N\u0001R\u0001O\u0001+\u0001.\u0017\uffff\u0001U\u0001L\u0001D\u00010\u0001T\u00010\u0002\uffff\u0001E\u0001S\u00010\u0001\uffff\u00020\u0001E\u0003\uffff\u00010\u0001\uffff"); DFA17_max = DFA.UnpackEncodedStringToUnsignedChars("\u0001~\u0001=\u0001\uffff\u0001&\u0002\uffff\u0001*\u0005\uffff\u0001>\u0001=\u0001>\u0002\uffff\u0001|\u0001\uffff\u0001r\u0001a\u0001n\u0001r\u0001o\u00019\u0001e\u0017\uffff\u0001u\u0001l\u0001d\u0001z\u0001t\u00019\u0002\uffff\u0001e\u0001s\u0001z\u0001\uffff\u0002z\u0001e\u0003\uffff\u0001z\u0001\uffff"); DFA17_accept = DFA.UnpackEncodedString("\u0002\uffff\u0001\u0003\u0001\uffff\u0001\u0006\u0001\a\u0001\uffff\u0001\n\u0001\v\u0001\f\u0001\r\u0001\u000e\u0003\uffff\u0001\u0018\u0001\u0019\u0001\uffff\u0001\u001c\a\uffff\u0001$\u0001%\u0001&\u0001'\u0001\"\u0001)\u0001\u0002\u0001\u0001\u0001\u0004\u0001\u0005\u0001\t\u0001\b\u0001\u0010\u0001\u0011\u0001\u0012\u0001\u000f\u0001\u0014\u0001\u0013\u0001\u0016\u0001\u0017\u0001\u0015\u0001\u001b\u0001\u001a\u0006\uffff\u0001(\u0001#\u0003\uffff\u0001 \u0003\uffff\u0001\u001f\u0001!\u0001\u001d\u0001\uffff\u0001\u001e"); DFA17_special = DFA.UnpackEncodedString("E\uffff}>"); int num = DFA17_transitionS.Length; DFA17_transition = new short[num][]; for (int i = 0; i < num; i++) { DFA17_transition[i] = DFA.UnpackEncodedString(DFA17_transitionS[i]); } } public DFA17(BaseRecognizer recognizer) { base.recognizer = recognizer; base.decisionNumber = 17; base.eot = DFA17_eot; base.eof = DFA17_eof; base.min = DFA17_min; base.max = DFA17_max; base.accept = DFA17_accept; base.special = DFA17_special; base.transition = DFA17_transition; } public override void Error(NoViableAltException nvae) { } } public const int EOF = -1; public const int A = 4; public const int AND = 5; public const int B = 6; public const int C = 7; public const int D = 8; public const int DATETIME = 9; public const int DIGIT = 10; public const int E = 11; public const int EXPONENT = 12; public const int EscapeSequence = 13; public const int F = 14; public const int FALSE = 15; public const int FLOAT = 16; public const int G = 17; public const int H = 18; public const int HexDigit = 19; public const int I = 20; public const int ID = 21; public const int INTEGER = 22; public const int J = 23; public const int K = 24; public const int L = 25; public const int LETTER = 26; public const int M = 27; public const int N = 28; public const int NAME = 29; public const int NOT = 30; public const int O = 31; public const int OR = 32; public const int P = 33; public const int Q = 34; public const int R = 35; public const int S = 36; public const int STRING = 37; public const int T = 38; public const int TRUE = 39; public const int U = 40; public const int UnicodeEscape = 41; public const int V = 42; public const int W = 43; public const int WS = 44; public const int X = 45; public const int Y = 46; public const int Z = 47; public const int T__48 = 48; public const int T__49 = 49; public const int T__50 = 50; public const int T__51 = 51; public const int T__52 = 52; public const int T__53 = 53; public const int T__54 = 54; public const int T__55 = 55; public const int T__56 = 56; public const int T__57 = 57; public const int T__58 = 58; public const int T__59 = 59; public const int T__60 = 60; public const int T__61 = 61; public const int T__62 = 62; public const int T__63 = 63; public const int T__64 = 64; public const int T__65 = 65; public const int T__66 = 66; public const int T__67 = 67; public const int T__68 = 68; public const int T__69 = 69; public const int T__70 = 70; public const int T__71 = 71; public const int T__72 = 72; public const int T__73 = 73; public const int T__74 = 74; public const int T__75 = 75; private DFA10 dfa10; private DFA17 dfa17; public override string GrammarFileName => "NCalc.g"; public NCalcLexer() { } public NCalcLexer(ICharStream input) : this(input, new RecognizerSharedState()) { }//IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown public NCalcLexer(ICharStream input, RecognizerSharedState state) : base(input, state) { } [GrammarRule("T__48")] private void mT__48() { try { int type = 48; int channel = 0; ((Lexer)this).Match(33); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__49")] private void mT__49() { try { int type = 49; int channel = 0; ((Lexer)this).Match("!="); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__50")] private void mT__50() { try { int type = 50; int channel = 0; ((Lexer)this).Match(37); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__51")] private void mT__51() { try { int type = 51; int channel = 0; ((Lexer)this).Match("&&"); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__52")] private void mT__52() { try { int type = 52; int channel = 0; ((Lexer)this).Match(38); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__53")] private void mT__53() { try { int type = 53; int channel = 0; ((Lexer)this).Match(40); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__54")] private void mT__54() { try { int type = 54; int channel = 0; ((Lexer)this).Match(41); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__55")] private void mT__55() { try { int type = 55; int channel = 0; ((Lexer)this).Match(42); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__56")] private void mT__56() { try { int type = 56; int channel = 0; ((Lexer)this).Match("**"); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__57")] private void mT__57() { try { int type = 57; int channel = 0; ((Lexer)this).Match(43); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__58")] private void mT__58() { try { int type = 58; int channel = 0; ((Lexer)this).Match(44); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__59")] private void mT__59() { try { int type = 59; int channel = 0; ((Lexer)this).Match(45); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__60")] private void mT__60() { try { int type = 60; int channel = 0; ((Lexer)this).Match(47); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__61")] private void mT__61() { try { int type = 61; int channel = 0; ((Lexer)this).Match(58); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__62")] private void mT__62() { try { int type = 62; int channel = 0; ((Lexer)this).Match(60); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__63")] private void mT__63() { try { int type = 63; int channel = 0; ((Lexer)this).Match("<<"); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__64")] private void mT__64() { try { int type = 64; int channel = 0; ((Lexer)this).Match("<="); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__65")] private void mT__65() { try { int type = 65; int channel = 0; ((Lexer)this).Match("<>"); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__66")] private void mT__66() { try { int type = 66; int channel = 0; ((Lexer)this).Match(61); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__67")] private void mT__67() { try { int type = 67; int channel = 0; ((Lexer)this).Match("=="); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__68")] private void mT__68() { try { int type = 68; int channel = 0; ((Lexer)this).Match(62); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__69")] private void mT__69() { try { int type = 69; int channel = 0; ((Lexer)this).Match(">="); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__70")] private void mT__70() { try { int type = 70; int channel = 0; ((Lexer)this).Match(">>"); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__71")] private void mT__71() { try { int type = 71; int channel = 0; ((Lexer)this).Match(63); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__72")] private void mT__72() { try { int type = 72; int channel = 0; ((Lexer)this).Match(94); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__73")] private void mT__73() { try { int type = 73; int channel = 0; ((Lexer)this).Match(124); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__74")] private void mT__74() { try { int type = 74; int channel = 0; ((Lexer)this).Match("||"); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("T__75")] private void mT__75() { try { int type = 75; int channel = 0; ((Lexer)this).Match(126); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("TRUE")] private void mTRUE() { try { int type = 39; int channel = 0; mT(); mR(); mU(); mE(); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("FALSE")] private void mFALSE() { try { int type = 15; int channel = 0; mF(); mA(); mL(); mS(); mE(); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("AND")] private void mAND() { try { int type = 5; int channel = 0; mA(); mN(); mD(); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("OR")] private void mOR() { try { int type = 32; int channel = 0; mO(); mR(); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("NOT")] private void mNOT() { try { int type = 30; int channel = 0; mN(); mO(); mT(); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("ID")] private void mID() { try { int type = 21; int channel = 0; mLETTER(); try { while (true) { int num = 2; try { int num2 = ((IIntStream)base.input).LA(1); if ((num2 < 48 || num2 > 57) && (num2 < 65 || num2 > 90)) { switch (num2) { case 95: case 97: case 98: case 99: case 100: case 101: case 102: case 103: case 104: case 105: case 106: case 107: case 108: case 109: case 110: case 111: case 112: case 113: case 114: case 115: case 116: case 117: case 118: case 119: case 120: case 121: case 122: break; default: goto end_IL_000d; } } num = 1; end_IL_000d:; } finally { } if (num != 1) { break; } ((IIntStream)base.input).Consume(); } } finally { } ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("INTEGER")] private void mINTEGER() { //IL_0046: Unknown result type (might be due to invalid IL or missing references) try { int type = 22; int channel = 0; int num = 0; try { while (true) { int num2 = 2; try { int num3 = ((IIntStream)base.input).LA(1); if (num3 >= 48 && num3 <= 57) { num2 = 1; } } finally { } if (num2 != 1) { break; } ((IIntStream)base.input).Consume(); num++; } if (num < 1) { throw new EarlyExitException(2, (IIntStream)(object)base.input); } } finally { } ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("FLOAT")] private void mFLOAT() { //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) try { int type = 16; int channel = 0; int num = 3; try { num = ((DFA)dfa10).Predict((IIntStream)(object)base.input); } catch (NoViableAltException) { throw; } finally { } switch (num) { case 1: { try { while (true) { int num5 = 2; try { int num6 = ((IIntStream)base.input).LA(1); if (num6 >= 48 && num6 <= 57) { num5 = 1; } } finally { } if (num5 != 1) { break; } ((IIntStream)base.input).Consume(); } } finally { } ((Lexer)this).Match(46); int num7 = 0; try { while (true) { int num8 = 2; try { int num9 = ((IIntStream)base.input).LA(1); if (num9 >= 48 && num9 <= 57) { num8 = 1; } } finally { } if (num8 != 1) { break; } ((IIntStream)base.input).Consume(); num7++; } if (num7 < 1) { throw new EarlyExitException(4, (IIntStream)(object)base.input); } } finally { } int num10 = 2; try { try { int num11 = ((IIntStream)base.input).LA(1); if (num11 == 69 || num11 == 101) { num10 = 1; } } finally { } if (num10 == 1) { mEXPONENT(); } } finally { } break; } case 2: { int num12 = 0; try { while (true) { int num13 = 2; try { int num14 = ((IIntStream)base.input).LA(1); if (num14 >= 48 && num14 <= 57) { num13 = 1; } } finally { } if (num13 != 1) { break; } ((IIntStream)base.input).Consume(); num12++; } if (num12 < 1) { throw new EarlyExitException(6, (IIntStream)(object)base.input); } } finally { } ((Lexer)this).Match(46); try { while (true) { int num15 = 2; try { int num16 = ((IIntStream)base.input).LA(1); if (num16 >= 48 && num16 <= 57) { num15 = 1; } } finally { } if (num15 != 1) { break; } ((IIntStream)base.input).Consume(); } } finally { } int num17 = 2; try { try { int num18 = ((IIntStream)base.input).LA(1); if (num18 == 69 || num18 == 101) { num17 = 1; } } finally { } if (num17 == 1) { mEXPONENT(); } } finally { } break; } case 3: { int num2 = 0; try { while (true) { int num3 = 2; try { int num4 = ((IIntStream)base.input).LA(1); if (num4 >= 48 && num4 <= 57) { num3 = 1; } } finally { } if (num3 != 1) { break; } ((IIntStream)base.input).Consume(); num2++; } if (num2 < 1) { throw new EarlyExitException(9, (IIntStream)(object)base.input); } } finally { } mEXPONENT(); break; } } ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("STRING")] private void mSTRING() { try { int type = 37; int channel = 0; ((Lexer)this).Match(39); try { while (true) { int num = 3; try { int num2 = ((IIntStream)base.input).LA(1); switch (num2) { case 92: num = 1; goto end_IL_000f; default: if ((num2 >= 40 && num2 <= 91) || (num2 >= 93 && num2 <= 65535)) { break; } goto end_IL_000f; case 32: case 33: case 34: case 35: case 36: case 37: case 38: break; } num = 2; end_IL_000f:; } finally { } switch (num) { case 1: mEscapeSequence(); continue; case 2: ((IIntStream)base.input).Consume(); continue; } break; } } finally { } ((Lexer)this).Match(39); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("DATETIME")] private void mDATETIME() { try { int type = 9; int channel = 0; ((Lexer)this).Match(35); try { while (true) { int num = 2; try { int num2 = ((IIntStream)base.input).LA(1); if ((num2 >= 0 && num2 <= 34) || (num2 >= 36 && num2 <= 65535)) { num = 1; } } finally { } if (num != 1) { break; } ((IIntStream)base.input).Consume(); } } finally { } ((Lexer)this).Match(35); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("NAME")] private void mNAME() { try { int type = 29; int channel = 0; ((Lexer)this).Match(91); try { while (true) { int num = 2; try { int num2 = ((IIntStream)base.input).LA(1); if ((num2 >= 0 && num2 <= 92) || (num2 >= 94 && num2 <= 65535)) { num = 1; } } finally { } if (num != 1) { break; } ((IIntStream)base.input).Consume(); } } finally { } ((Lexer)this).Match(93); ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; } finally { } } [GrammarRule("EXPONENT")] private void mEXPONENT() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown //IL_00c5: Unknown result type (might be due to invalid IL or missing references) try { int type = 12; int channel = 0; if (((IIntStream)base.input).LA(1) == 69 || ((IIntStream)base.input).LA(1) == 101) { ((IIntStream)base.input).Consume(); int num = 2; try { try { int num2 = ((IIntStream)base.input).LA(1); if (num2 == 43 || num2 == 45) { num = 1; } } finally { } if (num == 1) { ((IIntStream)base.input).Consume(); } } finally { } int num3 = 0; try { while (true) { int num4 = 2; try { int num5 = ((IIntStream)base.input).LA(1); if (num5 >= 48 && num5 <= 57) { num4 = 1; } } finally { } if (num4 != 1) { break; } ((IIntStream)base.input).Consume(); num3++; } if (num3 < 1) { throw new EarlyExitException(15, (IIntStream)(object)base.input); } } finally { } ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = channel; return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("LETTER")] private void mLETTER() { //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown try { if ((((IIntStream)base.input).LA(1) >= 65 && ((IIntStream)base.input).LA(1) <= 90) || ((IIntStream)base.input).LA(1) == 95 || (((IIntStream)base.input).LA(1) >= 97 && ((IIntStream)base.input).LA(1) <= 122)) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("DIGIT")] private void mDIGIT() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) >= 48 && ((IIntStream)base.input).LA(1) <= 57) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("EscapeSequence")] private void mEscapeSequence() { //IL_006f: Unknown result type (might be due to invalid IL or missing references) try { ((Lexer)this).Match(92); int num = 6; try { try { num = ((IIntStream)base.input).LA(1) switch { 110 => 1, 114 => 2, 116 => 3, 39 => 4, 92 => 5, 117 => 6, _ => throw new NoViableAltException("", 16, 0, (IIntStream)(object)base.input, 1), }; } finally { } switch (num) { case 1: ((Lexer)this).Match(110); break; case 2: ((Lexer)this).Match(114); break; case 3: ((Lexer)this).Match(116); break; case 4: ((Lexer)this).Match(39); break; case 5: ((Lexer)this).Match(92); break; case 6: mUnicodeEscape(); break; } } finally { } } finally { } } [GrammarRule("HexDigit")] private void mHexDigit() { //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected O, but got Unknown try { if ((((IIntStream)base.input).LA(1) >= 48 && ((IIntStream)base.input).LA(1) <= 57) || (((IIntStream)base.input).LA(1) >= 65 && ((IIntStream)base.input).LA(1) <= 70) || (((IIntStream)base.input).LA(1) >= 97 && ((IIntStream)base.input).LA(1) <= 102)) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("UnicodeEscape")] private void mUnicodeEscape() { try { ((Lexer)this).Match(117); mHexDigit(); mHexDigit(); mHexDigit(); mHexDigit(); } finally { } } [GrammarRule("WS")] private void mWS() { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Expected O, but got Unknown try { int type = 44; int num = 0; if ((((IIntStream)base.input).LA(1) >= 9 && ((IIntStream)base.input).LA(1) <= 10) || (((IIntStream)base.input).LA(1) >= 12 && ((IIntStream)base.input).LA(1) <= 13) || ((IIntStream)base.input).LA(1) == 32) { ((IIntStream)base.input).Consume(); num = 99; ((BaseRecognizer)this).state.type = type; ((BaseRecognizer)this).state.channel = num; return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("A")] private void mA() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 65 || ((IIntStream)base.input).LA(1) == 97) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("B")] private void mB() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 66 || ((IIntStream)base.input).LA(1) == 98) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("C")] private void mC() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 67 || ((IIntStream)base.input).LA(1) == 99) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("D")] private void mD() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 68 || ((IIntStream)base.input).LA(1) == 100) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("E")] private void mE() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 69 || ((IIntStream)base.input).LA(1) == 101) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("F")] private void mF() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 70 || ((IIntStream)base.input).LA(1) == 102) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("G")] private void mG() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 71 || ((IIntStream)base.input).LA(1) == 103) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("H")] private void mH() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 72 || ((IIntStream)base.input).LA(1) == 104) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("I")] private void mI() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 73 || ((IIntStream)base.input).LA(1) == 105) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("J")] private void mJ() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 74 || ((IIntStream)base.input).LA(1) == 106) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("K")] private void mK() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 75 || ((IIntStream)base.input).LA(1) == 107) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("L")] private void mL() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 76 || ((IIntStream)base.input).LA(1) == 108) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("M")] private void mM() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 77 || ((IIntStream)base.input).LA(1) == 109) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("N")] private void mN() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 78 || ((IIntStream)base.input).LA(1) == 110) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("O")] private void mO() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 79 || ((IIntStream)base.input).LA(1) == 111) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("P")] private void mP() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 80 || ((IIntStream)base.input).LA(1) == 112) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("Q")] private void mQ() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 81 || ((IIntStream)base.input).LA(1) == 113) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("R")] private void mR() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 82 || ((IIntStream)base.input).LA(1) == 114) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("S")] private void mS() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 83 || ((IIntStream)base.input).LA(1) == 115) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("T")] private void mT() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 84 || ((IIntStream)base.input).LA(1) == 116) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("U")] private void mU() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 85 || ((IIntStream)base.input).LA(1) == 117) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("V")] private void mV() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 86 || ((IIntStream)base.input).LA(1) == 118) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("W")] private void mW() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 87 || ((IIntStream)base.input).LA(1) == 119) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("X")] private void mX() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 88 || ((IIntStream)base.input).LA(1) == 120) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("Y")] private void mY() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 89 || ((IIntStream)base.input).LA(1) == 121) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } [GrammarRule("Z")] private void mZ() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown try { if (((IIntStream)base.input).LA(1) == 90 || ((IIntStream)base.input).LA(1) == 122) { ((IIntStream)base.input).Consume(); return; } MismatchedSetException val = new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); ((Lexer)this).Recover((RecognitionException)(object)val); throw val; } finally { } } public override void mTokens() { int num = 41; try { num = ((DFA)dfa17).Predict((IIntStream)(object)base.input); } catch (NoViableAltException) { throw; } finally { } switch (num) { case 1: mT__48(); break; case 2: mT__49(); break; case 3: mT__50(); break; case 4: mT__51(); break; case 5: mT__52(); break; case 6: mT__53(); break; case 7: mT__54(); break; case 8: mT__55(); break; case 9: mT__56(); break; case 10: mT__57(); break; case 11: mT__58(); break; case 12: mT__59(); break; case 13: mT__60(); break; case 14: mT__61(); break; case 15: mT__62(); break; case 16: mT__63(); break; case 17: mT__64(); break; case 18: mT__65(); break; case 19: mT__66(); break; case 20: mT__67(); break; case 21: mT__68(); break; case 22: mT__69(); break; case 23: mT__70(); break; case 24: mT__71(); break; case 25: mT__72(); break; case 26: mT__73(); break; case 27: mT__74(); break; case 28: mT__75(); break; case 29: mTRUE(); break; case 30: mFALSE(); break; case 31: mAND(); break; case 32: mOR(); break; case 33: mNOT(); break; case 34: mID(); break; case 35: mINTEGER(); break; case 36: mFLOAT(); break; case 37: mSTRING(); break; case 38: mDATETIME(); break; case 39: mNAME(); break; case 40: mEXPONENT(); break; case 41: mWS(); break; } } protected override void InitDFAs() { ((BaseRecognizer)this).InitDFAs(); dfa10 = new DFA10((BaseRecognizer)(object)this); dfa17 = new DFA17((BaseRecognizer)(object)this); } public override void EmitErrorMessage(string msg) { throw new EvaluationException(msg); } } [GeneratedCode("ANTLR", "3.5.0.2")] [CLSCompliant(false)] public class NCalcParser : Parser { private sealed class ncalcExpression_return : AstParserRuleReturnScope<CommonTree, IToken> { public LogicalExpression value; public ncalcExpression_return(NCalcParser grammar) { } } private sealed class logicalExpression_return : AstParserRuleReturnScope<CommonTree, IToken> { public LogicalExpression value; public logicalExpression_return(NCalcParser grammar) { } } private sealed class conditionalExpression_return : AstParserRuleReturnScope<CommonTree, IToken> { public LogicalExpression value; public conditionalExpression_return(NCalcParser grammar) { } } private sealed class booleanAndExpression_return : AstParserRuleReturnScope<CommonTree, IToken> { public LogicalExpression value; public booleanAndExpression_return(NCalcParser grammar) { } } private sealed class bitwiseOrExpression_return : AstParserRuleReturnScope<CommonTree, IToken> { public LogicalExpression value; public bitwiseOrExpression_return(NCalcParser grammar) { } } private sealed class bitwiseXOrExpression_return : AstParserRuleReturnScope<CommonTree, IToken> { public LogicalExpression value; public bitwiseXOrExpression_return(NCalcParser grammar) { } } private sealed class bitwiseAndExpression_return : AstParserRuleReturnScope<CommonTree, IToken> { public LogicalExpression value; public bitwiseAndExpression_return(NCalcParser grammar) { } } private sealed class equalityExpression_return : AstParserRuleReturnScope<CommonTree, IToken> { public LogicalExpression value; public equalityExpression_return(NCalcParser grammar) { } } private sealed class relationalExpression_return : AstParserRuleReturnScope<CommonTree, IToken> { public LogicalExpression value; public relationalExpression_return(NCalcParser grammar) { } } private sealed class shiftExpression_return : AstParserRuleReturnScope<CommonTree, IToken> { public LogicalExpression value; public shiftExpression_return(NCalcParser grammar) { } } private sealed class additiveExpression_return : AstParserRuleReturnScope<CommonTree, IToken> { public LogicalExpression value; public additiveExpression_return(NCalcParser grammar) { } } private sealed class multiplicativeExpression_return : AstParserRuleReturnScope<CommonTree, IToken> { public LogicalExpression value; public multiplicativeExpression_return(NCalcParser grammar) { } } private sealed class unaryExpression_return : AstParserRuleReturnScope<CommonTree, IToken> { public LogicalExpression value; public unaryExpression_return(NCalcParser grammar) { } } private sealed class exponentialExpression_return : AstParserRuleReturnScope<CommonTree, IToken> { public LogicalExpression value; public exponentialExpression_return(NCalcParser grammar) { } } private sealed class primaryExpression_return : AstParserRuleReturnScope<CommonTree, IToken> { public LogicalExpression value; public primaryExpression_return(NCalcParser grammar) { } } private sealed class value_return : AstParserRuleReturnScope<CommonTree, IToken> { public ValueExpression value; public value_return(NCalcParser grammar) { } } private sealed class identifier_return : AstParserRuleReturnScope<CommonTree, IToken> { public Identifier value; public identifier_return(NCalcParser grammar) { } } private sealed class expressionList_return : AstParserRuleReturnScope<CommonTree, IToken> { public List<LogicalExpression> value; public expressionList_return(NCalcParser grammar) { } } private sealed class arguments_return : AstParserRuleReturnScope<CommonTree, IToken> { public List<LogicalExpression> value; public arguments_return(NCalcParser grammar) { } } private static class Follow { public static readonly BitSet _logicalExpression_in_ncalcExpression73 = new BitSet(new ulong[1]); public static readonly BitSet _EOF_in_ncalcExpression75 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _conditionalExpression_in_logicalExpression95 = new BitSet(new ulong[2] { 2uL, 128uL }); public static readonly BitSet _71_in_logicalExpression101 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _conditionalExpression_in_logicalExpression105 = new BitSet(new ulong[1] { 2305843009213693952uL }); public static readonly BitSet _61_in_logicalExpression107 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _conditionalExpression_in_logicalExpression111 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _booleanAndExpression_in_conditionalExpression138 = new BitSet(new ulong[2] { 4294967298uL, 1024uL }); public static readonly BitSet _set_in_conditionalExpression147 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _conditionalExpression_in_conditionalExpression163 = new BitSet(new ulong[2] { 4294967298uL, 1024uL }); public static readonly BitSet _bitwiseOrExpression_in_booleanAndExpression197 = new BitSet(new ulong[1] { 2251799813685282uL }); public static readonly BitSet _set_in_booleanAndExpression206 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _bitwiseOrExpression_in_booleanAndExpression222 = new BitSet(new ulong[1] { 2251799813685282uL }); public static readonly BitSet _bitwiseXOrExpression_in_bitwiseOrExpression254 = new BitSet(new ulong[2] { 2uL, 512uL }); public static readonly BitSet _73_in_bitwiseOrExpression263 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _bitwiseOrExpression_in_bitwiseOrExpression273 = new BitSet(new ulong[2] { 2uL, 512uL }); public static readonly BitSet _bitwiseAndExpression_in_bitwiseXOrExpression307 = new BitSet(new ulong[2] { 2uL, 256uL }); public static readonly BitSet _72_in_bitwiseXOrExpression316 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _bitwiseAndExpression_in_bitwiseXOrExpression326 = new BitSet(new ulong[2] { 2uL, 256uL }); public static readonly BitSet _equalityExpression_in_bitwiseAndExpression358 = new BitSet(new ulong[1] { 4503599627370498uL }); public static readonly BitSet _52_in_bitwiseAndExpression367 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _equalityExpression_in_bitwiseAndExpression377 = new BitSet(new ulong[1] { 4503599627370498uL }); public static readonly BitSet _relationalExpression_in_equalityExpression411 = new BitSet(new ulong[2] { 562949953421314uL, 14uL }); public static readonly BitSet _set_in_equalityExpression422 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _set_in_equalityExpression439 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _relationalExpression_in_equalityExpression458 = new BitSet(new ulong[2] { 562949953421314uL, 14uL }); public static readonly BitSet _shiftExpression_in_relationalExpression491 = new BitSet(new ulong[2] { 4611686018427387906uL, 49uL }); public static readonly BitSet _62_in_relationalExpression502 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _64_in_relationalExpression512 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _68_in_relationalExpression523 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _69_in_relationalExpression533 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _shiftExpression_in_relationalExpression545 = new BitSet(new ulong[2] { 4611686018427387906uL, 49uL }); public static readonly BitSet _additiveExpression_in_shiftExpression577 = new BitSet(new ulong[2] { 9223372036854775810uL, 64uL }); public static readonly BitSet _63_in_shiftExpression588 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _70_in_shiftExpression598 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _additiveExpression_in_shiftExpression610 = new BitSet(new ulong[2] { 9223372036854775810uL, 64uL }); public static readonly BitSet _multiplicativeExpression_in_additiveExpression642 = new BitSet(new ulong[1] { 720575940379279362uL }); public static readonly BitSet _57_in_additiveExpression653 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _59_in_additiveExpression663 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _multiplicativeExpression_in_additiveExpression675 = new BitSet(new ulong[1] { 720575940379279362uL }); public static readonly BitSet _unaryExpression_in_multiplicativeExpression707 = new BitSet(new ulong[1] { 1190076201532653570uL }); public static readonly BitSet _55_in_multiplicativeExpression718 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _60_in_multiplicativeExpression728 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _50_in_multiplicativeExpression738 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _unaryExpression_in_multiplicativeExpression750 = new BitSet(new ulong[1] { 1190076201532653570uL }); public static readonly BitSet _exponentialExpression_in_unaryExpression776 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _set_in_unaryExpression786 = new BitSet(new ulong[1] { 9007886992769536uL }); public static readonly BitSet _exponentialExpression_in_unaryExpression794 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _75_in_unaryExpression805 = new BitSet(new ulong[1] { 9007886992769536uL }); public static readonly BitSet _exponentialExpression_in_unaryExpression808 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _59_in_unaryExpression818 = new BitSet(new ulong[1] { 9007886992769536uL }); public static readonly BitSet _exponentialExpression_in_unaryExpression820 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _57_in_unaryExpression830 = new BitSet(new ulong[1] { 9007886992769536uL }); public static readonly BitSet _exponentialExpression_in_unaryExpression832 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _primaryExpression_in_exponentialExpression857 = new BitSet(new ulong[1] { 72057594037927938uL }); public static readonly BitSet _56_in_exponentialExpression866 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _unaryExpression_in_exponentialExpression870 = new BitSet(new ulong[1] { 72057594037927938uL }); public static readonly BitSet _53_in_primaryExpression893 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _logicalExpression_in_primaryExpression895 = new BitSet(new ulong[1] { 18014398509481984uL }); public static readonly BitSet _54_in_primaryExpression897 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _value_in_primaryExpression907 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _identifier_in_primaryExpression915 = new BitSet(new ulong[1] { 9007199254740994uL }); public static readonly BitSet _arguments_in_primaryExpression920 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _INTEGER_in_value940 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _FLOAT_in_value948 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _STRING_in_value956 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _DATETIME_in_value965 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _TRUE_in_value972 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _FALSE_in_value980 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _ID_in_identifier998 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _NAME_in_identifier1006 = new BitSet(new ulong[1] { 2uL }); public static readonly BitSet _logicalExpression_in_expressionList1030 = new BitSet(new ulong[1] { 288230376151711746uL }); public static readonly BitSet _58_in_expressionList1037 = new BitSet(new ulong[2] { 729865303422501376uL, 2048uL }); public static readonly BitSet _logicalExpression_in_expressionList1041 = new BitSet(new ulong[1] { 288230376151711746uL }); public static readonly BitSet _53_in_arguments1070 = new BitSet(new ulong[2] { 747879701931983360uL, 2048uL }); public static readonly BitSet _expressionList_in_arguments1074 = new BitSet(new ulong[1] { 18014398509481984uL }); public static readonly BitSet _54_in_arguments1081 = new BitSet(new ulong[1] { 2uL }); } internal static readonly string[] tokenNames = new string[76] { "<invalid>", "<EOR>", "<DOWN>", "<UP>", "A", "AND", "B", "C", "D", "DATETIME", "DIGIT", "E", "EXPONENT", "EscapeSequence", "F", "FALSE", "FLOAT", "G", "H", "HexDigit", "I", "ID", "INTEGER", "J", "K", "L", "LETTER", "M", "N", "NAME", "NOT", "O", "OR", "P", "Q", "R", "S", "STRING", "T", "TRUE", "U", "UnicodeEscape", "V", "W", "WS", "X", "Y", "Z", "'!'", "'!='", "'%'", "'&&'", "'&'", "'('", "')'", "'*'", "'**'", "'+'", "','", "'-'", "'/'", "':'", "'<'", "'<<'", "'<='", "'<>'", "'='", "'=='", "'>'", "'>='", "'>>'", "'?'", "'^'", "'|'", "'||'", "'~'" }; public const int EOF = -1; public const int A = 4; public const int AND = 5; public const int B = 6; public const int C = 7; public const int D = 8; public const int DATETIME = 9; public const int DIGIT = 10; public const int E = 11; public const int EXPONENT = 12; public const int EscapeSequence = 13; public const int F = 14; public const int FALSE = 15; public const int FLOAT = 16; public const int G = 17; public const int H = 18; public const int HexDigit = 19; public const int I = 20; public const int ID = 21; public const int INTEGER = 22; public const int J = 23; public const int K = 24; public const int L = 25; public const int LETTER = 26; public const int M = 27; public const int N = 28; public const int NAME = 29; public const int NOT = 30; public const int O = 31; public const int OR = 32; public const int P = 33; public const int Q = 34; public const int R = 35; public const int S = 36; public const int STRING = 37; public const int T = 38; public const int TRUE = 39; public const int U = 40; public const int UnicodeEscape = 41; public const int V = 42; public const int W = 43; public const int WS = 44; public const int X = 45; public const int Y = 46; public const int Z = 47; public const int T__48 = 48; public const int T__49 = 49; public const int T__50 = 50; public const int T__51 = 51; public const int T__52 = 52; public const int T__53 = 53; public const int T__54 = 54; public const int T__55 = 55; public const int T__56 = 56; public const int T__57 = 57; public const int T__58 = 58; public const int T__59 = 59; public const int T__60 = 60; public const int T__61 = 61; public const int T__62 = 62; public const int T__63 = 63; public const int T__64 = 64; public const int T__65 = 65; public const int T__66 = 66; public const int T__67 = 67; public const int T__68 = 68; public const int T__69 = 69; public const int T__70 = 70; public const int T__71 = 71; public const int T__72 = 72; public const int T__73 = 73; public const int T__74 = 74; public const int T__75 = 75; private ITreeAdaptor adaptor; private const char BS = '\\'; private static NumberFormatInfo numberFormatInfo = new NumberFormatInfo(); public ITreeAdaptor TreeAdaptor { get { return adaptor; } set { adaptor = value; } } public override string[] TokenNames => tokenNames; public override string GrammarFileName => "NCalc.g"; public List<string> Errors { get; private set; } public NCalcParser(ITokenStream input) : this(input, new RecognizerSharedState()) { }//IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown public NCalcParser(ITokenStream input, RecognizerSharedState state) : base(input, state) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) ITreeAdaptor val = null; TreeAdaptor = (ITreeAdaptor)(((object)val) ?? ((object)new CommonTreeAdaptor())); } private string extractString(string text) { //IL_014f: Unknown result type (might be due to invalid IL or missing references) StringBuilder stringBuilder = new StringBuilder(text); int startIndex = 1; int num = -1; while ((num = stringBuilder.ToString().IndexOf('\\', startIndex)) != -1) { char c = stringBuilder[num + 1]; switch (c) { case 'u': { string text2 = string.Concat(stringBuilder[num + 4], stringBuilder[num + 5]); string text3 = string.Concat(stringBuilder[num + 2], stringBuilder[num + 3]); char c2 = Encoding.Unicode.GetChars(new byte[2] { Convert.ToByte(text2, 16), Convert.ToByte(text3, 16) })[0]; stringBuilder.Remove(num, 6).Insert(num, c2); break; } case 'n': stringBuilder.Remove(num, 2).Insert(num, '\n'); break; case 'r': stringBuilder.Remove(num, 2).Insert(num, '\r'); break; case 't': stringBuilder.Remove(num, 2).Insert(num, '\t'); break; case '\'': stringBuilder.Remove(num, 2).Insert(num, '\''); break; case '\\': stringBuilder.Remove(num, 2).Insert(num, '\\'); break; default: throw new RecognitionException("Unvalid escape sequence: \\" + c); } startIndex = num + 1; } stringBuilder.Remove(0, 1); stringBuilder.Remove(stringBuilder.Length - 1, 1); return stringBuilder.ToString(); } public override void DisplayRecognitionError(string[] tokenNames, RecognitionException e) { ((BaseRecognizer)this).DisplayRecognitionError(tokenNames, e); if (Errors == null) { Errors = new List<string>(); } string errorHeader = ((BaseRecognizer)this).GetErrorHeader(e); string errorMessage = ((BaseRecognizer)this).GetErrorMessage(e, tokenNames); Errors.Add(errorMessage + " at " + errorHeader); } public LogicalExpression GetExpression() { return ncalcExpression().value; } [GrammarRule("ncalcExpression")] private ncalcExpression_return ncalcExpression() { //IL_00d0: Expected O, but got Unknown //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Expected O, but got Unknown //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Expected O, but got Unknown ncalcExpression_return ncalcExpression_return = new ncalcExpression_return(this); ((ParserRuleReturnScope<IToken>)(object)ncalcExpression_return).Start = base.input.LT(1); CommonTree val = null; AstParserRuleReturnScope<CommonTree, IToken> val2 = null; try { try { val = (CommonTree)adaptor.Nil(); ((BaseRecognizer)this).PushFollow(Follow._logicalExpression_in_ncalcExpression73); val2 = logicalExpression(); ((BaseRecognizer)this).PopFollow(); adaptor.AddChild((object)val, (object)val2.Tree); _ = (IToken)((BaseRecognizer)this).Match((IIntStream)(object)base.input, -1, Follow._EOF_in_ncalcExpression75); ncalcExpression_return.value = ((val2 != null) ? ((logicalExpression_return)val2).value : null); ((ParserRuleReturnScope<IToken>)(object)ncalcExpression_return).Stop = base.input.LT(-1); ((AstParserRuleReturnScope<CommonTree, IToken>)ncalcExpression_return).Tree = (CommonTree)adaptor.RulePostProcessing((object)val); adaptor.SetTokenBoundaries((object)((AstParserRuleReturnScope<CommonTree, IToken>)ncalcExpression_return).Tree, ((ParserRuleReturnScope<IToken>)(object)ncalcExpression_return).Start, ((ParserRuleReturnScope<IToken>)(object)ncalcExpression_return).Stop); } catch (RecognitionException val3) { RecognitionException val4 = val3; ((BaseRecognizer)this).ReportError(val4); ((BaseRecognizer)this).Recover((IIntStream)(object)base.input, val4); ((AstParserRuleReturnScope<CommonTree, IToken>)ncalcExpression_return).Tree = (CommonTree)adaptor.ErrorNode(base.input, ((ParserRuleReturnScope<IToken>)(object)ncalcExpression_return).Start, base.input.LT(-1), val4); } finally { } } finally { } return ncalcExpression_return; } [GrammarRule("logicalExpression")] private logicalExpression_return logicalExpression() { //IL_0202: Expected O, but got Unknown //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Expected O, but got Unknown //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected O, but got Unknown //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Expected O, but got Unknown //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Expected O, but got Unknown //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Expected O, but got Unknown //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Expected O, but got Unknown //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Expected O, but got Unknown logicalExpression_return logicalExpression_return = new logicalExpression_return(this); ((ParserRuleReturnScope<IToken>)(object)logicalExpression_return).Start = base.input.LT(1); CommonTree val = null; IToken val2 = null; IToken val3 = null; AstParserRuleReturnScope<CommonTree, IToken> val4 = null; AstParserRuleReturnScope<CommonTree, IToken> val5 = null; AstParserRuleReturnScope<CommonTree, IToken> val6 = null; CommonTree val7 = null; CommonTree val8 = null; try { try { val = (CommonTree)adaptor.Nil(); ((BaseRecognizer)this).PushFollow(Follow._conditionalExpression_in_logicalExpression95); val4 = conditionalExpression(); ((BaseRecognizer)this).PopFollow(); adaptor.AddChild((object)val, (object)val4.Tree); logicalExpression_return.value = ((val4 != null) ? ((conditionalExpression_return)val4).value : null); int num = 2; try { try { if (((IIntStream)base.input).LA(1) == 71) { num = 1; } } finally { } if (num == 1) { val2 = (IToken)((BaseRecognizer)this).Match((IIntStream)(object)base.input, 71, Follow._71_in_logicalExpression101); val7 = (CommonTree)adaptor.Create(val2); adaptor.AddChild((object)val, (object)val7); ((BaseRecognizer)this).PushFollow(Follow._conditionalExpression_in_logicalExpression105); val5 = conditionalExpression(); ((BaseRecognizer)this).PopFollow(); adaptor.AddChild((object)val, (object)val5.Tree); val3 = (IToken)((BaseRecognizer)this).Match((IIntStream)(object)base.input, 61, Follow._61_in_logicalExpression107); val8 = (CommonTree)adaptor.Create(val3); adaptor.AddChild((object)val, (object)val8); ((BaseRecognizer)this).PushFollow(Follow._conditionalExpression_in_logicalExpression111); val6 = conditionalExpression(); ((BaseRecognizer)this).PopFollow(); adaptor.AddChild((object)val, (object)val6.Tree); logicalExpression_return.value = new TernaryExpression((val4 != null) ? ((conditionalExpression_return)val4).value : null, (val5 != null) ? ((conditionalExpression_return)val5).value : null, (val6 != null) ? ((conditionalExpression_return)val6).value : null); } } finally { } ((ParserRuleReturnScope<IToken>)(object)logicalExpression_return).Stop = base.input.LT(-1); ((AstParserRuleReturnScope<CommonTree, IToken>)logicalExpression_return).Tree = (CommonTree)adaptor.RulePostProcessing((object)val); adaptor.SetTokenBoundaries((object)((AstParserRuleReturnScope<CommonTree, IToken>)logicalExpression_return).Tree, ((ParserRuleReturnScope<IToken>)(object)logicalExpression_return).Start, ((ParserRuleReturnScope<IToken>)(object)logicalExpression_return).Stop); } catch (RecognitionException val9) { RecognitionException val10 = val9; ((BaseRecognizer)this).ReportError(val10); ((BaseRecognizer)this).Recover((IIntStream)(object)base.input, val10); ((AstParserRuleReturnScope<CommonTree, IToken>)logicalExpression_return).Tree = (CommonTree)adaptor.ErrorNode(base.input, ((ParserRuleReturnScope<IToken>)(object)logicalExpression_return).Start, base.input.LT(-1), val10); } finally { } } finally { } return logicalExpression_return; } [GrammarRule("conditionalExpression")] private conditionalExpression_return conditionalExpression() { //IL_01ba: Expected O, but got Unknown //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Expected O, but got Unknown //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Expected O, but got Unknown //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Expected O, but got Unknown //IL_010d: Unknown result type (might be due to invalid IL or missing references) conditionalExpression_return conditionalExpression_return = new conditionalExpression_return(this); ((ParserRuleReturnScope<IToken>)(object)conditionalExpression_return).Start = base.input.LT(1); CommonTree val = null; IToken val2 = null; AstParserRuleReturnScope<CommonTree, IToken> val3 = null; AstParserRuleReturnScope<CommonTree, IToken> val4 = null; BinaryExpressionType binaryExpressionType = BinaryExpressionType.Unknown; try { try { val = (CommonTree)adaptor.Nil(); ((BaseRecognizer)this).PushFollow(Follow._booleanAndExpression_in_conditionalExpression138); val3 = booleanAndExpression(); ((BaseRecognizer)this).PopFollow(); adaptor.AddChild((object)val, (object)val3.Tree); conditionalExpression_return.value = ((val3 != null) ? ((booleanAndExpression_return)val3).value : null); try { while (true) { int num = 2; try { int num2 = ((IIntStream)base.input).LA(1); if (num2 == 32 || num2 == 74) { num = 1; } } finally { } if (num == 1) { val2 = base.input.LT(1); if (((IIntStream)base.input).LA(1) == 32 || ((IIntStream)base.input).LA(1) == 74) { ((IIntStream)base.input).Consume(); adaptor.AddChild((object)val, (object)(CommonTree)adaptor.Create(val2)); ((BaseRecognizer)this).state.errorRecovery = false; binaryExpressionType = BinaryExpressionType.Or; ((BaseRecognizer)this).PushFollow(Follow._conditionalExpression_in_conditionalExpression163); val4 = conditionalExpression(); ((BaseRecognizer)this).PopFollow(); adaptor.AddChild((object)val, (object)val4.Tree); conditionalExpression_return.value = new BinaryExpression(binaryExpressionType, conditionalExpression_return.value, (val4 != null) ? ((conditionalExpression_return)val4).value : null); continue; } throw new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); } break; } } finally { } ((ParserRuleReturnScope<IToken>)(object)conditionalExpression_return).Stop = base.input.LT(-1); ((AstParserRuleReturnScope<CommonTree, IToken>)conditionalExpression_return).Tree = (CommonTree)adaptor.RulePostProcessing((object)val); adaptor.SetTokenBoundaries((object)((AstParserRuleReturnScope<CommonTree, IToken>)conditionalExpression_return).Tree, ((ParserRuleReturnScope<IToken>)(object)conditionalExpression_return).Start, ((ParserRuleReturnScope<IToken>)(object)conditionalExpression_return).Stop); } catch (RecognitionException val5) { RecognitionException val6 = val5; ((BaseRecognizer)this).ReportError(val6); ((BaseRecognizer)this).Recover((IIntStream)(object)base.input, val6); ((AstParserRuleReturnScope<CommonTree, IToken>)conditionalExpression_return).Tree = (CommonTree)adaptor.ErrorNode(base.input, ((ParserRuleReturnScope<IToken>)(object)conditionalExpression_return).Start, base.input.LT(-1), val6); } finally { } } finally { } return conditionalExpression_return; } [GrammarRule("booleanAndExpression")] private booleanAndExpression_return booleanAndExpression() { //IL_01b8: Expected O, but got Unknown //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Expected O, but got Unknown //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Expected O, but got Unknown //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Expected O, but got Unknown //IL_010b: Unknown result type (might be due to invalid IL or missing references) booleanAndExpression_return booleanAndExpression_return = new booleanAndExpression_return(this); ((ParserRuleReturnScope<IToken>)(object)booleanAndExpression_return).Start = base.input.LT(1); CommonTree val = null; IToken val2 = null; AstParserRuleReturnScope<CommonTree, IToken> val3 = null; AstParserRuleReturnScope<CommonTree, IToken> val4 = null; BinaryExpressionType binaryExpressionType = BinaryExpressionType.Unknown; try { try { val = (CommonTree)adaptor.Nil(); ((BaseRecognizer)this).PushFollow(Follow._bitwiseOrExpression_in_booleanAndExpression197); val3 = bitwiseOrExpression(); ((BaseRecognizer)this).PopFollow(); adaptor.AddChild((object)val, (object)val3.Tree); booleanAndExpression_return.value = ((val3 != null) ? ((bitwiseOrExpression_return)val3).value : null); try { while (true) { int num = 2; try { int num2 = ((IIntStream)base.input).LA(1); if (num2 == 5 || num2 == 51) { num = 1; } } finally { } if (num == 1) { val2 = base.input.LT(1); if (((IIntStream)base.input).LA(1) == 5 || ((IIntStream)base.input).LA(1) == 51) { ((IIntStream)base.input).Consume(); adaptor.AddChild((object)val, (object)(CommonTree)adaptor.Create(val2)); ((BaseRecognizer)this).state.errorRecovery = false; binaryExpressionType = BinaryExpressionType.And; ((BaseRecognizer)this).PushFollow(Follow._bitwiseOrExpression_in_booleanAndExpression222); val4 = bitwiseOrExpression(); ((BaseRecognizer)this).PopFollow(); adaptor.AddChild((object)val, (object)val4.Tree); booleanAndExpression_return.value = new BinaryExpression(binaryExpressionType, booleanAndExpression_return.value, (val4 != null) ? ((bitwiseOrExpression_return)val4).value : null); continue; } throw new MismatchedSetException((BitSet)null, (IIntStream)(object)base.input); } break; } } finally { } ((ParserRuleReturnScope<IToken>)(object)booleanAndExpression_return).Stop = base.input.LT(-1); ((AstParserRuleReturnScope<CommonTree, IToken>)booleanAndExpression_return).Tree = (CommonTree)adaptor.RulePostProcessing((object)val); adaptor.SetTokenBoundaries((object)((AstParserRuleReturnScope<CommonTree, IToken>)booleanAndExpression_return).Tree, ((ParserRuleReturnScope<IToken>)(object)booleanAndExpression_return).Start, ((ParserRuleReturnScope<IToken>)(object)booleanAndExpression_return).Stop); } catch (RecognitionException val5) { RecognitionException val6 = val5; ((BaseRecognizer)this).ReportError(val6); ((BaseRecognizer)this).Recover((IIntStream)(object)base.input, val6); ((AstParserRuleReturnScope<CommonTree, IToken>)booleanAndExpression_return).Tree = (CommonTree)adaptor.ErrorNode(base.input, ((ParserRuleReturnScope<IToken>)(object)booleanAndExpression_return).Start, base.input.LT(-1), val6); } finally { } } finally { } return booleanAndExpression_return; } [GrammarRule("bitwiseOrExpression")] private bitwiseOrExpression_return bitwiseOrExpression() { //IL_017e: Expected O, but got Unknown //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Expected O, but got Unknown //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Expected O, but got Unknown //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Expected O, but got Unknown //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Expected O, but got Unknown bitwiseOrExpression_return bitwiseOrExpression_return = new bitwiseOrExpression_return(this); ((ParserRuleReturnScope<IToken>)(object)bitwiseOrExpression_return).Start = base.input.LT(1); CommonTree val = null; IToken val2 = null; AstParserRuleReturnScope<CommonTree, IToken> val3 = null; AstParserRuleReturnScope<CommonTree, IToken> val4 = null; CommonTree val5 = null; BinaryExpressionType binaryExpressionType = BinaryExpressionType.Unknown; try { try { val = (CommonTree)adaptor.Nil(); ((BaseRecognizer)this).PushFollow(Follow._bitwiseXOrExpression_in_bitwiseOrExpression254); val3 = bitwiseXOrExpression(); ((BaseRecognizer)this).PopFollow(); adaptor.AddChild((object)val, (object)val3.Tree); bitwiseOrExpression_return.value = ((val3 != null) ? ((bitwiseXOrExpression_return)val3).value : null); try { while (true) { int num = 2; try { if (((IIntStream)base.input).LA(1) == 73) { num = 1; } } finally { } if (num == 1) { val2 = (IToken)((BaseRecognizer)this).Match((IIntStream)(object)base.input, 73, Follow._73_in_bitwiseOrExpression263); val5 = (CommonTree)adaptor.Create(val2); adaptor.AddChild((object)val, (object)val5); binaryExpressionType = BinaryExpressionType.BitwiseOr; ((BaseRecognizer)this).PushFollow(Follow._bitwiseOrExpression_in_bitwiseOrExpression273); val4 = bitwiseOrExpression(); ((BaseRecognizer)this).PopFollow(); adaptor.AddChild((object)val, (object)val4.Tree); bitwiseOrExpression_return.value = new BinaryExpression(binaryExpressionType, bitwiseOrExpression_return.value, (val4 != null) ? ((bitwiseOrExpression_return)val4).value : null); continue; } break; } } finally { } ((ParserRuleReturnScope<IToken>)(object)bitwiseOrExpression_return).Stop = base.input.LT(-1); ((AstParserRuleReturnScope<CommonTree, IToken>)bitwiseOrExpression_return).Tree = (CommonTree)adaptor.RulePostProcessing((object)val); adaptor.SetTokenBoundaries((object)((AstParserRuleReturnScope<CommonTree, IToken>)bitwiseOrExpression_return).Tree, ((ParserRuleReturnScope<IToken>)(object)bitwiseOrExpression_return).Start, ((ParserRuleReturnScope<IToken>)(object)bitwiseOrExpression_return).Stop); } catch (RecognitionException val6) { RecognitionException val7 = val6; ((BaseRecognizer)this).ReportError(val7); ((BaseRecognizer)this).Recover((IIntStream)(object)base.input, val7); ((AstParserRuleReturnScope<CommonTree, IToken>)bitwiseOrExpression_return).Tree = (CommonTree)adaptor.ErrorNode(base.input, ((ParserRuleReturnScope<IToken>)(object)bitwiseOrExpression_return).Start, base.input.LT(-1), val7); } finally { } } finally { } return bitwiseOrExpression_return; } [GrammarRule("bitwiseXOrExpression")] private bitwiseXOrExpression_return bitwiseXOrExpression() { //IL_017e: Expected O, but got Unknown //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Expected O, but got Unknown //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Expected O, but got Unknown //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Expected O, but got Unknown //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Expected O, but got Unknown bitwiseXOrExpression_return bitwiseXOrExpression_return = new bitwiseXOrExpression_return(this); ((ParserRuleReturnScope<IToken>)(object)bitwiseXOrExpression_return).Start = base.input.LT(1); CommonTree val = null; IToken val2 = null; AstParserRuleReturnScope<CommonTree, IToken> val3 = null; AstParserRuleReturnScope<CommonTree, IToken> val4 = null; CommonTree val5 = null; BinaryExpressionType binaryExpressionType = BinaryExpressionType.Unknown; try { try { val = (CommonTree)adaptor.Nil(); ((BaseRecognizer)this).PushFollow(Follow._bitwiseAndExpression_in_bitwiseXOrExpression307); val3 = bitwiseAndExpression(); ((BaseRecognizer)this).PopFollow(); adaptor.AddChild((object)val, (object)val3.Tree); bitwiseXOrExpression_return.value = ((val3 != null) ? ((bitwiseAndExpression_return)val3).value : null); try { while (true) { int num = 2; try { if (((IIntStream)base.input).LA(1) == 72) { num = 1; } } finally { } if (num == 1) { val2 = (IToken)((BaseRecognizer)this).Match((IIntStream)(object)base.input, 72, Follow._72_in_bitwiseXOrExpression316); val5 = (CommonTree)adaptor.Create(val2); adaptor.AddChild((object)val, (object)val5); binaryExpressionType = BinaryExpressionType.BitwiseXOr; ((BaseRecognizer)this).PushFollow(Follow._bitwiseAndExpression_in_bitwiseXOrExpression326); val4 = bitwiseAndExpression(); ((BaseRecognizer)this).PopFollow(); adaptor.AddChild((object)val, (object)val4.Tree); bitwiseXOrExpression_return.value = new BinaryExpression(binaryExpressionType, bitwiseXOrExpression_return.value, (val4 != null) ? ((bitwiseAndExpression_return)val4).value : null); continue; } break; } } finally { } ((ParserRuleReturnScope<IToken>)(object)bitwiseXOrExpression_return).Stop = base.input.LT(-1); ((AstParserRuleReturnScope<CommonTree, IToken>)bitwiseXOrExpression_return).Tree = (CommonTree)adaptor.RulePostProcessing((object)val); adaptor.SetTokenBoundaries((object)((AstParserRuleReturnScope<CommonTree, IToken>)bitwiseXOrExpression_return).Tree, ((ParserRuleReturnScope<IToken>)(object)bitwiseXOrExpression_return).Start, ((ParserRuleReturnScope<IToken>)(object)bitwiseXOrExpression_return).Stop); } catch (RecognitionException val6) { RecognitionException val7 = val6; ((BaseRecognizer)this).ReportError(val7); ((BaseRecognizer)this).Recover((IIntStream)(object)base.input, val7); ((AstParserRuleReturnScope<CommonTree, IToken>)bitwiseXOrExpression_return).Tree = (CommonTree)adaptor.ErrorNode(base.input, ((ParserRuleReturnScope<IToken>)(object)bit
plugins/Libs/PanoramicData.NCalcExtensions.dll
Decompiled 10 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Text.RegularExpressions; using Microsoft.CodeAnalysis; using NCalc; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PanoramicData.NCalcExtensions.Exceptions; using PanoramicData.NCalcExtensions.Extensions; using PanoramicData.NCalcExtensions.Helpers; using TimeZoneConverter; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyFileVersion("1.20.127.34203")] [assembly: AssemblyInformationalVersion("1.20.127+859b0ed46e")] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("Panoramic Data Limited")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyCopyright("Panoramic Data Limited 2019-2023")] [assembly: AssemblyDescription("Extensions for NCalc")] [assembly: AssemblyProduct("PanoramicData.NCalcExtensions")] [assembly: AssemblyTitle("PanoramicData.NCalcExtensions")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/panoramicdata/PanoramicData.NCalcExtensions")] [assembly: InternalsVisibleTo("PanoramicData.NCalcExtensions.Test")] [assembly: AssemblyVersion("1.20.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } [GeneratedCode("Nerdbank.GitVersioning.Tasks", "3.5.119.9565")] [ExcludeFromCodeCoverage] internal static class ThisAssembly { internal const string AssemblyConfiguration = "Release"; internal const string AssemblyFileVersion = "1.20.127.34203"; internal const string AssemblyInformationalVersion = "1.20.127+859b0ed46e"; internal const string AssemblyName = "PanoramicData.NCalcExtensions"; internal const string AssemblyTitle = "PanoramicData.NCalcExtensions"; internal const string AssemblyVersion = "1.20.0.0"; internal static readonly DateTime GitCommitDate = new DateTime(638332475000000000L, DateTimeKind.Utc); internal const string GitCommitId = "859b0ed46eb79975f879772d7edd6b08e2ec9a3c"; internal const bool IsPrerelease = false; internal const bool IsPublicRelease = true; internal const string RootNamespace = "PanoramicData.NCalcExtensions"; } namespace PanoramicData.NCalcExtensions { public class ExtendedExpression : Expression { private readonly Dictionary<string, object?> _storageDictionary = new Dictionary<string, object>(); internal const string StorageDictionaryParameterName = "__storageDictionary"; public ExtendedExpression(string expression) : base(expression) { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown ((Expression)this).Parameters["__storageDictionary"] = _storageDictionary; ((Expression)this).EvaluateFunction += new EvaluateFunctionHandler(Extend); Expression.CacheEnabled = false; if (((Expression)this).Parameters.ContainsKey("null")) { throw new InvalidOperationException("You may not set a parameter called 'null', as it is a reserved keyword."); } ((Expression)this).Parameters["null"] = null; if (((Expression)this).Parameters.ContainsKey("True")) { throw new InvalidOperationException("You may not set a parameter called 'True', as it is a reserved keyword."); } ((Expression)this).Parameters["True"] = true; if (((Expression)this).Parameters.ContainsKey("False")) { throw new InvalidOperationException("You may not set a parameter called 'False', as it is a reserved keyword."); } ((Expression)this).Parameters["False"] = false; } internal static void CheckParameterCount(string functionName, FunctionArgs functionArgs, int? minPropertyCount, int? maxPropertyCount) { if (minPropertyCount.HasValue && functionArgs.Parameters.Length < minPropertyCount) { throw new FormatException(string.Format("{0}: At least {1} parameter{2} required.", functionName, minPropertyCount, (minPropertyCount == 1) ? "" : "s")); } if (maxPropertyCount.HasValue && functionArgs.Parameters.Length > maxPropertyCount) { throw new FormatException(string.Format("{0}: No more than {1} parameter{2} permitted.", functionName, maxPropertyCount, (maxPropertyCount == 1) ? "" : "s")); } } internal void Extend(string functionName, FunctionArgs functionArgs) { if (functionArgs == null) { throw new ArgumentNullException("functionArgs"); } if (functionName == null) { return; } switch (functionName.Length) { case 3: switch (functionName[1]) { case 'l': if (functionName == "all") { All.Evaluate(functionArgs); } break; case 'n': if (functionName == "any") { Any.Evaluate(functionArgs); } break; case 'a': if (functionName == "max") { Max.Evaluate(functionArgs); } break; case 'i': if (functionName == "min") { Min.Evaluate(functionArgs); } break; case 'u': if (functionName == "sum") { Sum.Evaluate(functionArgs); } break; case 'r': if (functionName == "try") { Try.Evaluate(functionArgs); } break; } break; case 11: switch (functionName[0]) { case 'c': if (functionName == "canEvaluate") { CanEvaluate.Evaluate(functionArgs); } break; case 'g': if (functionName == "getProperty") { GetProperty.Evaluate(functionArgs); } break; case 'i': if (functionName == "itemAtIndex") { ItemAtIndex.Evaluate(functionArgs); } break; case 'l': if (functionName == "lastIndexOf") { LastIndexOf.Evaluate(functionArgs); } break; } break; case 10: switch (functionName[0]) { case 'c': if (functionName == "capitalise" || functionName == "capitalize") { Capitalize.Evaluate(functionArgs); } break; case 'd': if (functionName == "dictionary") { Dictionary.Evaluate(functionArgs); } break; case 'i': if (functionName == "isInfinite") { IsInfinite.Evaluate(functionArgs); } break; case 'r': if (functionName == "regexGroup") { RegexGroup.Evaluate(functionArgs); } break; case 's': if (functionName == "startsWith") { StartsWith.Evaluate(functionArgs); } break; case 't': if (functionName == "toDateTime") { ToDateTime.Evaluate(functionArgs); } break; } break; case 4: switch (functionName[0]) { case 'c': if (functionName == "cast") { Cast.Evaluate(functionArgs); } break; case 'j': if (functionName == "join") { Join.Evaluate(functionArgs); } break; case 'l': if (functionName == "list") { List.Evaluate(functionArgs); } break; case 's': if (!(functionName == "skip")) { if (functionName == "sort") { Sort.Evaluate(functionArgs); } } else { Skip.Evaluate(functionArgs); } break; case 't': if (functionName == "take") { Take.Evaluate(functionArgs); } break; } break; case 14: switch (functionName[0]) { case 'c': if (functionName == "changeTimeZone") { ChangeTimeZone.Evaluate(functionArgs); } break; case 'f': if (functionName == "firstOrDefault") { FirstOrDefault.Evaluate(functionArgs); } break; case 's': if (functionName == "selectDistinct") { SelectDistinct.Evaluate(functionArgs); } break; } break; case 6: switch (functionName[2]) { case 'n': if (!(functionName == "concat")) { if (functionName == "length") { Length.Evaluate(functionArgs); } } else { Concat.Evaluate(functionArgs); } break; case 't': if (functionName == "extend") { ExtendObject.Evaluate(functionArgs); } break; case 'r': if (functionName == "format") { Format.Evaluate(functionArgs); } break; case 'G': if (functionName == "isGuid") { IsGuid.Evaluate(functionArgs); } break; case 'N': if (functionName == "isNull") { IsNull.Evaluate(functionArgs); } break; case 's': if (functionName == "listOf") { ListOf.Evaluate(functionArgs); } break; case 'l': if (functionName == "select") { Select.Evaluate(functionArgs); } break; case 'i': if (functionName == "switch") { PanoramicData.NCalcExtensions.Extensions.Switch.Evaluate(functionArgs); } break; case 'p': if (functionName == "typeOf") { TypeOf.Evaluate(functionArgs); } break; } break; case 8: switch (functionName[2]) { case 'n': if (!(functionName == "contains")) { if (functionName == "minValue") { MinValue.Evaluate(functionArgs); } } else { Contains.Evaluate(functionArgs); } break; case 't': if (!(functionName == "dateTime")) { if (functionName == "retrieve") { Retrieve.Evaluate(functionArgs); } } else { DateTimeMethods.Evaluate(functionArgs); } break; case 's': if (functionName == "distinct") { Distinct.Evaluate(functionArgs); } break; case 'd': if (functionName == "endsWith") { EndsWith.Evaluate(functionArgs); } break; case 'm': switch (functionName) { case "humanise": case "humanize": Humanize.Evaluate(functionArgs); break; case "timespan": case "timeSpan": PanoramicData.NCalcExtensions.Extensions.TimeSpan.Evaluate(functionArgs); break; } break; case 'x': if (functionName == "maxValue") { MaxValue.Evaluate(functionArgs); } break; case 'r': if (functionName == "parseInt") { ParseInt.Evaluate(functionArgs); } break; case 'S': if (functionName == "toString") { ToString.Evaluate(functionArgs); } break; case 'y': if (functionName == "tryParse") { TryParse.Evaluate(functionArgs, _storageDictionary); } break; } break; case 7: switch (functionName[0]) { case 'c': if (functionName == "convert") { ConvertFunction.Evaluate(functionArgs); } break; case 'i': if (functionName == "indexOf") { IndexOf.Evaluate(functionArgs); } break; case 'j': if (functionName == "jObject") { NewJObject.Evaluate(functionArgs); } break; case 'o': if (functionName == "orderBy") { OrderBy.Evaluate(functionArgs); } break; case 'p': if (functionName == "padLeft") { PadLeft.Evaluate(functionArgs); } break; case 'r': if (functionName == "replace") { Replace.Evaluate(functionArgs); } break; case 't': if (!(functionName == "toLower")) { if (functionName == "toUpper") { ToUpper.Evaluate(functionArgs); } } else { ToLower.Evaluate(functionArgs); } break; } break; case 5: switch (functionName[2]) { case 'u': if (functionName == "count") { Count.Evaluate(functionArgs); } break; case 'r': switch (functionName) { case "first": First.Evaluate(functionArgs); break; case "parse": Parse.Evaluate(functionArgs); break; case "throw": throw Throw.Evaluate(functionArgs); } break; case 'N': if (functionName == "isNaN") { IsNaN.Evaluate(functionArgs); } break; case 'S': if (functionName == "isSet") { IsSet.Evaluate(functionArgs); } break; case 'a': if (functionName == "jPath") { JPath.Evaluate(functionArgs); } break; case 'l': if (functionName == "split") { Split.Evaluate(functionArgs); } break; case 'o': if (functionName == "store") { Store.Evaluate(functionArgs); } break; case 'e': if (functionName == "where") { Where.Evaluate(functionArgs); } break; } break; case 2: switch (functionName[1]) { case 'n': if (functionName == "in") { In.Evaluate(functionArgs); } break; case 'f': if (functionName == "if") { If.Evaluate(functionArgs); } break; } break; case 13: switch (functionName[0]) { case 'i': if (functionName == "isNullOrEmpty") { IsNullOrEmpty.Evaluate(functionArgs); } break; case 's': if (functionName == "setProperties") { SetProperties.Evaluate(functionArgs); } break; } break; case 12: switch (functionName[0]) { case 'n': if (functionName == "nullCoalesce") { NullCoalesce.Evaluate(functionArgs); } break; case 'r': if (functionName == "regexIsMatch") { RegexIsMatch.Evaluate(functionArgs); } break; } break; case 17: if (functionName == "dateTimeAsEpochMs") { DateTimeAsEpochMs.Evaluate(functionArgs); } break; case 18: if (functionName == "isNullOrWhiteSpace") { IsNullOrWhiteSpace.Evaluate(functionArgs); } break; case 9: if (functionName == "substring") { Substring.Evaluate(functionArgs); } break; case 15: case 16: break; } } } public static class ExtensionFunction { public const string All = "all"; public const string Any = "any"; public const string CanEvaluate = "canEvaluate"; public const string Capitalise = "capitalise"; public const string Capitalize = "capitalize"; public const string Cast = "cast"; public const string ChangeTimeZone = "changeTimeZone"; public const string Concat = "concat"; public const string Contains = "contains"; public const string Convert = "convert"; public const string Count = "count"; public const string DateTime = "dateTime"; public const string DateTimeAsEpochMs = "dateTimeAsEpochMs"; public const string Dictionary = "dictionary"; public const string Distinct = "distinct"; public const string EndsWith = "endsWith"; public const string Extend = "extend"; public const string First = "first"; public const string FirstOrDefault = "firstOrDefault"; public const string Format = "format"; public const string GetProperty = "getProperty"; public const string Humanise = "humanise"; public const string Humanize = "humanize"; public const string If = "if"; public const string In = "in"; public const string IndexOf = "indexOf"; public const string IsGuid = "isGuid"; public const string IsInfinite = "isInfinite"; public const string IsNaN = "isNaN"; public const string IsNull = "isNull"; public const string IsNullOrWhiteSpace = "isNullOrWhiteSpace"; public const string IsNullOrEmpty = "isNullOrEmpty"; public const string IsSet = "isSet"; public const string ItemAtIndex = "itemAtIndex"; public const string Join = "join"; public const string JPath = "jPath"; public const string LastIndexOf = "lastIndexOf"; public const string Length = "length"; public const string List = "list"; public const string ListOf = "listOf"; public const string Max = "max"; public const string MaxValue = "maxValue"; public const string Min = "min"; public const string MinValue = "minValue"; public const string NewJObject = "jObject"; public const string NullCoalesce = "nullCoalesce"; public const string OrderBy = "orderBy"; public const string PadLeft = "padLeft"; public const string Parse = "parse"; public const string ParseInt = "parseInt"; public const string RegexGroup = "regexGroup"; public const string RegexIsMatch = "regexIsMatch"; public const string Replace = "replace"; public const string Retrieve = "retrieve"; public const string Select = "select"; public const string SelectDistinct = "selectDistinct"; public const string SetProperties = "setProperties"; public const string Skip = "skip"; public const string Sort = "sort"; public const string Split = "split"; public const string StartsWith = "startsWith"; public const string Store = "store"; public const string Substring = "substring"; public const string Sum = "sum"; public const string Switch = "switch"; public const string Take = "take"; public const string Throw = "throw"; public const string TimeSpan = "timespan"; public const string TimeSpanCamel = "timeSpan"; public const string ToDateTime = "toDateTime"; public const string ToLower = "toLower"; public new const string ToString = "toString"; public const string ToUpper = "toUpper"; public const string Try = "try"; public const string TryParse = "tryParse"; public const string TypeOf = "typeOf"; public const string Where = "where"; } public class Lambda { private readonly string predicate; private readonly string nCalcString; private readonly Dictionary<string, object?> parameters; public Lambda(string predicate, string nCalcString, Dictionary<string, object?> parameters) { this.predicate = predicate; this.nCalcString = nCalcString; this.parameters = parameters; } public object? Evaluate<T>(T value) { parameters.Remove(predicate); parameters.Add(predicate, value); ExtendedExpression extendedExpression = new ExtendedExpression(nCalcString); ((Expression)extendedExpression).Parameters = parameters; ExtendedExpression extendedExpression2 = extendedExpression; return ((Expression)extendedExpression2).Evaluate(); } } public static class NCalcExtensions { } public enum TimeUnit { Milliseconds, Seconds, Minutes, Hours, Days, Weeks, Years } } namespace PanoramicData.NCalcExtensions.Helpers { internal static class StringExtensions { internal static string UpperCaseFirst(this string s) { if (s == null) { throw new ArgumentNullException("s"); } return s.Substring(0, 1).ToUpperInvariant() + s.Substring(1); } } internal static class TimeSpanExtensions { internal static string Humanise(this System.TimeSpan t) { string text = ((t.Days >= 1) ? string.Format("{0} day{1}", t.Days, (t.Days > 1) ? "s" : "") : ""); if (t.Hours >= 1) { text += string.Format(" {0} hour{1}", t.Hours, (t.Hours > 1) ? "s" : ""); } if (t.Minutes >= 1) { text += string.Format(" {0} minute{1}", t.Minutes, (t.Minutes > 1) ? "s" : ""); } if (t.Seconds >= 1) { text += string.Format(" {0} second{1}", t.Seconds, (t.Seconds > 1) ? "s" : ""); } return text.Trim(); } } internal static class TypeHelper { internal static string AsHumanString<T>() { if (typeof(T).IsGenericType) { return typeof(T).GetGenericTypeDefinition().Name + "<" + string.Join(",", from t in typeof(T).GetGenericArguments() select t.Name) + ">"; } return typeof(T).Name; } } } namespace PanoramicData.NCalcExtensions.Extensions { internal static class All { internal static void Evaluate(FunctionArgs functionArgs) { IEnumerable<object> source = (functionArgs.Parameters[0].Evaluate() as IEnumerable<object>) ?? throw new FormatException("First all parameter must be an IEnumerable."); string predicate = (functionArgs.Parameters[1].Evaluate() as string) ?? throw new FormatException("Second all parameter must be a string."); string nCalcString = (functionArgs.Parameters[2].Evaluate() as string) ?? throw new FormatException("Third all parameter must be a string."); Lambda lambda = new Lambda(predicate, nCalcString, functionArgs.Parameters[0].Parameters); functionArgs.Result = source.All((object value) => lambda.Evaluate(value) as bool? == true); } } internal static class Any { internal static void Evaluate(FunctionArgs functionArgs) { IEnumerable<object> source = (functionArgs.Parameters[0].Evaluate() as IEnumerable<object>) ?? throw new FormatException("First any parameter must be an IEnumerable."); string predicate = (functionArgs.Parameters[1].Evaluate() as string) ?? throw new FormatException("Second any parameter must be a string."); string nCalcString = (functionArgs.Parameters[2].Evaluate() as string) ?? throw new FormatException("Third any parameter must be a string."); Lambda lambda = new Lambda(predicate, nCalcString, functionArgs.Parameters[0].Parameters); functionArgs.Result = source.Any((object value) => lambda.Evaluate(value) as bool? == true); } } internal static class CanEvaluate { internal static void Evaluate(FunctionArgs functionArgs) { try { Expression[] parameters = functionArgs.Parameters; foreach (Expression val in parameters) { val.Evaluate(); } functionArgs.Result = true; } catch { functionArgs.Result = false; } } } internal static class Capitalize { internal static void Evaluate(FunctionArgs functionArgs) { string text; try { text = (string)functionArgs.Parameters[0].Evaluate(); } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("capitalize function - requires one string parameter."); } functionArgs.Result = text.ToLowerInvariant().UpperCaseFirst(); } } internal static class Cast { internal static void Evaluate(FunctionArgs functionArgs) { if (functionArgs.Parameters.Length != 2) { throw new ArgumentException(string.Format("{0} function - Expected {1} arguments", "cast", 2)); } object value = functionArgs.Parameters[0].Evaluate(); if (!(functionArgs.Parameters[1].Evaluate() is string typeName)) { throw new ArgumentException("cast function - Expected second argument to be a string."); } Type conversionType = Type.GetType(typeName) ?? throw new ArgumentException("cast function - Expected second argument to be a valid .NET type e.g. System.Decimal."); object result = Convert.ChangeType(value, conversionType, CultureInfo.InvariantCulture); functionArgs.Result = result; } } internal static class ChangeTimeZone { internal static void Evaluate(FunctionArgs functionArgs) { if (functionArgs.Parameters.Length != 3) { throw new ArgumentException("changeTimeZone function - Expected 3 arguments"); } DateTime parsedDateTime = (functionArgs.Parameters[0].Evaluate() as DateTime?) ?? throw new ArgumentException("changeTimeZone function - parameter 1 should be a DateTime"); string sourceTimeZoneName = (functionArgs.Parameters[1].Evaluate() as string) ?? throw new ArgumentException("changeTimeZone function - parameter 2 should be a string"); string destinationTimeZoneName = (functionArgs.Parameters[2].Evaluate() as string) ?? throw new ArgumentException("changeTimeZone function - parameter 3 should be a string"); functionArgs.Result = ToDateTime.ConvertTimeZone(parsedDateTime, sourceTimeZoneName, destinationTimeZoneName); } } internal static class Concat { internal static void Evaluate(FunctionArgs functionArgs) { List<object> list = new List<object>(); Expression[] parameters = functionArgs.Parameters; foreach (Expression val in parameters) { object obj = val.Evaluate(); if (obj is IList list2) { foreach (object item in list2) { list.Add(item); } } else { list.Add(obj); } } functionArgs.Result = list; } } internal static class Contains { internal static void Evaluate(FunctionArgs functionArgs) { try { string text = (string)functionArgs.Parameters[0].Evaluate(); string value = (string)functionArgs.Parameters[1].Evaluate(); functionArgs.Result = text.IndexOf(value, StringComparison.InvariantCulture) >= 0; } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("contains() requires two string parameters."); } } } internal static class ConvertFunction { internal static void Evaluate(FunctionArgs functionArgs) { if (functionArgs.Parameters.Length != 2) { throw new FormatException("convert() requires two parameters."); } object value = functionArgs.Parameters[0].Evaluate(); functionArgs.Parameters[1].Parameters["value"] = value; functionArgs.Result = functionArgs.Parameters[1].Evaluate(); } } internal static class Count { internal static void Evaluate(FunctionArgs functionArgs) { object obj = functionArgs.Parameters[0].Evaluate(); IEnumerable<object> enumerable = obj as IEnumerable<object>; if (functionArgs.Parameters.Length == 1) { if (obj is string text) { functionArgs.Result = text.Length; return; } if (enumerable == null) { throw new FormatException("count() requires IEnumerable parameter."); } functionArgs.Result = enumerable.Count(); return; } if (enumerable == null) { throw new FormatException("count() requires IEnumerable parameter."); } string predicate = (functionArgs.Parameters[1].Evaluate() as string) ?? throw new FormatException("Second count parameter must be a string."); string nCalcString = (functionArgs.Parameters[2].Evaluate() as string) ?? throw new FormatException("Third count parameter must be a string."); Lambda lambda = new Lambda(predicate, nCalcString, functionArgs.Parameters[0].Parameters); functionArgs.Result = enumerable.Count((object value) => lambda.Evaluate(value) as bool? == true); } } internal static class DateTimeAsEpochMs { internal static void Evaluate(FunctionArgs functionArgs) { functionArgs.Result = DateTimeOffset.ParseExact(functionArgs.Parameters[0].Evaluate() as string, functionArgs.Parameters[1].Evaluate() as string, CultureInfo.InvariantCulture.DateTimeFormat, DateTimeStyles.AssumeUniversal).ToUnixTimeMilliseconds(); } } internal static class DateTimeMethods { internal static void Evaluate(FunctionArgs functionArgs) { if (functionArgs.Parameters.Length != 0) { if (!(functionArgs.Parameters[0].Evaluate() is string text)) { throw new FormatException("dateTime function - The first argument should be a string, e.g. 'UTC'"); } if (text != "UTC") { throw new FormatException("dateTime function - Only UTC timeZone is currently supported."); } } string text2 = ((functionArgs.Parameters.Length > 1) ? (functionArgs.Parameters[1].Evaluate() as string) : "yyyy-MM-dd HH:mm:ss"); double days = 0.0; if (functionArgs.Parameters.Length > 2) { double? nullableDouble = GetNullableDouble(functionArgs.Parameters[2]); if (!nullableDouble.HasValue) { throw new FormatException("dateTime function - Days to add must be a number."); } days = nullableDouble.Value; } double hours = 0.0; if (functionArgs.Parameters.Length > 3) { double? nullableDouble2 = GetNullableDouble(functionArgs.Parameters[3]); if (!nullableDouble2.HasValue) { throw new FormatException("dateTime function - Hours to add must be a number."); } hours = nullableDouble2.Value; } double minutes = 0.0; if (functionArgs.Parameters.Length > 4) { double? nullableDouble3 = GetNullableDouble(functionArgs.Parameters[4]); if (!nullableDouble3.HasValue) { throw new FormatException("dateTime function - Minutes to add must be a number."); } minutes = nullableDouble3.Value; } double seconds = 0.0; if (functionArgs.Parameters.Length > 5) { double? nullableDouble4 = GetNullableDouble(functionArgs.Parameters[5]); if (!nullableDouble4.HasValue) { throw new FormatException("dateTime function - Seconds to add must be a number."); } seconds = nullableDouble4.Value; } functionArgs.Result = DateTimeOffset.UtcNow.AddDays(days).AddHours(hours).AddMinutes(minutes) .AddSeconds(seconds) .ToString(text2, CultureInfo.InvariantCulture); } private static double? GetNullableDouble(Expression expression) { object obj = expression.Evaluate(); if (!(obj is double value)) { if (obj is int num) { return num; } return null; } return value; } internal static string BetterToString(this DateTime dateTime, string format) { return format switch { "dayOfYear" => dateTime.DayOfYear.ToString(), "weekOfMonth" => dateTime.WeekOfMonth().ToString(), "weekOfMonthText" => GetWeekText(dateTime.WeekOfMonth()), "weekDayOfMonth" => dateTime.WeekDayOfMonth().ToString(), "weekDayOfMonthText" => GetWeekText(dateTime.WeekDayOfMonth()), _ => dateTime.ToString(format, CultureInfo.InvariantCulture), }; } private static string GetWeekText(int weekOfMonth) { return weekOfMonth switch { 1 => "first", 2 => "second", 3 => "third", 4 => "fourth", _ => "last", }; } public static int WeekOfMonth(this DateTime dateTime) { DateTime date = dateTime.Date; DateTime dateTime2 = new DateTime(date.Year, date.Month, 1); return (date - dateTime2.AddDays(0 - dateTime2.DayOfWeek)).Days / 7 + 1; } public static int WeekDayOfMonth(this DateTime dateTime) { return (dateTime.Day - 1) / 7 + 1; } internal static string ToDateTimeInTargetTimeZone(this DateTime dateTime, string formatFormat, string timeZoneString) { TimeZoneInfo timeZoneInfo = TZConvert.GetTimeZoneInfo(timeZoneString); return new DateTimeOffset(dateTime, -timeZoneInfo.GetUtcOffset(dateTime)).UtcDateTime.BetterToString(formatFormat); } } internal static class Dictionary { internal static void Evaluate(FunctionArgs functionArgs) { ExtendedExpression.CheckParameterCount("dictionary", functionArgs, 2, 2147483646); if (functionArgs.Parameters.Length % 2 != 0) { throw new FormatException("dictionary: An even number of parameters must be provided."); } string key = null; Dictionary<string, object> dictionary = new Dictionary<string, object>(); for (int i = 0; i < functionArgs.Parameters.Length; i++) { object obj = functionArgs.Parameters[i].Evaluate(); if (i % 2 == 0) { if (!(obj is string)) { throw new FormatException(string.Format("{0}: parameter {1} must be a string.", "dictionary", i)); } key = (string)obj; } else { dictionary[key] = obj; } } functionArgs.Result = dictionary; } } internal static class Distinct { internal static void Evaluate(FunctionArgs functionArgs) { IEnumerable<object> source = (functionArgs.Parameters[0].Evaluate() as IEnumerable<object>) ?? throw new FormatException("First distinct parameter must be an IEnumerable."); functionArgs.Result = source.Distinct().ToList(); } } internal static class EndsWith { internal static void Evaluate(FunctionArgs functionArgs) { try { string text = (string)functionArgs.Parameters[0].Evaluate(); string value = (string)functionArgs.Parameters[1].Evaluate(); functionArgs.Result = text.EndsWith(value, StringComparison.InvariantCulture); } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("endsWith function requires two string parameters."); } } } internal static class ExtendObject { internal static void Evaluate(FunctionArgs functionArgs) { var (obj2, list2) = Parameters.GetParameters<object, List<object>>(functionArgs, "Evaluate"); if (list2.Count % 2 != 0) { throw new FormatException("Extension object list must have an even number of parameters, in the form string propertyName1, object value1, propertyName2, object value2, ..."); } JObject val = JObject.FromObject(obj2); for (int i = 0; i < list2.Count; i += 2) { string text = (list2[i] as string) ?? throw new FormatException("Property name must be a string"); object obj3 = list2[i + 1]; val[text] = JToken.FromObject(obj3); } functionArgs.Result = val; } } internal static class First { internal static void Evaluate(FunctionArgs functionArgs) { IList list = (functionArgs.Parameters[0].Evaluate() as IList) ?? throw new FormatException("First first parameter must be an IEnumerable."); string predicate = (functionArgs.Parameters[1].Evaluate() as string) ?? throw new FormatException("Second first parameter must be a string."); string nCalcString = (functionArgs.Parameters[2].Evaluate() as string) ?? throw new FormatException("Third first parameter must be a string."); Lambda lambda = new Lambda(predicate, nCalcString, functionArgs.Parameters[0].Parameters); foreach (object item in list) { if (lambda.Evaluate(item) as bool? == true) { functionArgs.Result = item; return; } } throw new FormatException("No matching element found."); } } internal static class FirstOrDefault { internal static void Evaluate(FunctionArgs functionArgs) { IList list = (functionArgs.Parameters[0].Evaluate() as IList) ?? throw new FormatException("First firstOrDefault parameter must be an IEnumerable."); string predicate = (functionArgs.Parameters[1].Evaluate() as string) ?? throw new FormatException("Second firstOrDefault parameter must be a string."); string nCalcString = (functionArgs.Parameters[2].Evaluate() as string) ?? throw new FormatException("Third firstOrDefault parameter must be a string."); Lambda lambda = new Lambda(predicate, nCalcString, functionArgs.Parameters[0].Parameters); foreach (object item in list) { if (lambda.Evaluate(item) as bool? == true) { functionArgs.Result = item; return; } } functionArgs.Result = null; } } internal static class Format { internal static void Evaluate(FunctionArgs functionArgs) { if (functionArgs.Parameters.Length < 2 || functionArgs.Parameters.Length > 3) { throw new ArgumentException(string.Format("{0} function - expected between {1} and {2} arguments", "format", 2, 3)); } object obj = functionArgs.Parameters[0].Evaluate(); if (!(functionArgs.Parameters[1].Evaluate() is string text)) { throw new ArgumentException("format function - expected second argument to be a format string"); } int num = functionArgs.Parameters.Length; object result; if (obj is int num2) { if (num != 2) { goto IL_013f; } result = num2.ToString(text, CultureInfo.InvariantCulture); } else if (obj is double num3) { if (num != 2) { goto IL_013f; } result = num3.ToString(text, CultureInfo.InvariantCulture); } else if (obj is DateTime dateTime) { if (num != 2) { if (num != 3) { goto IL_013f; } DateTime dateTime2 = dateTime; result = dateTime2.ToDateTimeInTargetTimeZone(text, (functionArgs.Parameters[2].Evaluate() as string) ?? throw new ArgumentException("format function - expected third argument to be a TimeZone string")); } else { result = dateTime.BetterToString(text); } } else { if (!(obj is string inputString) || num != 2) { goto IL_013f; } result = GetThing(inputString, text); } functionArgs.Result = result; return; IL_013f: throw new NotSupportedException("Unsupported input type " + obj.GetType().Name + " or incorrect number of parameters."); } private static object GetThing(string inputString, string formatFormat) { if (long.TryParse(inputString, out var result)) { return result.ToString(formatFormat, CultureInfo.InvariantCulture); } if (double.TryParse(inputString, out var result2)) { return result2.ToString(formatFormat, CultureInfo.InvariantCulture); } if (DateTimeOffset.TryParse(inputString, CultureInfo.InvariantCulture.DateTimeFormat, DateTimeStyles.AssumeUniversal, out var result3)) { return result3.UtcDateTime.BetterToString(formatFormat); } throw new FormatException("Could not parse '" + inputString + "' as a number or date."); } } internal static class GetProperty { internal static void Evaluate(FunctionArgs functionArgs) { //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Expected I4, but got Unknown //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) object obj; string text; try { obj = functionArgs.Parameters[0].Evaluate(); text = (string)functionArgs.Parameters[1].Evaluate(); } catch (Exception innerException) { throw new FormatException("getProperty() requires two parameters.", innerException); } JObject val = (JObject)((obj is JObject) ? obj : null); if (val != null) { JToken val2 = val[text]; object result; switch ((val2 != null) ? new JTokenType?(val2.Type) : null) { case null: case 9L: case 10L: result = null; break; case 0L: result = val2.ToObject<JObject>(); break; case 1L: result = val2.ToObject<JArray>(); break; case 2L: result = val2.ToObject<JConstructor>(); break; case 3L: result = val2.ToObject<JProperty>(); break; case 4L: result = val2.ToObject<JValue>(); break; case 5L: result = val2.ToObject<int>(); break; case 6L: result = val2.ToObject<float>(); break; case 7L: result = val2.ToObject<string>(); break; case 8L: result = val2.ToObject<bool>(); break; case 11L: result = val2.ToObject<DateTime>(); break; case 12L: case 13L: result = val2.ToObject<JValue>(); break; case 14L: result = val2.ToObject<Guid>(); break; default: { JTokenType type = val2.Type; throw new NotSupportedException("Unsupported JTokenType: " + ((object)(JTokenType)(ref type)).ToString()); } } functionArgs.Result = result; } else { Type type2 = obj.GetType(); PropertyInfo propertyInfo = type2.GetProperty(text) ?? throw new FormatException("Could not find property " + text + " on type " + type2.Name); functionArgs.Result = propertyInfo.GetValue(obj); } } } internal static class Humanize { internal static void Evaluate(FunctionArgs functionArgs) { double param1Double; string value; try { if (!double.TryParse(functionArgs.Parameters[0].Evaluate().ToString(), out var result)) { throw new Exception(); } param1Double = result; value = (string)functionArgs.Parameters[1].Evaluate(); } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("humanize function - The first number should be a valid floating-point number and the second should be a time unit (" + string.Join(", ", Enum.GetNames(typeof(TimeUnit))) + ")."); } if (!Enum.TryParse<TimeUnit>(value, ignoreCase: true, out var result2)) { throw new FormatException("humanize function - Parameter 2 must be a time unit - one of " + string.Join(", ", from n in Enum.GetNames(typeof(TimeUnit)) select "'" + n + "'") + "."); } functionArgs.Result = Humanise(param1Double, result2); } private static string Humanise(double param1Double, TimeUnit timeUnit) { try { return timeUnit switch { TimeUnit.Milliseconds => System.TimeSpan.FromMilliseconds(param1Double).Humanise(), TimeUnit.Seconds => System.TimeSpan.FromSeconds(param1Double).Humanise(), TimeUnit.Minutes => System.TimeSpan.FromMinutes(param1Double).Humanise(), TimeUnit.Hours => System.TimeSpan.FromHours(param1Double).Humanise(), TimeUnit.Days => System.TimeSpan.FromDays(param1Double).Humanise(), TimeUnit.Weeks => System.TimeSpan.FromDays(param1Double * 7.0).Humanise(), TimeUnit.Years => System.TimeSpan.FromDays(param1Double * 365.25).Humanise(), _ => throw new FormatException($"{timeUnit} is not a supported time unit for humanization."), }; } catch (OverflowException) { throw new FormatException("The value is too big to use humanize. It must be a double (a 64-bit, floating point number)"); } } } internal static class If { internal static void Evaluate(FunctionArgs functionArgs) { if (functionArgs.Parameters.Length != 3) { throw new FormatException("if() requires three parameters."); } bool flag; try { flag = (bool)functionArgs.Parameters[0].Evaluate(); } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException(string.Format("Could not evaluate {0} function parameter 1 '{1}'.", "if", functionArgs.Parameters[0].ParsedExpression)); } if (flag) { try { functionArgs.Result = functionArgs.Parameters[1].Evaluate(); return; } catch (Exception ex2) when (!(ex2 is NCalcExtensionsException)) { throw new FormatException(string.Format("Could not evaluate {0} function parameter 2 '{1}' due to {2}.", "if", functionArgs.Parameters[1].ParsedExpression, ex2.Message), ex2); } } try { functionArgs.Result = functionArgs.Parameters[2].Evaluate(); } catch (Exception ex3) when (!(ex3 is NCalcExtensionsException)) { throw new FormatException(string.Format("Could not evaluate {0} function parameter 3 '{1}' due to {2}.", "if", functionArgs.Parameters[2].ParsedExpression, ex3.Message), ex3); } } } internal static class In { internal static void Evaluate(FunctionArgs functionArgs) { if (functionArgs.Parameters.Length < 2) { throw new FormatException("in() requires at least two parameters."); } try { object item = functionArgs.Parameters[0].Evaluate(); List<object> list = (from p in functionArgs.Parameters.Skip(1) select p.Evaluate()).ToList(); functionArgs.Result = list.Contains(item); } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("in() parameters malformed."); } } } internal static class IndexOf { internal static void Evaluate(FunctionArgs functionArgs) { try { string text = (string)functionArgs.Parameters[0].Evaluate(); string value = (string)functionArgs.Parameters[1].Evaluate(); functionArgs.Result = text.IndexOf(value, StringComparison.InvariantCulture); } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("indexOf() requires two string parameters."); } } } internal static class IsGuid { internal static void Evaluate(FunctionArgs functionArgs) { if (functionArgs.Parameters.Length != 1) { throw new FormatException("isGuid() requires one parameter."); } object obj = functionArgs.Parameters[0].Evaluate(); functionArgs.Result = obj is Guid || (obj is string && Guid.TryParse(obj.ToString(), out var _)); } } internal static class IsInfinite { internal static void Evaluate(FunctionArgs functionArgs) { if (functionArgs.Parameters.Length != 1) { throw new FormatException("isInfinite() requires one parameter."); } try { functionArgs.Result = functionArgs.Parameters[0].Evaluate() is double d && (double.IsPositiveInfinity(d) || double.IsNegativeInfinity(d)); } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException(ex.Message); } } } internal static class IsNaN { internal static void Evaluate(FunctionArgs functionArgs) { if (functionArgs.Parameters.Length != 1) { throw new FormatException("isNaN() requires one parameter."); } try { object obj = functionArgs.Parameters[0].Evaluate(); bool flag = ((obj is double d) ? double.IsNaN(d) : ((obj is float f) ? float.IsNaN(f) : ((!(obj is int) && !(obj is long) && !(obj is short) && !(obj is byte) && !(obj is sbyte) && !(obj is uint) && !(obj is ulong) && !(obj is ushort) && !(obj is decimal)) ? true : false))); functionArgs.Result = flag; } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException(ex.Message); } } } internal static class IsNull { internal static void Evaluate(FunctionArgs functionArgs) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Invalid comparison between Unknown and I4 if (functionArgs.Parameters.Length != 1) { throw new FormatException("isNull() requires one parameter."); } try { object obj = functionArgs.Parameters[0].Evaluate(); int num; if (obj != null) { JToken val = (JToken)((obj is JToken) ? obj : null); num = ((val != null && (int)val.Type == 10) ? 1 : 0); } else { num = 1; } functionArgs.Result = (byte)num != 0; } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException(ex.Message); } } } internal static class IsNullOrEmpty { internal static void Evaluate(FunctionArgs functionArgs) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Invalid comparison between Unknown and I4 if (functionArgs.Parameters.Length != 1) { throw new FormatException("isNullOrEmpty() requires one parameter."); } try { object obj = functionArgs.Parameters[0].Evaluate(); int num; if (obj != null) { JToken val = (JToken)((obj is JToken) ? obj : null); if (val == null || (int)val.Type != 10) { num = ((obj is string text && text == string.Empty) ? 1 : 0); goto IL_0058; } } num = 1; goto IL_0058; IL_0058: functionArgs.Result = (byte)num != 0; } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException(ex.Message); } } } internal static class IsNullOrWhiteSpace { internal static void Evaluate(FunctionArgs functionArgs) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Invalid comparison between Unknown and I4 if (functionArgs.Parameters.Length != 1) { throw new FormatException("isNullOrWhiteSpace() requires one parameter."); } try { object obj = functionArgs.Parameters[0].Evaluate(); int num; if (obj != null) { JToken val = (JToken)((obj is JToken) ? obj : null); if (val == null || (int)val.Type != 10) { num = ((obj is string value && string.IsNullOrWhiteSpace(value)) ? 1 : 0); goto IL_0053; } } num = 1; goto IL_0053; IL_0053: functionArgs.Result = (byte)num != 0; } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException(ex.Message); } } } internal static class IsSet { internal static void Evaluate(FunctionArgs functionArgs) { FunctionArgs functionArgs2 = functionArgs; if (functionArgs2.Parameters.Length != 1) { throw new FormatException("isSet() requires one parameter."); } functionArgs2.Result = functionArgs2.Parameters[0].Parameters.Keys.Any((string p) => p == functionArgs2.Parameters[0].Evaluate() as string); } } internal static class ItemAtIndex { internal static void Evaluate(FunctionArgs functionArgs) { IList list; int num; try { list = (IList)functionArgs.Parameters[0].Evaluate(); num = (int)functionArgs.Parameters[1].Evaluate(); if (num < 0) { throw new Exception(); } } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("itemAtIndex() requires two parameters. The first should be an IList and the second should be a non-negative integer."); } functionArgs.Result = list[num]; } } internal static class Join { internal static void Evaluate(FunctionArgs functionArgs) { List<string> values; string separator; try { object obj = functionArgs.Parameters[0].Evaluate(); values = ((obj == null) ? new List<string>() : ((!(obj is List<object> source)) ? (obj as IEnumerable<string>).ToList() : source.Select((object u) => u?.ToString() ?? string.Empty).ToList())); separator = (string)functionArgs.Parameters[1].Evaluate(); } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("join() requires that the first parameter is a list or enumerable and that the second parameter is a string."); } functionArgs.Result = string.Join(separator, values); } } internal static class JPath { internal static void Evaluate(FunctionArgs functionArgs) { bool flag = false; if (functionArgs.Parameters.Length > 3) { throw new FormatException("jPath function - first parameter should be an object capable of being converted to a JObject and second a string jPath expression with optional third parameter returnNullIfNotFound."); } JObject val2; string text; try { object obj = functionArgs.Parameters[0].Evaluate() ?? throw new NCalcExtensionsException("jPath function - parameter 1 should not be null."); JObject val = (JObject)((obj is JObject) ? obj : null); val2 = ((val == null) ? JObject.FromObject(obj) : val); text = (string)functionArgs.Parameters[1].Evaluate(); } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("jPath function - first parameter should be an object capable of being converted to a JObject and second a string jPath expression with optional third parameter returnNullIfNotFound. ... " + ex.Message); } if (functionArgs.Parameters.Length >= 3) { try { flag = (bool)functionArgs.Parameters[2].Evaluate(); } catch (Exception) { throw new FormatException("jPath function - parameter 3 should be a bool."); } } JToken val3; try { val3 = ((JToken)val2).SelectToken(text); } catch (Exception ex3) { throw new NCalcExtensionsException("jPath function - An unknown issue occurred while trying to select jPathExpression value: " + ex3.Message); } if (val3 == null) { if (flag) { functionArgs.Result = null; return; } throw new NCalcExtensionsException("jPath function - jPath expression did not result in a match."); } JValue val4 = (JValue)(object)((val3 is JValue) ? val3 : null); object result; if (val4 == null) { JArray val5 = (JArray)(object)((val3 is JArray) ? val3 : null); result = ((val5 == null) ? ((object)JObject.FromObject((object)val3)) : ((object)val5)); } else { result = val4.Value; } functionArgs.Result = result; } } internal static class LambdaFunction { internal static void Evaluate(FunctionArgs functionArgs, Dictionary<string, object?> storageDictionary) { string predicate; string nCalcString; try { predicate = (string)functionArgs.Parameters[0].Evaluate(); nCalcString = (string)functionArgs.Parameters[1].Evaluate(); } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("store() requires two parameters."); } functionArgs.Result = new Lambda(predicate, nCalcString, storageDictionary); } } internal static class LastIndexOf { internal static void Evaluate(FunctionArgs functionArgs) { try { string text = (string)functionArgs.Parameters[0].Evaluate(); string value = (string)functionArgs.Parameters[1].Evaluate(); functionArgs.Result = text.LastIndexOf(value, StringComparison.InvariantCulture); } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("lastIndexOf() requires two string parameters."); } } } internal static class Length { internal static void Evaluate(FunctionArgs functionArgs) { try { object obj = functionArgs.Parameters[0].Evaluate(); if (obj is string text) { functionArgs.Result = text.Length; } else { functionArgs.Result = GetLength(obj); } } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("length() requires one string or IList parameter."); } } private static int GetLength(object value) { if (value is IList list) { return list.Count; } throw new FormatException("length() requires one string or IList parameter."); } } internal static class List { internal static void Evaluate(FunctionArgs functionArgs) { functionArgs.Result = functionArgs.Parameters.Select((Expression p) => p.Evaluate()).ToList(); } } internal static class ListHelpers { internal static List<object?> Collapse(this List<object?> value) { while (value.All((object v) => v?.GetType() == typeof(List<object>))) { if (value.Count == 0) { return new List<object>(); } value = value.SelectMany((object v) => v as List<object>).ToList(); } return value; } } internal static class ListOf { internal static void Evaluate(FunctionArgs functionArgs) { string text = (functionArgs.Parameters[0].Evaluate() as string) ?? throw new FormatException("First listOf parameter must be a string."); Expression[] remainingParameters = functionArgs.Parameters.Skip(1).ToArray(); switch (text) { case "byte": functionArgs.Result = GetListOf<byte>(remainingParameters); break; case "byte?": functionArgs.Result = GetListOf<byte?>(remainingParameters); break; case "short": functionArgs.Result = GetListOf<short>(remainingParameters); break; case "short?": functionArgs.Result = GetListOf<short?>(remainingParameters); break; case "int": functionArgs.Result = GetListOf<int>(remainingParameters); break; case "int?": functionArgs.Result = GetListOf<int?>(remainingParameters); break; case "long": functionArgs.Result = GetListOf<long>(remainingParameters); break; case "long?": functionArgs.Result = GetListOf<long?>(remainingParameters); break; case "float": functionArgs.Result = GetListOf<float>(remainingParameters); break; case "float?": functionArgs.Result = GetListOf<float?>(remainingParameters); break; case "double": functionArgs.Result = GetListOf<double>(remainingParameters); break; case "double?": functionArgs.Result = GetListOf<double?>(remainingParameters); break; case "decimal": functionArgs.Result = GetListOf<decimal>(remainingParameters); break; case "decimal?": functionArgs.Result = GetListOf<decimal?>(remainingParameters); break; case "string": functionArgs.Result = GetListOf<string>(remainingParameters); break; case "string?": functionArgs.Result = GetListOf<string>(remainingParameters); break; case "object": functionArgs.Result = GetListOf<object>(remainingParameters); break; case "object?": functionArgs.Result = GetListOf<object>(remainingParameters); break; default: throw new FormatException("First listOf parameter must be a string of a numeric or string type."); } } private static List<T> GetListOf<T>(Expression[] remainingParameters) { List<T> list = new List<T>(); foreach (Expression val in remainingParameters) { object obj = val.Evaluate(); if (typeof(T) == typeof(object)) { list.Add((T)obj); } else if (Nullable.GetUnderlyingType(typeof(T)) != null && obj == null) { list.Add(default(T)); } else if (Nullable.GetUnderlyingType(typeof(T)) != null && obj != null) { Type underlyingType = Nullable.GetUnderlyingType(typeof(T)); if (underlyingType != null) { object obj2 = Convert.ChangeType(obj, underlyingType); list.Add((T)obj2); } } else if (obj is T item) { list.Add(item); } else { if (!(Convert.ChangeType(obj, typeof(T)) is T item2)) { throw new FormatException("Parameter must be of type " + TypeHelper.AsHumanString<T>() + "."); } list.Add(item2); } } return list; } } internal static class Max { internal static void Evaluate(FunctionArgs functionArgs) { object obj = functionArgs.Parameters[0].Evaluate(); object result; if (functionArgs.Parameters.Length == 1) { object obj2 = obj; if (obj2 != null) { if (!(obj2 is IEnumerable<byte> source)) { if (!(obj2 is IEnumerable<byte?> source2)) { if (!(obj2 is IEnumerable<short> source3)) { if (!(obj2 is IEnumerable<short?> source4)) { if (!(obj2 is IEnumerable<int> source5)) { if (!(obj2 is IEnumerable<int?> source6)) { if (!(obj2 is IEnumerable<long> source7)) { if (!(obj2 is IEnumerable<long?> source8)) { if (!(obj2 is IEnumerable<float> source9)) { if (!(obj2 is IEnumerable<float?> source10)) { if (!(obj2 is IEnumerable<double> source11)) { if (!(obj2 is IEnumerable<double?> source12)) { if (!(obj2 is IEnumerable<decimal> source13)) { if (!(obj2 is IEnumerable<decimal?> source14)) { if (!(obj2 is IEnumerable<string> source15)) { if (!(obj2 is IEnumerable<object> enumerable)) { throw new FormatException("First max parameter must be an IEnumerable of a numeric or string type if only on parameter is present."); } if (enumerable.All((object x) => (x is string || x == null) ? true : false)) { result = enumerable.DefaultIfEmpty(null).Max((object x) => x as string); } else { IEnumerable<object> objectList = enumerable; result = GetMax(objectList); } } else { result = source15.DefaultIfEmpty(null).Max(); } } else { result = source14.DefaultIfEmpty(null).Max(); } } else { result = source13.Max(); } } else { result = source12.DefaultIfEmpty(null).Max(); } } else { result = source11.Max(); } } else { result = source10.DefaultIfEmpty(null).Max(); } } else { result = source9.Max(); } } else { result = source8.DefaultIfEmpty(null).Max(); } } else { result = source7.Max(); } } else { result = source6.DefaultIfEmpty(null).Max(); } } else { result = source5.Max(); } } else { result = source4.DefaultIfEmpty(null).Max(); } } else { result = source3.Cast<int>().Max(); } } else { result = source2.DefaultIfEmpty(null).Max(); } } else { result = source.Cast<int>().Max(); } } else { result = null; } functionArgs.Result = result; return; } string predicate = (functionArgs.Parameters[1].Evaluate() as string) ?? throw new FormatException("Second max parameter must be a string."); string nCalcString = (functionArgs.Parameters[2].Evaluate() as string) ?? throw new FormatException("Third max parameter must be a string."); Lambda lambda = new Lambda(predicate, nCalcString, functionArgs.Parameters[0].Parameters); if (!(obj is IEnumerable<byte> source16)) { if (!(obj is IEnumerable<byte?> source17)) { if (!(obj is IEnumerable<short> source18)) { if (!(obj is IEnumerable<short?> source19)) { if (!(obj is IEnumerable<int> source20)) { if (!(obj is IEnumerable<int?> source21)) { if (!(obj is IEnumerable<long> source22)) { if (!(obj is IEnumerable<long?> source23)) { if (!(obj is IEnumerable<float> source24)) { if (!(obj is IEnumerable<float?> source25)) { if (!(obj is IEnumerable<double> source26)) { if (!(obj is IEnumerable<double?> source27)) { if (!(obj is IEnumerable<decimal> source28)) { if (!(obj is IEnumerable<decimal?> source29)) { if (!(obj is IEnumerable<string> source30)) { throw new FormatException("First max parameter must be an IEnumerable of a numeric type."); } result = source30.Max((string value) => (string)lambda.Evaluate(value)); } else { result = source29.Max((decimal? value) => (decimal?)lambda.Evaluate(value)); } } else { result = source28.Max((decimal value) => (decimal?)lambda.Evaluate(value)); } } else { result = source27.Max((double? value) => (double?)lambda.Evaluate(value)); } } else { result = source26.Max((double value) => (double?)lambda.Evaluate(value)); } } else { result = source25.Max((float? value) => (float?)lambda.Evaluate(value)); } } else { result = source24.Max((float value) => (float?)lambda.Evaluate(value)); } } else { result = source23.Max((long? value) => (long?)lambda.Evaluate(value)); } } else { result = source22.Max((long value) => (long?)lambda.Evaluate(value)); } } else { result = source21.Max((int? value) => (int?)lambda.Evaluate(value)); } } else { result = source20.Max((int value) => (int?)lambda.Evaluate(value)); } } else { result = source19.Cast<int>().Max((int value) => (int?)lambda.Evaluate(value)); } } else { result = source18.Cast<int>().Max((int value) => (int?)lambda.Evaluate(value)); } } else { result = source17.Cast<int>().Max((int value) => (int?)lambda.Evaluate(value)); } } else { result = source16.Cast<int>().Max((int value) => (int?)lambda.Evaluate(value)); } functionArgs.Result = result; } private static double GetMax(IEnumerable<object?> objectList) { //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Invalid comparison between Unknown and I4 //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Invalid comparison between Unknown and I4 //IL_0130: Unknown result type (might be due to invalid IL or missing references) double num = 0.0; foreach (object @object in objectList) { double num8; if (!(@object is byte b)) { if (!(@object is short num2)) { if (!(@object is int num3)) { if (!(@object is long num4)) { if (!(@object is float num5)) { if (!(@object is double num6)) { if (!(@object is decimal num7)) { JValue val = (JValue)((@object is JValue) ? @object : null); if (val == null) { if (@object != null) { throw new FormatException("Found unsupported type '" + @object?.GetType().Name + "' when completing sum."); } num8 = 0.0; } else { JTokenType type = ((JToken)val).Type; float num9; if ((int)type != 6) { if ((int)type != 7) { throw new FormatException($"Found unsupported JToken type '{((JToken)val).Type}' when completing sum."); } num9 = Extensions.Value<float>((IEnumerable<JToken>)val); } else { num9 = Extensions.Value<int>((IEnumerable<JToken>)val); } num8 = num9; } } else { num8 = (double)num7; } } else { num8 = num6; } } else { num8 = num5; } } else { num8 = num4; } } else { num8 = num3; } } else { num8 = num2; } } else { num8 = (int)b; } double num10 = num8; if (num10 < num) { num = num10; } } return num; } } internal static class MaxValue { private const string ErrorMessage = "maxValue takes exactly one string parameter, which must be one of 'sbyte', 'byte', 'short', 'ushort', 'int', 'uint', 'long', 'ulong', 'float', 'double' or 'decimal'."; internal static void Evaluate(FunctionArgs functionArgs) { object obj = functionArgs.Parameters[0].Evaluate(); if (functionArgs.Parameters.Length != 1) { throw new FormatException("maxValue takes exactly one string parameter, which must be one of 'sbyte', 'byte', 'short', 'ushort', 'int', 'uint', 'long', 'ulong', 'float', 'double' or 'decimal'."); } functionArgs.Result = (obj as string) switch { "sbyte" => sbyte.MaxValue, "byte" => byte.MaxValue, "short" => short.MaxValue, "ushort" => ushort.MaxValue, "int" => int.MaxValue, "uint" => uint.MaxValue, "long" => long.MaxValue, "ulong" => ulong.MaxValue, "float" => float.MaxValue, "double" => double.MaxValue, "decimal" => decimal.MaxValue, _ => throw new FormatException("maxValue takes exactly one string parameter, which must be one of 'sbyte', 'byte', 'short', 'ushort', 'int', 'uint', 'long', 'ulong', 'float', 'double' or 'decimal'."), }; } } internal static class Min { internal static void Evaluate(FunctionArgs functionArgs) { object obj = functionArgs.Parameters[0].Evaluate(); object result; if (functionArgs.Parameters.Length == 1) { object obj2 = obj; if (obj2 != null) { if (!(obj2 is IEnumerable<byte> source)) { if (!(obj2 is IEnumerable<byte?> source2)) { if (!(obj2 is IEnumerable<short> source3)) { if (!(obj2 is IEnumerable<short?> source4)) { if (!(obj2 is IEnumerable<int> source5)) { if (!(obj2 is IEnumerable<int?> source6)) { if (!(obj2 is IEnumerable<long> source7)) { if (!(obj2 is IEnumerable<long?> source8)) { if (!(obj2 is IEnumerable<float> source9)) { if (!(obj2 is IEnumerable<float?> source10)) { if (!(obj2 is IEnumerable<double> source11)) { if (!(obj2 is IEnumerable<double?> source12)) { if (!(obj2 is IEnumerable<decimal> source13)) { if (!(obj2 is IEnumerable<decimal?> source14)) { if (!(obj2 is IEnumerable<string> source15)) { if (!(obj2 is IEnumerable<object> enumerable)) { throw new FormatException("First min parameter must be an IEnumerable of a numeric or string type if only one parameter is present."); } if (enumerable.All((object x) => (x is string || x == null) ? true : false)) { result = enumerable.DefaultIfEmpty(null).Min((object x) => x as string); } else { IEnumerable<object> objectList = enumerable; result = GetMin(objectList); } } else { result = source15.DefaultIfEmpty(null).Min(); } } else { result = source14.DefaultIfEmpty(null).Min(); } } else { result = source13.Min(); } } else { result = source12.DefaultIfEmpty(null).Min(); } } else { result = source11.Min(); } } else { result = source10.DefaultIfEmpty(null).Min(); } } else { result = source9.Min(); } } else { result = source8.DefaultIfEmpty(null).Min(); } } else { result = source7.Min(); } } else { result = source6.DefaultIfEmpty(null).Min(); } } else { result = source5.Min(); } } else { result = source4.DefaultIfEmpty(null).Min(); } } else { result = source3.Cast<int>().Min(); } } else { result = source2.DefaultIfEmpty(null).Min(); } } else { result = source.Cast<int>().Min(); } } else { result = null; } functionArgs.Result = result; return; } string predicate = (functionArgs.Parameters[1].Evaluate() as string) ?? throw new FormatException("Second min parameter must be a string."); string nCalcString = (functionArgs.Parameters[2].Evaluate() as string) ?? throw new FormatException("Third min parameter must be a string."); Lambda lambda = new Lambda(predicate, nCalcString, functionArgs.Parameters[0].Parameters); if (!(obj is IEnumerable<byte> source16)) { if (!(obj is IEnumerable<byte?> source17)) { if (!(obj is IEnumerable<short> source18)) { if (!(obj is IEnumerable<short?> source19)) { if (!(obj is IEnumerable<int> source20)) { if (!(obj is IEnumerable<int?> source21)) { if (!(obj is IEnumerable<long> source22)) { if (!(obj is IEnumerable<long?> source23)) { if (!(obj is IEnumerable<float> source24)) { if (!(obj is IEnumerable<float?> source25)) { if (!(obj is IEnumerable<double> source26)) { if (!(obj is IEnumerable<double?> source27)) { if (!(obj is IEnumerable<decimal> source28)) { if (!(obj is IEnumerable<decimal?> source29)) { if (!(obj is IEnumerable<string> source30)) { throw new FormatException("First min parameter must be an IEnumerable of a numeric type."); } result = source30.Min((string value) => (string)lambda.Evaluate(value)); } else { result = source29.Min((decimal? value) => (decimal?)lambda.Evaluate(value)); } } else { result = source28.Min((decimal value) => (decimal?)lambda.Evaluate(value)); } } else { result = source27.Min((double? value) => (double?)lambda.Evaluate(value)); } } else { result = source26.Min((double value) => (double?)lambda.Evaluate(value)); } } else { result = source25.Min((float? value) => (float?)lambda.Evaluate(value)); } } else { result = source24.Min((float value) => (float?)lambda.Evaluate(value)); } } else { result = source23.Min((long? value) => (long?)lambda.Evaluate(value)); } } else { result = source22.Min((long value) => (long?)lambda.Evaluate(value)); } } else { result = source21.Min((int? value) => (int?)lambda.Evaluate(value)); } } else { result = source20.Min((int value) => (int?)lambda.Evaluate(value)); } } else { result = source19.Cast<int>().Min((int value) => (int?)lambda.Evaluate(value)); } } else { result = source18.Cast<int>().Min((int value) => (int?)lambda.Evaluate(value)); } } else { result = source17.Cast<int>().Min((int value) => (int?)lambda.Evaluate(value)); } } else { result = source16.Cast<int>().Min((int value) => (int?)lambda.Evaluate(value)); } functionArgs.Result = result; } private static double GetMin(IEnumerable<object?> objectList) { //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Invalid comparison between Unknown and I4 //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Invalid comparison between Unknown and I4 //IL_0130: Unknown result type (might be due to invalid IL or missing references) double num = 0.0; foreach (object @object in objectList) { double num8; if (!(@object is byte b)) { if (!(@object is short num2)) { if (!(@object is int num3)) { if (!(@object is long num4)) { if (!(@object is float num5)) { if (!(@object is double num6)) { if (!(@object is decimal num7)) { JValue val = (JValue)((@object is JValue) ? @object : null); if (val == null) { if (@object != null) { throw new FormatException("Found unsupported type '" + @object?.GetType().Name + "' when completing sum."); } num8 = 0.0; } else { JTokenType type = ((JToken)val).Type; float num9; if ((int)type != 6) { if ((int)type != 7) { throw new FormatException($"Found unsupported JToken type '{((JToken)val).Type}' when completing sum."); } num9 = Extensions.Value<float>((IEnumerable<JToken>)val); } else { num9 = Extensions.Value<int>((IEnumerable<JToken>)val); } num8 = num9; } } else { num8 = (double)num7; } } else { num8 = num6; } } else { num8 = num5; } } else { num8 = num4; } } else { num8 = num3; } } else { num8 = num2; } } else { num8 = (int)b; } double num10 = num8; if (num10 < num) { num = num10; } } return num; } } internal static class MinValue { private const string ErrorMessage = "minValue takes exactly one string parameter, which must be one of 'sbyte', 'byte', 'short', 'ushort', 'int', 'uint', 'long', 'ulong', 'float', 'double' or 'decimal'."; internal static void Evaluate(FunctionArgs functionArgs) { object obj = functionArgs.Parameters[0].Evaluate(); if (functionArgs.Parameters.Length != 1) { throw new FormatException("minValue takes exactly one string parameter, which must be one of 'sbyte', 'byte', 'short', 'ushort', 'int', 'uint', 'long', 'ulong', 'float', 'double' or 'decimal'."); } functionArgs.Result = (obj as string) switch { "sbyte" => sbyte.MinValue, "byte" => (byte)0, "short" => short.MinValue, "ushort" => (ushort)0, "int" => int.MinValue, "uint" => 0u, "long" => long.MinValue, "ulong" => 0uL, "float" => float.MinValue, "double" => double.MinValue, "decimal" => decimal.MinValue, _ => throw new FormatException("minValue takes exactly one string parameter, which must be one of 'sbyte', 'byte', 'short', 'ushort', 'int', 'uint', 'long', 'ulong', 'float', 'double' or 'decimal'."), }; } } internal static class NewJObject { internal static void Evaluate(FunctionArgs functionArgs) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown if (functionArgs.Parameters.Length % 2 != 0) { throw new FormatException("jObject() requires an even number of parameters."); } int num = 0; JObject val = new JObject(); while (num < functionArgs.Parameters.Length) { if (!(functionArgs.Parameters[num++].Evaluate() is string text)) { throw new FormatException("jObject() requires a string key."); } if (val.ContainsKey(text)) { throw new FormatException("jObject() can only define property " + text + " once."); } object obj = functionArgs.Parameters[num++].Evaluate(); val.Add(text, (JToken)((obj == null) ? ((object)JValue.CreateNull()) : ((object)JToken.FromObject(obj)))); } functionArgs.Result = val; } } internal static class SetProperties { internal static void Evaluate(FunctionArgs functionArgs) { if (functionArgs.Parameters.Length % 2 != 1) { throw new FormatException("setProperties() requires an odd number of parameters."); } int num = 0; object obj = functionArgs.Parameters[num++].Evaluate(); JObject val = (JObject)((obj is JObject) ? obj : null); JObject val2 = ((val == null) ? JObject.FromObject(obj) : val); while (num < functionArgs.Parameters.Length) { if (!(functionArgs.Parameters[num++].Evaluate() is string text)) { throw new FormatException("setProperties() requires a string key."); } if (val2.ContainsKey(text)) { throw new FormatException("setProperties() can only define property " + text + " once."); } object obj2 = functionArgs.Parameters[num++].Evaluate(); val2.Add(text, (JToken)((obj2 == null) ? ((object)JValue.CreateNull()) : ((object)JToken.FromObject(obj2)))); } functionArgs.Result = val2; } } internal static class NullCoalesce { internal static void Evaluate(FunctionArgs functionArgs) { Expression[] parameters = functionArgs.Parameters; foreach (Expression val in parameters) { object obj = val.Evaluate(); if (obj != null) { functionArgs.Result = obj; return; } } functionArgs.Result = null; } } internal static class OrderBy { internal static void Evaluate(FunctionArgs functionArgs) { int num = 0; IEnumerable<object> source = (functionArgs.Parameters[num++].Evaluate() as IEnumerable<object>) ?? throw new FormatException("First orderBy parameter must be an IEnumerable."); string predicate = (functionArgs.Parameters[num++].Evaluate() as string) ?? throw new FormatException("Second orderBy parameter must be a string."); string nCalcString = (functionArgs.Parameters[num++].Evaluate() as string) ?? throw new FormatException("Third orderBy parameter must be a string."); Lambda lambda = new Lambda(predicate, nCalcString, functionArgs.Parameters[0].Parameters); IOrderedEnumerable<object> source2 = source.OrderBy((object value) => lambda.Evaluate(value)); int num2 = functionArgs.Parameters.Length; while (num < num2) { nCalcString = (functionArgs.Parameters[num++].Evaluate() as string) ?? throw new FormatException(string.Format("{0} parameter {1} must be a string.", "orderBy", num + 1)); lambda = new Lambda(predicate, nCalcString, functionArgs.Parameters[0].Parameters); source2 = source2.ThenBy((object value) => lambda.Evaluate(value)); } functionArgs.Result = source2.ToList(); } } internal static class PadLeft { internal static void Evaluate(FunctionArgs functionArgs) { string text; int num; char paddingChar; try { text = (string)functionArgs.Parameters[0].Evaluate(); num = (int)functionArgs.Parameters[1].Evaluate(); if (num < 1) { throw new NCalcExtensionsException("padLeft() requires a DesiredStringLength for parameter 2 that is >= 1."); } string text2 = (functionArgs.Parameters[2].Evaluate() as string) ?? throw new NCalcExtensionsException("padLeft() requires that parameter 3 be a string."); if (text2.Length != 1) { throw new NCalcExtensionsException("padLeft() requires a single character string for parameter 3."); } paddingChar = text2[0]; } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("padLeft() requires a string Input, an integer DesiredStringLength, and a single Padding character."); } functionArgs.Result = text.PadLeft(num, paddingChar); } } internal static class Parameters { internal static T1 GetParameter<T1>(FunctionArgs args, [CallerMemberName] string callerName = "") { CheckParameterCount(1, 1, args.Parameters, callerName); T1 val = (T1)args.Parameters[0].Evaluate(); if (val == null) { throw new FormatException(callerName + " argument should be a " + typeof(T1).Name + "."); } return val; } internal static Tuple<T1, T2> GetParameters<T1, T2>(FunctionArgs args, [CallerMemberName] string callerName = "") { CheckParameterCount(2, 2, args.Parameters, callerName); int num = 0; T1 val = (T1)args.Parameters[num++].Evaluate(); if (val == null) { throw new FormatException(callerName + " first argument should be a " + typeof(T1).Name + "."); } T2 val2 = (T2)args.Parameters[num++].Evaluate(); if (val2 == null) { throw new FormatException(callerName + " second argument should be a " + typeof(T2).Name + "."); } return new Tuple<T1, T2>(val, val2); } internal static Tuple<T1, T2, T3> GetParameters<T1, T2, T3>(FunctionArgs args, [CallerMemberName] string callerName = "") { CheckParameterCount(3, 3, args.Parameters, callerName); int num = 0; T1 val = (T1)args.Parameters[num++].Evaluate(); if (val == null) { throw new FormatException(callerName + " first argument should be a " + typeof(T1).Name + "."); } T2 val2 = (T2)args.Parameters[num++].Evaluate(); if (val2 == null) { throw new FormatException(callerName + " second argument should be a " + typeof(T2).Name + "."); } T3 val3 = (T3)args.Parameters[num++].Evaluate(); if (val3 == null) { throw new FormatException(callerName + " third argument should be a " + typeof(T3).Name + "."); } return new Tuple<T1, T2, T3>(val, val2, val3); } internal static Tuple<T1, T2, T3, T4> GetParameters<T1, T2, T3, T4>(FunctionArgs args, [CallerMemberName] string callerName = "") { CheckParameterCount(4, 4, args.Parameters, callerName); int num = 0; T1 val = (T1)args.Parameters[num++].Evaluate(); if (val == null) { throw new FormatException(callerName + " first argument should be a " + typeof(T1).Name + "."); } T2 val2 = (T2)args.Parameters[num++].Evaluate(); if (val2 == null) { throw new FormatException(callerName + " second argument should be a " + typeof(T2).Name + "."); } T3 val3 = (T3)args.Parameters[num++].Evaluate(); if (val3 == null) { throw new FormatException(callerName + " third argument should be a " + typeof(T3).Name + "."); } T4 val4 = (T4)args.Parameters[num++].Evaluate(); if (val4 == null) { throw new FormatException(callerName + " fourth argument should be a " + typeof(T4).Name + "."); } return new Tuple<T1, T2, T3, T4>(val, val2, val3, val4); } internal static Tuple<T1, T2, T3, T4, T5> GetParameters<T1, T2, T3, T4, T5>(FunctionArgs args, [CallerMemberName] string callerName = "") { CheckParameterCount(5, 5, args.Parameters, callerName); int num = 0; T1 val = (T1)args.Parameters[num++].Evaluate(); if (val == null) { throw new FormatException(callerName + " first argument should be a " + typeof(T1).Name + "."); } T2 val2 = (T2)args.Parameters[num++].Evaluate(); if (val2 == null) { throw new FormatException(callerName + " second argument should be a " + typeof(T2).Name + "."); } T3 val3 = (T3)args.Parameters[num++].Evaluate(); if (val3 == null) { throw new FormatException(callerName + " third argument should be a " + typeof(T3).Name + "."); } T4 val4 = (T4)args.Parameters[num++].Evaluate(); if (val4 == null) { throw new FormatException(callerName + " fourth argument should be a " + typeof(T4).Name + "."); } T5 val5 = (T5)args.Parameters[num++].Evaluate(); if (val5 == null) { throw new FormatException(callerName + " fifth argument should be a " + typeof(T5).Name + "."); } return new Tuple<T1, T2, T3, T4, T5>(val, val2, val3, val4, val5); } internal static Tuple<T1, T2, T3, T4, T5, T6> GetParameters<T1, T2, T3, T4, T5, T6>(FunctionArgs args, [CallerMemberName] string callerName = "") { CheckParameterCount(6, 6, args.Parameters, callerName); int num = 0; T1 val = (T1)args.Parameters[num++].Evaluate(); if (val == null) { throw new FormatException(callerName + " first argument should be a " + typeof(T1).Name + "."); } T2 val2 = (T2)args.Parameters[num++].Evaluate(); if (val2 == null) { throw new FormatException(callerName + " second argument should be a " + typeof(T2).Name + "."); } T3 val3 = (T3)args.Parameters[num++].Evaluate(); if (val3 == null) { throw new FormatException(callerName + " third argument should be a " + typeof(T3).Name + "."); } T4 val4 = (T4)args.Parameters[num++].Evaluate(); if (val4 == null) { throw new FormatException(callerName + " fourth argument should be a " + typeof(T4).Name + "."); } T5 val5 = (T5)args.Parameters[num++].Evaluate(); if (val5 == null) { throw new FormatException(callerName + " fifth argument should be a " + typeof(T5).Name + "."); } T6 val6 = (T6)args.Parameters[num++].Evaluate(); if (val6 == null) { throw new FormatException(callerName + " sixth argument should be a " + typeof(T6).Name + "."); } return new Tuple<T1, T2, T3, T4, T5, T6>(val, val2, val3, val4, val5, val6); } internal static Tuple<T1, T2, T3, T4, T5, T6, T7> GetParameters<T1, T2, T3, T4, T5, T6, T7>(FunctionArgs args, [CallerMemberName] string callerName = "") { CheckParameterCount(7, 7, args.Parameters, callerName); int num = 0; T1 val = (T1)args.Parameters[num++].Evaluate(); if (val == null) { throw new FormatException(callerName + " first argument should be a " + typeof(T1).Name + "."); } T2 val2 = (T2)args.Parameters[num++].Evaluate(); if (val2 == null) { throw new FormatException(callerName + " second argument should be a " + typeof(T2).Name + "."); } T3 val3 = (T3)args.Parameters[num++].Evaluate(); if (val3 == null) { throw new FormatException(callerName + " third argument should be a " + typeof(T3).Name + "."); } T4 val4 = (T4)args.Parameters[num++].Evaluate(); if (val4 == null) { throw new FormatException(callerName + " fourth argument should be a " + typeof(T4).Name + "."); } T5 val5 = (T5)args.Parameters[num++].Evaluate(); if (val5 == null) { throw new FormatException(callerName + " fifth argument should be a " + typeof(T5).Name + "."); } T6 val6 = (T6)args.Parameters[num++].Evaluate(); if (val6 == null) { throw new FormatException(callerName + " sixth argument should be a " + typeof(T6).Name + "."); } T7 val7 = (T7)args.Parameters[num++].Evaluate(); if (val7 == null) { throw new FormatException(callerName + " seventh argument should be a " + typeof(T7).Name + "."); } return new Tuple<T1, T2, T3, T4, T5, T6, T7>(val, val2, val3, val4, val5, val6, val7); } internal static void CheckParameterCount(int? minCount, int? maxCount, Expression[] parameters, [CallerMemberName] string callerName = "") { if (minCount.HasValue && parameters.Length < minCount.Value) { throw new FormatException($"{callerName} requires at least {minCount} parameters."); } if (maxCount.HasValue && parameters.Length > maxCount.Value) { throw new FormatException($"{callerName} requires at most {maxCount} parameters."); } } } internal static class Parse { internal static void Evaluate(FunctionArgs functionArgs) { if (functionArgs.Parameters.Length < 2) { throw new FormatException("parse function - requires at least two string parameters."); } int num = 0; string text = (functionArgs.Parameters[num++].Evaluate() as string) ?? throw new FormatException("parse function - first parameter should be a string."); string text2 = (functionArgs.Parameters[num++].Evaluate() as string) ?? throw new FormatException("parse function - second parameter should be a string."); try { object result; switch (text) { case "bool": { if (!bool.TryParse(text2, out var result12)) { throw new FormatException("parse function - parameter '" + text2 + "' could not be parsed to type '" + text + "'."); } result = result12; break; } case "sbyte": { if (!sbyte.TryParse(text2, out var result7)) { throw new FormatException("parse function - parameter '" + text2 + "' could not be parsed to type '" + text + "'."); } result = result7; break; } case "byte": { if (!byte.TryParse(text2, out var result13)) { throw new FormatException("parse function - parameter '" + text2 + "' could not be parsed to type '" + text + "'."); } result = result13; break; } case "short": { if (!short.TryParse(text2, out var result4)) { throw new FormatException("parse function - parameter '" + text2 + "' could not be parsed to type '" + text + "'."); } result = result4; break; } case "ushort": { if (!ushort.TryParse(text2, out var result9)) { throw new FormatException("parse function - parameter '" + text2 + "' could not be parsed to type '" + text + "'."); } result = result9; break; } case "int": { if (!int.TryParse(text2, out var result3)) { throw new FormatException("parse function - parameter '" + text2 + "' could not be parsed to type '" + text + "'."); } result = result3; break; } case "uint": { if (!uint.TryParse(text2, out var result10)) { throw new FormatException("parse function - parameter '" + text2 + "' could not be parsed to type '" + text + "'."); } result = result10; break; } case "long": { if (!long.TryParse(text2, out var result6)) { throw new FormatException("parse function - parameter '" + text2 + "' could not be parsed to type '" + text + "'."); } result = result6; break; } case "ulong": { if (!ulong.TryParse(text2, out var result14)) { throw new FormatException("parse function - parameter '" + text2 + "' could not be parsed to type '" + text + "'."); } result = result14; break; } case "double": { if (!double.TryParse(text2, out var result11)) { throw new FormatException("parse function - parameter '" + text2 + "' could not be parsed to type '" + text + "'."); } result = result11; break; } case "float": { if (!float.TryParse(text2, out var result8)) { throw new FormatException("parse function - parameter '" + text2 + "' could not be parsed to type '" + text + "'."); } result = result8; break; } case "decimal": { if (!decimal.TryParse(text2, out var result5)) { throw new FormatException("parse function - parameter '" + text2 + "' could not be parsed to type '" + text + "'."); } result = result5; break; } case "Guid": { if (!Guid.TryParse(text2, out var result2)) { throw new FormatException("parse function - parameter '" + text2 + "' could not be parsed to type '" + text + "'."); } result = result2; break; } case "JObject": case "jObject": result = ParseJObject(text2); break; case "jArray": case "JArray": result = ParseJArray(text2); break; default: throw new FormatException("type '" + text + "' not supported."); } functionArgs.Result = result; } catch (FormatException innerException) { if (functionArgs.Parameters.Length >= 3) { functionArgs.Result = functionArgs.Parameters[num].Evaluate(); return; } throw new FormatException("parse function - parameter '" + text2 + "' could not be parsed to type '" + text + "'.", innerException); } } private static JObject ParseJObject(string text) { try { return JObject.Parse(text); } catch (JsonReaderException) { throw new FormatException("parse function - parameter '" + text + "' could not be parsed to type 'JObject'."); } } private static JArray ParseJArray(string text) { try { return JArray.Parse(text); } catch (JsonReaderException) { throw new FormatException("parse function - parameter '" + text + "' could not be parsed to type 'JArray'."); } } } internal static class ParseInt { internal static void Evaluate(FunctionArgs functionArgs) { if (functionArgs.Parameters.Length != 1) { throw new FormatException("parseInt function - requires one string parameter."); } string s = (functionArgs.Parameters[0].Evaluate() as string) ?? throw new FormatException("parseInt function - requires one string parameter."); if (!int.TryParse(s, out var result)) { throw new FormatException("parseInt function - parameter could not be parsed to an integer."); } functionArgs.Result = result; } } internal static class RegexGroup { internal static void Evaluate(FunctionArgs functionArgs) { try { string input = (string)functionArgs.Parameters[0].Evaluate(); string pattern = (string)functionArgs.Parameters[1].Evaluate(); int num = ((functionArgs.Parameters.Length == 3) ? ((int)functionArgs.Parameters[2].Evaluate()) : 0); Regex regex = new Regex(pattern); if (!regex.IsMatch(input)) { functionArgs.Result = null; return; } Group group = regex.Match(input).Groups[1]; functionArgs.Result = ((num >= group.Captures.Count) ? null : group.Captures[num].Value); } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("replace() requires three string parameters."); } } } internal static class RegexIsMatch { internal static void Evaluate(FunctionArgs functionArgs) { object obj = functionArgs.Parameters[0].Evaluate(); object obj2 = functionArgs.Parameters[1].Evaluate(); if (!(obj is string input)) { throw new FormatException("regexIsMatch function - first parameter should be a string."); } if (!(obj2 is string pattern)) { throw new FormatException("regexIsMatch function - second parameter should be a string."); } Regex regex = new Regex(pattern); functionArgs.Result = regex.IsMatch(input); } } internal static class Replace { internal static void Evaluate(FunctionArgs functionArgs) { try { string text = (string)functionArgs.Parameters[0].Evaluate(); string oldValue = (string)functionArgs.Parameters[1].Evaluate(); string newValue = (string)functionArgs.Parameters[2].Evaluate(); functionArgs.Result = text.Replace(oldValue, newValue); } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("replace() requires three string parameters."); } } } internal static class Retrieve { internal static void Evaluate(FunctionArgs functionArgs) { string key; try { key = (string)functionArgs.Parameters[0].Evaluate(); } catch (Exception ex) when (!(ex is NCalcExtensionsException)) { throw new FormatException("retrieve() requires one string parameter."); } Dictionary<string, object> dictionary = (functionArgs.Parameters[0].Parameters["__storageDictionary"] as Dictionary<string, object>) ?? throw new FormatException("retrieve() requires a storage dictionary."); if (!dictionary.TryGetValue(key, out var value)) { throw new FormatException("Key not found"); } functionArgs.Result = value; } } internal static class Select { internal static void Evaluate(FunctionArgs functionArgs) { IList list = (functionArgs.Parameters[0].Evaluate() as IList) ?? throw new FormatException("First select parameter must be an IList."); string predicate = (functionArgs.Parameters[1].Evaluate() as string) ?? throw new FormatException("Second select parameter must be a string."); string nCalcString = (functionArgs.Parameters[2].Evaluate() as string) ?? throw new FormatException("Third select parameter must be a string."); string text = ((functionArgs.Parameters.Length == 4) ? ((functionArgs.Parameters[3].Evaluate() as string) ?? throw new FormatException("Fourth select parameter must be a string.")) : "object"); Lambda lambda = new Lambda(predicate, nCalcString, functionArgs.Parameters[0].Parameters); if (!(text == "object")) { if (text == "JObject") { List<JObject> list2 = new List<JObject>(); foreach (object item2 in list) { object obj = lambda.Evaluate(item2); JObject val2; if (obj != null) { JObject val = (JObject)((obj is JObject) ? obj : null); val2 = ((val == null) ? JObject.FromObject(item2) : val); } else { val2 = null; } JObject item = val2; list2.Add(item); } functionArgs.Result = list2; return; } throw new FormatException("Fourth select parameter must be either 'object' (default) or 'JObject'."); } List<object> list3 = new List<object>(); foreach (object i