private object Call(CallExpression node, IEnumerable<Node> suffixes)
{
object firstObject;
var memberSuffixes = new List<Node>();
if (node.Member is MemberExpression)
{
var member = (MemberExpression)node.Member;
memberSuffixes.AddRange(member.Suffixes);
firstObject = GetFirstObjectFromMember(member.Expression, memberSuffixes);
}
else if (node.Member is FunctionExpression ||
node.Member is Identifier ||
node.Member is SelfExpression)
{
firstObject = node.Member.Accept(this);
}
else
{
throw ErrorFactory.CreateError(string.Format("Invalid member type {0}", node.Member));
}
var allSuffixes = new List<Node>();
allSuffixes.AddRange(memberSuffixes);
allSuffixes.Add(node.Arguments);
allSuffixes.AddRange(suffixes);
return AccessOneByOne(firstObject, null, allSuffixes);
}