private Expression ParseNewObject()
{
NextToken();
ValidateToken(TokenId.OpenParen, Res.OpenParenExpected);
NextToken();
var properties = new List<DynamicProperty>();
var expressions = new List<Expression>();
while (true)
{
int exprPos = _token.Position;
Expression expr = ParseExpression();
string propName;
if (TokenIdentifierIs("as"))
{
NextToken();
propName = GetIdentifier();
NextToken();
}
else
{
var me = expr as MemberExpression;
if (me != null)
{
propName = me.Member.Name;
}
else
{
if (!DynamicDictionary.TryGetAlias(expr, exprPos, out propName))
throw ParseError(exprPos, Res.MissingAsClause);
}
}
expressions.Add(expr);
properties.Add(new DynamicProperty(propName, expr.Type));
if (_token.ID != TokenId.Comma) break;
NextToken();
}
ValidateToken(TokenId.CloseParen, Res.CloseParenOrCommaExpected);
NextToken();
return CreateMemberInit(properties, expressions);
}