Skip to content

Commit 2dd9b8e

Browse files
author
Sébastien Geiser
committed
Add OptionAllowNonPublicMembersAccess
1 parent 192eab1 commit 2dd9b8e

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

CodingSeb.ExpressionEvaluator/ExpressionEvaluator.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -782,6 +782,13 @@ public bool OptionNewFunctionEvaluationActive
782782
/// </summary>
783783
public bool OptionScriptNeedSemicolonAtTheEndOfLastExpression { get; set; } = true;
784784

785+
/// <summary>
786+
/// If <c>true</c> Allow to access fields, properties and methods that are not declared public. (private, protected and internal)
787+
/// If <c>false</c> Allow to access only to public members.
788+
/// Default : false
789+
/// </summary>
790+
public bool OptionAllowNonPublicMembersAccess { get; set; }
791+
785792
#endregion
786793

787794
#region Reflection flags
@@ -794,6 +801,8 @@ protected virtual BindingFlags InstanceBindingFlag
794801

795802
if (!OptionCaseSensitiveEvaluationActive)
796803
flag |= BindingFlags.IgnoreCase;
804+
if (OptionAllowNonPublicMembersAccess)
805+
flag |= BindingFlags.NonPublic;
797806

798807
return flag;
799808
}
@@ -807,6 +816,8 @@ protected virtual BindingFlags StaticBindingFlag
807816

808817
if (!OptionCaseSensitiveEvaluationActive)
809818
flag |= BindingFlags.IgnoreCase;
819+
if (OptionAllowNonPublicMembersAccess)
820+
flag |= BindingFlags.NonPublic;
810821

811822
return flag;
812823
}
@@ -1769,7 +1780,7 @@ protected virtual bool EvaluateVarOrFunc(string expression, Stack<object> stack,
17691780

17701781
if (inObject
17711782
|| Context?.GetType()
1772-
.GetMethods()
1783+
.GetMethods(InstanceBindingFlag)
17731784
.Any(methodInfo => methodInfo.Name.Equals(varFuncName, StringComparisonForCasing)) == true)
17741785
{
17751786
if (inObject && (stack.Count == 0 || stack.Peek() is ExpressionOperator))
@@ -1945,10 +1956,10 @@ protected virtual bool EvaluateVarOrFunc(string expression, Stack<object> stack,
19451956
{
19461957
if (inObject
19471958
|| Context?.GetType()
1948-
.GetProperties()
1959+
.GetProperties(InstanceBindingFlag)
19491960
.Any(propInfo => propInfo.Name.Equals(varFuncName, StringComparisonForCasing)) == true
19501961
|| Context?.GetType()
1951-
.GetFields()
1962+
.GetFields(InstanceBindingFlag)
19521963
.Any(fieldInfo => fieldInfo.Name.Equals(varFuncName, StringComparisonForCasing)) == true)
19531964
{
19541965
if (inObject && (stack.Count == 0 || stack.Peek() is ExpressionOperator))

0 commit comments

Comments
 (0)