ExpressionIterator
class ExpressionIterator
namespace Microsoft.CSharp.RuntimeBinder.Semantics
{
internal class ExpressionIterator
{
private EXPRLIST _pList;
private EXPR _pCurrent;
public ExpressionIterator(EXPR pExpr)
{
Init(pExpr);
}
public bool AtEnd()
{
if (_pCurrent == null)
return _pList == null;
return false;
}
public EXPR Current()
{
return _pCurrent;
}
public void MoveNext()
{
if (!AtEnd()) {
if (_pList == null)
_pCurrent = null;
else
Init(_pList.GetOptionalNextListNode());
}
}
public static int Count(EXPR pExpr)
{
int num = 0;
ExpressionIterator expressionIterator = new ExpressionIterator(pExpr);
while (!expressionIterator.AtEnd()) {
num++;
expressionIterator.MoveNext();
}
return num;
}
private void Init(EXPR pExpr)
{
if (pExpr == null) {
_pList = null;
_pCurrent = null;
} else if (pExpr.isLIST()) {
_pList = pExpr.asLIST();
_pCurrent = _pList.GetOptionalElement();
} else {
_pList = null;
_pCurrent = pExpr;
}
}
}
}