void AddConvertCollectionOrObjectInitializers(Expression init, CollectionOrObjectInitializers minit) { var initLoc = LocationsBag.GetLocations(minit); var commaLoc = LocationsBag.GetLocations(minit.Initializers); int curComma = 0; init.AddChild(new CSharpTokenNode(Convert(minit.Location), Roles.LBrace), Roles.LBrace); foreach (var expr in minit.Initializers) { var collectionInit = expr as CollectionElementInitializer; if (collectionInit != null) { AstNode parent; // For ease of use purposes in the resolver the ast representation // of { a, b, c } is { {a}, {b}, {c} } - but the generated ArrayInitializerExpression // can be identified by expr.IsSingleElement. if (!collectionInit.IsSingle) { parent = new ArrayInitializerExpression(); parent.AddChild(new CSharpTokenNode(Convert(collectionInit.Location), Roles.LBrace), Roles.LBrace); } else { parent = ArrayInitializerExpression.CreateSingleElementInitializer (); } for (int i = 0; i < collectionInit.Arguments.Count; i++) { var arg = collectionInit.Arguments [i] as CollectionElementInitializer.ElementInitializerArgument; if (arg == null) continue; parent.AddChild( (ICSharpCode.NRefactory.PlayScript.Expression)arg.Expr.Accept(this), Roles.Expression ); } if (!collectionInit.IsSingle) { var braceLocs = LocationsBag.GetLocations(expr); if (braceLocs != null) parent.AddChild(new CSharpTokenNode(Convert(braceLocs [0]), Roles.RBrace), Roles.RBrace); } init.AddChild((ArrayInitializerExpression)parent, Roles.Expression); } else { var eleInit = expr as ElementInitializer; if (eleInit != null) { var nexpr = new NamedExpression(); nexpr.AddChild( Identifier.Create(eleInit.Name, Convert(eleInit.Location)), Roles.Identifier ); var assignLoc = LocationsBag.GetLocations(eleInit); if (assignLoc != null) nexpr.AddChild(new CSharpTokenNode(Convert(assignLoc [0]), Roles.Assign), Roles.Assign); if (eleInit.Source != null) { if (eleInit.Source is CollectionOrObjectInitializers) { var arrInit = new ArrayInitializerExpression(); AddConvertCollectionOrObjectInitializers( arrInit, eleInit.Source as CollectionOrObjectInitializers ); nexpr.AddChild(arrInit, Roles.Expression); } else { nexpr.AddChild((Expression)eleInit.Source.Accept(this), Roles.Expression); } } init.AddChild(nexpr, Roles.Expression); } } if (commaLoc != null && curComma < commaLoc.Count) init.AddChild(new CSharpTokenNode(Convert(commaLoc [curComma++]), Roles.Comma), Roles.Comma); } if (initLoc != null) { if (initLoc.Count == 2) // optional comma init.AddChild(new CSharpTokenNode(Convert(initLoc [0]), Roles.Comma), Roles.Comma); init.AddChild(new CSharpTokenNode(Convert(initLoc [initLoc.Count - 1]), Roles.RBrace), Roles.RBrace); } }
void case_489() #line 3630 "cs-parser.jay" { yyVal = new CollectionOrObjectInitializers ((List<Expression>) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); }
ArrayInitializerExpression ConvertCollectionOrObjectInitializers(CollectionOrObjectInitializers minit) { if (minit == null) return null; var init = new ArrayInitializerExpression(); AddConvertCollectionOrObjectInitializers(init, minit); return init; }
void case_488() #line 3621 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) { yyVal = new CollectionOrObjectInitializers (GetLocation (yyVals[-2+yyTop])); } else { yyVal = new CollectionOrObjectInitializers ((List<Expression>) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); }