diff --git a/ClosedXML/ClosedXML.csproj b/ClosedXML/ClosedXML.csproj
index 8b9ecc4..84c5f14 100644
--- a/ClosedXML/ClosedXML.csproj
+++ b/ClosedXML/ClosedXML.csproj
@@ -49,6 +49,10 @@
True
..\packages\DocumentFormat.OpenXml.2.5\lib\DocumentFormat.OpenXml.dll
+
+ ..\packages\FastMember.Signed.1.1.0\lib\net40\FastMember.Signed.dll
+ True
+
diff --git a/ClosedXML/Excel/CalcEngine/CalcEngine.cs b/ClosedXML/Excel/CalcEngine/CalcEngine.cs
index 9ba60b2..a392dc1 100644
--- a/ClosedXML/Excel/CalcEngine/CalcEngine.cs
+++ b/ClosedXML/Excel/CalcEngine/CalcEngine.cs
@@ -11,7 +11,7 @@
namespace ClosedXML.Excel.CalcEngine {
///
- /// CalcEngine parses strings and returns Expression objects that can
+ /// CalcEngine parses strings and returns Expression objects that can
/// be evaluated.
///
///
@@ -171,7 +171,7 @@
///
/// This method is useful when the engine needs to create objects dynamically.
/// For example, a spreadsheet calc engine would use this method to dynamically create cell
- /// range objects based on identifiers that cannot be enumerated at design time
+ /// range objects based on identifiers that cannot be enumerated at design time
/// (such as "AB12", "A1:AB12", etc.)
///
public virtual object GetExternalObject(string identifier) {
@@ -375,15 +375,6 @@
break;
}
- // look for bindings
- if (DataContext != null) {
- var list = new List();
- for (var t = _token; t != null; t = GetMember()) {
- list.Add(new BindingInfo((string)t.Value, GetParameters()));
- }
- x = new BindingExpression(this, list, _ci);
- break;
- }
Throw("Unexpected identifier");
break;
@@ -423,7 +414,7 @@
#region ** parser
void GetToken() {
- // eat white space
+ // eat white space
while (_ptr < _len && _expr[_ptr] <= ' ') {
_ptr++;
}
@@ -613,7 +604,7 @@
}
List GetParameters() // e.g. myfun(a, b, c+2)
{
- // check whether next token is a (,
+ // check whether next token is a (,
// restore state and bail if it's not
var pos = _ptr;
var tk = _token;
@@ -650,7 +641,7 @@
return parms;
}
Token GetMember() {
- // check whether next token is a MEMBER token ('.'),
+ // check whether next token is a MEMBER token ('.'),
// restore state and bail if it's not
var pos = _ptr;
var tk = _token;
diff --git a/ClosedXML/Excel/CalcEngine/Expression.cs b/ClosedXML/Excel/CalcEngine/Expression.cs
index 1b97924..286bedd 100644
--- a/ClosedXML/Excel/CalcEngine/Expression.cs
+++ b/ClosedXML/Excel/CalcEngine/Expression.cs
@@ -1,12 +1,8 @@
using System;
-using System.Text;
using System.Threading;
using System.Collections;
using System.Collections.Generic;
-using System.Diagnostics;
using System.Globalization;
-using System.Reflection;
-using ClosedXML.Excel.CalcEngine;
namespace ClosedXML.Excel.CalcEngine
{
@@ -373,106 +369,6 @@
}
}
///
- /// Expression based on an object's properties.
- ///
- class BindingExpression : Expression
- {
- CalcEngine _ce;
- CultureInfo _ci;
- List _bindingPath;
-
- // ** ctor
- internal BindingExpression(CalcEngine engine, List bindingPath, CultureInfo ci)
- {
- _ce = engine;
- _bindingPath = bindingPath;
- _ci = ci;
- }
-
- // ** object model
- override public object Evaluate()
- {
- return GetValue(_ce.DataContext);
- }
-
- // ** implementation
- object GetValue(object obj)
- {
- const BindingFlags bf =
- BindingFlags.IgnoreCase |
- BindingFlags.Instance |
- BindingFlags.Public |
- BindingFlags.Static;
-
- if (obj != null)
- {
- foreach (var bi in _bindingPath)
- {
- // get property
- if (bi.PropertyInfo == null)
- {
- bi.PropertyInfo = obj.GetType().GetProperty(bi.Name, bf);
- }
-
- // get object
- try
- {
- obj = bi.PropertyInfo.GetValue(obj, null);
- }
- catch
- {
- // REVIEW: is this needed?
- System.Diagnostics.Debug.Assert(false, "shouldn't happen!");
- bi.PropertyInfo = obj.GetType().GetProperty(bi.Name, bf);
- bi.PropertyInfoItem = null;
- obj = bi.PropertyInfo.GetValue(obj, null);
- }
-
- // handle indexers (lists and dictionaries)
- if (bi.Parms != null && bi.Parms.Count > 0)
- {
- // get indexer property (always called "Item")
- if (bi.PropertyInfoItem == null)
- {
- bi.PropertyInfoItem = obj.GetType().GetProperty("Item", bf);
- }
-
- // get indexer parameters
- var pip = bi.PropertyInfoItem.GetIndexParameters();
- var list = new List