@@ -179,32 +179,30 @@ internal void AddVoPropertyAccessor(XP.IMethodContext accessor, int Type, Syntax
179179 _options . XSharpRuntime
180180 ? GenerateQualifiedName ( XSharpQualifiedTypeNames . Array )
181181 : GenerateQualifiedName ( VulcanQualifiedTypeNames . Array ) ;
182+
183+ protected ArrayRankSpecifierSyntax MakeEmptyRank ( )
184+ {
185+ var emptySizes = _pool . AllocateSeparated < ExpressionSyntax > ( ) ;
186+ emptySizes . Add ( _syntaxFactory . OmittedArraySizeExpression ( SyntaxFactory . MakeToken ( SyntaxKind . OmittedArraySizeExpressionToken ) ) ) ;
187+ var emptyRank = _syntaxFactory . ArrayRankSpecifier (
188+ SyntaxFactory . OpenBracketToken ,
189+ emptySizes ,
190+ SyntaxFactory . CloseBracketToken ) ;
191+ _pool . Free ( emptySizes ) ;
192+ return emptyRank ;
193+ }
182194 protected ArrayTypeSyntax ArrayOfUsual
183195 {
184196 get
185197 {
186- var emptysizes = _pool . AllocateSeparated < ExpressionSyntax > ( ) ;
187- emptysizes . Add ( _syntaxFactory . OmittedArraySizeExpression ( SyntaxFactory . MakeToken ( SyntaxKind . OmittedArraySizeExpressionToken ) ) ) ;
188- var emptyrank = _syntaxFactory . ArrayRankSpecifier (
189- SyntaxFactory . OpenBracketToken ,
190- emptysizes ,
191- SyntaxFactory . CloseBracketToken ) ;
192- _pool . Free ( emptysizes ) ;
193- return _syntaxFactory . ArrayType ( UsualType , emptyrank ) ;
198+ return _syntaxFactory . ArrayType ( UsualType , MakeEmptyRank ( ) ) ;
194199 }
195200 }
196201 protected ArrayTypeSyntax ArrayOfString
197202 {
198203 get
199204 {
200- var emptysizes = _pool . AllocateSeparated < ExpressionSyntax > ( ) ;
201- emptysizes . Add ( _syntaxFactory . OmittedArraySizeExpression ( SyntaxFactory . MakeToken ( SyntaxKind . OmittedArraySizeExpressionToken ) ) ) ;
202- var emptyrank = _syntaxFactory . ArrayRankSpecifier (
203- SyntaxFactory . OpenBracketToken ,
204- emptysizes ,
205- SyntaxFactory . CloseBracketToken ) ;
206- _pool . Free ( emptysizes ) ;
207- return _syntaxFactory . ArrayType ( StringType , emptyrank ) ;
205+ return _syntaxFactory . ArrayType ( StringType , MakeEmptyRank ( ) ) ;
208206 }
209207 }
210208
@@ -233,14 +231,7 @@ protected ArrayTypeSyntax ByteArrayType
233231 {
234232 get
235233 {
236- var emptysizes = _pool . AllocateSeparated < ExpressionSyntax > ( ) ;
237- emptysizes . Add ( _syntaxFactory . OmittedArraySizeExpression ( SyntaxFactory . MakeToken ( SyntaxKind . OmittedArraySizeExpressionToken ) ) ) ;
238- var emptyrank = _syntaxFactory . ArrayRankSpecifier (
239- SyntaxFactory . OpenBracketToken ,
240- emptysizes ,
241- SyntaxFactory . CloseBracketToken ) ;
242- _pool . Free ( emptysizes ) ;
243- return _syntaxFactory . ArrayType ( _syntaxFactory . PredefinedType ( SyntaxFactory . MakeToken ( SyntaxKind . ByteKeyword ) ) , emptyrank ) ;
234+ return _syntaxFactory . ArrayType ( _syntaxFactory . PredefinedType ( SyntaxFactory . MakeToken ( SyntaxKind . ByteKeyword ) ) , MakeEmptyRank ( ) ) ;
244235 }
245236 }
246237
@@ -1399,6 +1390,22 @@ protected void GenerateAttributeList(SyntaxListBuilder<AttributeListSyntax> attr
13991390 _pool . Free ( attributes ) ;
14001391 }
14011392
1393+
1394+ protected InitializerExpressionSyntax CreateArrayInitializer ( SeparatedSyntaxList < ExpressionSyntax > expressions )
1395+ {
1396+ var initializer = _syntaxFactory . InitializerExpression ( SyntaxKind . ArrayInitializerExpression ,
1397+ SyntaxFactory . OpenBraceToken ,
1398+ expressions ,
1399+ SyntaxFactory . CloseBraceToken ) ;
1400+ return initializer ;
1401+
1402+ }
1403+
1404+ protected InitializerExpressionSyntax CreateArrayInitializer ( params ExpressionSyntax [ ] expressions )
1405+ {
1406+ return CreateArrayInitializer ( MakeSeparatedList ( expressions ) ) ;
1407+ }
1408+
14021409 protected ExpressionSyntax CreateObject ( TypeSyntax type , ArgumentListSyntax args , InitializerExpressionSyntax init = null )
14031410 {
14041411 ExpressionSyntax expr ;
@@ -7410,7 +7417,7 @@ public override void ExitBlockStmt([NotNull] XP.BlockStmtContext context)
74107417 case XP . USING :
74117418 node = _syntaxFactory . UsingStatement ( attributeLists : default ,
74127419 awaitKeyword : context . a ? . SyntaxKeyword ( ) ,
7413- token . SyntaxKeyword ( ) ,
7420+ token . SyntaxKeyword ( ) ,
74147421 SyntaxFactory . OpenParenToken ,
74157422 context . VarDecl ? . Get < VariableDeclarationSyntax > ( ) ,
74167423 context . Expr ? . Get < ExpressionSyntax > ( ) ,
@@ -9405,10 +9412,7 @@ public override void ExitLiteralValue([NotNull] XP.LiteralValueContext context)
94059412 var bin = _syntaxFactory . ArrayCreationExpression (
94069413 SyntaxFactory . MakeToken ( SyntaxKind . NewKeyword ) ,
94079414 ByteArrayType ,
9408- _syntaxFactory . InitializerExpression ( SyntaxKind . ArrayInitializerExpression ,
9409- SyntaxFactory . OpenBraceToken ,
9410- MakeSeparatedList < ExpressionSyntax > ( values . ToArray ( ) ) ,
9411- SyntaxFactory . CloseBraceToken ) ) ;
9415+ CreateArrayInitializer ( values . ToArray ( ) ) ) ;
94129416 if ( error )
94139417 {
94149418 var msg = "length of literal must be an even number of characters" ;
@@ -9618,10 +9622,7 @@ public override void ExitLiteralArray([NotNull] XP.LiteralArrayContext context)
96189622 exprs = default ;
96199623 }
96209624 ExpressionSyntax expr ;
9621- var initializer = _syntaxFactory . InitializerExpression ( SyntaxKind . ArrayInitializerExpression ,
9622- SyntaxFactory . OpenBraceToken ,
9623- exprs ,
9624- SyntaxFactory . CloseBraceToken ) ;
9625+ var initializer = CreateArrayInitializer ( exprs ) ;
96259626 if ( type != null )
96269627 {
96279628 expr = _syntaxFactory . ArrayCreationExpression ( SyntaxFactory . MakeToken ( SyntaxKind . NewKeyword ) ,
@@ -10316,12 +10317,21 @@ public override void ExitObjectinitializer([NotNull] XP.ObjectinitializerContext
1031610317 }
1031710318 public override void ExitCollectioninitializer ( [ NotNull ] XP . CollectioninitializerContext context )
1031810319 {
10319- var collinit = _syntaxFactory . InitializerExpression (
10320- inArrayCtorCall ( context ) ? SyntaxKind . ArrayInitializerExpression : SyntaxKind . CollectionInitializerExpression ,
10321- SyntaxFactory . OpenBraceToken ,
10322- MakeSeparatedList < ExpressionSyntax > ( context . _Members ) ,
10323- SyntaxFactory . CloseBraceToken ) ;
10324- context . Put ( collinit ) ;
10320+ ExpressionSyntax expr ;
10321+ var elements = MakeSeparatedList < ExpressionSyntax > ( context . _Members ) ;
10322+ if ( inArrayCtorCall ( context ) )
10323+ {
10324+ expr = CreateArrayInitializer ( elements ) ;
10325+ }
10326+ else
10327+ {
10328+ expr = _syntaxFactory . InitializerExpression (
10329+ SyntaxKind . CollectionInitializerExpression ,
10330+ SyntaxFactory . OpenBraceToken ,
10331+ elements ,
10332+ SyntaxFactory . CloseBraceToken ) ;
10333+ }
10334+ context . Put ( expr ) ;
1032510335 }
1032610336 public override void ExitMemberinitializer ( [ NotNull ] XP . MemberinitializerContext context )
1032710337 {
@@ -10348,12 +10358,21 @@ public override void ExitInitializervalue([NotNull] XP.InitializervalueContext c
1034810358 }
1034910359 public override void ExitComplexInitExpr ( [ NotNull ] XP . ComplexInitExprContext context )
1035010360 {
10351- var collinit = _syntaxFactory . InitializerExpression (
10352- inArrayCtorCall ( context ) ? SyntaxKind . ArrayInitializerExpression : SyntaxKind . ComplexElementInitializerExpression ,
10353- SyntaxFactory . OpenBraceToken ,
10354- MakeSeparatedList < ExpressionSyntax > ( context . _Members ) ,
10355- SyntaxFactory . CloseBraceToken ) ;
10356- context . Put ( collinit ) ;
10361+ var members = MakeSeparatedList < ExpressionSyntax > ( context . _Members ) ;
10362+ ExpressionSyntax expr ;
10363+ if ( inArrayCtorCall ( context ) )
10364+ {
10365+ expr = CreateArrayInitializer ( members ) ;
10366+ }
10367+ else
10368+ {
10369+ expr = _syntaxFactory . InitializerExpression (
10370+ SyntaxKind . ComplexElementInitializerExpression ,
10371+ SyntaxFactory . OpenBraceToken ,
10372+ members ,
10373+ SyntaxFactory . CloseBraceToken ) ;
10374+ }
10375+ context . Put ( expr ) ;
1035710376 }
1035810377 public override void ExitInitializerMember ( [ NotNull ] XP . InitializerMemberContext context )
1035910378 {
@@ -10388,7 +10407,7 @@ public override void ExitDesignationTypeExpr([NotNull] XP.DesignationTypeExprCon
1038810407 }
1038910408 context . Put ( _syntaxFactory . TupleExpression ( SyntaxFactory . OpenParenToken , args , SyntaxFactory . CloseParenToken ) ) ;
1039010409 _pool . Free ( args ) ;
10391- }
10410+ }
1039210411 public override void ExitLocalDesignation ( [ NotNull ] XP . LocalDesignationContext context )
1039310412 {
1039410413 VariableDesignationSyntax designation = GetDesignation ( context . Id ) ;
0 commit comments