Skip to content

Commit e132fd0

Browse files
committed
Try to optimize
1 parent e8a80a4 commit e132fd0

File tree

1 file changed

+50
-10
lines changed

1 file changed

+50
-10
lines changed

CodingSeb.ExpressionEvaluator/ExpressionEvaluator.cs

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Globalization;
55
using System.Linq;
66
using System.Reflection;
7+
using System.Text;
78
using System.Text.RegularExpressions;
89

910
namespace CodingSeb.ExpressionEvaluator
@@ -92,7 +93,7 @@ private enum IfBlockEvaluatedState
9293

9394
#region Dictionaries declarations (Primary types, number suffix, escaped chars, operators management, default vars and functions)
9495

95-
private Dictionary<string, Type> primaryTypesDict = new Dictionary<string, Type>()
96+
private static readonly Dictionary<string, Type> primaryTypesDict = new Dictionary<string, Type>()
9697
{
9798
{ "object", typeof(object) },
9899
{ "string", typeof(string) },
@@ -418,7 +419,6 @@ public bool OptionCaseSensitiveEvaluationActive
418419
{
419420
optionCaseSensitiveEvaluationActive = value;
420421
Variables = Variables;
421-
primaryTypesDict = new Dictionary<string, Type>(primaryTypesDict, StringComparerForCasing);
422422
operatorsDictionary = new Dictionary<string, ExpressionOperator>(operatorsDictionary, StringComparerForCasing);
423423
defaultVariables = new Dictionary<string, object>(defaultVariables, StringComparerForCasing);
424424
simpleDoubleMathFuncsDictionary = new Dictionary<string, Func<double, double>>(simpleDoubleMathFuncsDictionary, StringComparerForCasing);
@@ -2185,7 +2185,7 @@ private Type GetTypeByFriendlyName(string typeName, bool tryWithNamespaceInclude
21852185
{
21862186
typeName = primaryTypesRegex.Replace(typeName, delegate (Match match)
21872187
{
2188-
return primaryTypesDict[match.Value].ToString();
2188+
return primaryTypesDict[match.Value.ManageCasing(OptionCaseSensitiveEvaluationActive)].ToString();
21892189
});
21902190

21912191
result = Type.GetType(typeName, false, true);
@@ -2233,34 +2233,74 @@ private static object ChangeType(object value, Type conversionType)
22332233
return Convert.ChangeType(value, conversionType);
22342234
}
22352235

2236+
//private string GetCodeUntilEndOfString(string subExpr, Match stringBeginningMatch)
2237+
//{
2238+
// Match codeUntilEndOfStringMatch = stringBeginningMatch.Value.Contains("$") ? endOfStringWithDollar.Match(subExpr) : endOfStringWithoutDollar.Match(subExpr);
2239+
// string result = subExpr;
2240+
2241+
// if (codeUntilEndOfStringMatch.Success)
2242+
// {
2243+
// if (codeUntilEndOfStringMatch.Value.EndsWith("\""))
2244+
// {
2245+
// result = codeUntilEndOfStringMatch.Value;
2246+
// }
2247+
// else if (codeUntilEndOfStringMatch.Value.EndsWith("{") && codeUntilEndOfStringMatch.Length < subExpr.Length)
2248+
// {
2249+
// if (subExpr[codeUntilEndOfStringMatch.Length] == '{')
2250+
// {
2251+
// result = codeUntilEndOfStringMatch.Value + "{"
2252+
// + GetCodeUntilEndOfString(subExpr.Substring(codeUntilEndOfStringMatch.Length + 1), stringBeginningMatch);
2253+
// }
2254+
// else
2255+
// {
2256+
// string interpolation = GetCodeUntilEndOfStringInterpolation(subExpr.Substring(codeUntilEndOfStringMatch.Length));
2257+
// result = codeUntilEndOfStringMatch.Value + interpolation
2258+
// + GetCodeUntilEndOfString(subExpr.Substring(codeUntilEndOfStringMatch.Length + interpolation.Length), stringBeginningMatch);
2259+
// }
2260+
// }
2261+
// }
2262+
2263+
// return result;
2264+
//}
2265+
22362266
private string GetCodeUntilEndOfString(string subExpr, Match stringBeginningMatch)
22372267
{
22382268
Match codeUntilEndOfStringMatch = stringBeginningMatch.Value.Contains("$") ? endOfStringWithDollar.Match(subExpr) : endOfStringWithoutDollar.Match(subExpr);
2239-
string result = subExpr;
2269+
StringBuilder result = new StringBuilder();
22402270

22412271
if (codeUntilEndOfStringMatch.Success)
22422272
{
22432273
if (codeUntilEndOfStringMatch.Value.EndsWith("\""))
22442274
{
2245-
result = codeUntilEndOfStringMatch.Value;
2275+
result.Append(codeUntilEndOfStringMatch.Value);
22462276
}
22472277
else if (codeUntilEndOfStringMatch.Value.EndsWith("{") && codeUntilEndOfStringMatch.Length < subExpr.Length)
22482278
{
22492279
if (subExpr[codeUntilEndOfStringMatch.Length] == '{')
22502280
{
2251-
result = codeUntilEndOfStringMatch.Value + "{"
2252-
+ GetCodeUntilEndOfString(subExpr.Substring(codeUntilEndOfStringMatch.Length + 1), stringBeginningMatch);
2281+
result.Append(codeUntilEndOfStringMatch.Value);
2282+
result.Append("{");
2283+
result.Append(GetCodeUntilEndOfString(subExpr.Substring(codeUntilEndOfStringMatch.Length + 1), stringBeginningMatch));
22532284
}
22542285
else
22552286
{
22562287
string interpolation = GetCodeUntilEndOfStringInterpolation(subExpr.Substring(codeUntilEndOfStringMatch.Length));
2257-
result = codeUntilEndOfStringMatch.Value + interpolation
2258-
+ GetCodeUntilEndOfString(subExpr.Substring(codeUntilEndOfStringMatch.Length + interpolation.Length), stringBeginningMatch);
2288+
result.Append(codeUntilEndOfStringMatch.Value);
2289+
result.Append(interpolation);
2290+
result.Append(GetCodeUntilEndOfString(subExpr.Substring(codeUntilEndOfStringMatch.Length + interpolation.Length), stringBeginningMatch));
22592291
}
22602292
}
2293+
else
2294+
{
2295+
result.Append(subExpr);
2296+
}
2297+
}
2298+
else
2299+
{
2300+
result.Append(subExpr);
22612301
}
22622302

2263-
return result;
2303+
return result.ToString();
22642304
}
22652305

22662306
private string GetCodeUntilEndOfStringInterpolation(string subExpr)

0 commit comments

Comments
 (0)