1
0
mirror of https://github.com/twiglet/cs2j.git synced 2025-01-18 13:15:17 +01:00

Allow method calls on "new [] {...}" expressions

This commit is contained in:
Kevin Glynn 2011-03-17 13:57:27 +01:00
parent 69643b72ee
commit f96c756dca
5 changed files with 21 additions and 21 deletions

View File

@ -531,9 +531,13 @@ array_creation_expression
) // new int[4]()
| array_initializer -> ^($n type array_initializer)
)
| rank_specifier // [,]
| (rank_specifier // [,]
(array_initializer // var a = new[] { 1, 10, 100, 1000 }; // int[]
) -> ^($n rank_specifier array_initializer)
) -> ^($n rank_specifier array_initializer)) { ret = (CommonTree)adaptor.RulePostProcessing($array_creation_expression.tree); }
( // optionally invoke methods/index array
( ((arguments[null] ('['|'.'|'->')) => as3=arguments[ret] ip3=invocation_part[$as3.tree] { ret = $ip3.tree; })// new object[2].GetEnumerator()
| ip4=invocation_part[ret] { ret = $ip4.tree; })* as4=arguments[ret] {ret = $as4.tree; }
)?
) ;
array_initializer:
'{' variable_initializer_list? ','? '}' ;

View File

@ -501,18 +501,12 @@ primary_or_array_creation_expression returns [int precedence]:
// new Type[2] { }
array_creation_expression returns [int precedence]:
^(NEW_ARRAY
(type ('[' expression_list ']'
( rank_specifiers? ai1=array_initializer? -> array_construct(type = { $type.st }, args = { $expression_list.st }, inits = { $ai1.st }) // new int[4]
// | invocation_part*
| ( ((arguments ('['|'.'|'->')) => arguments invocation_part)// new object[2].GetEnumerator()
| invocation_part)* arguments
) // new int[4]()
(type ('[' expression_list ']' rank_specifiers? ai1=array_initializer? -> array_construct(type = { $type.st }, args = { $expression_list.st }, inits = { $ai1.st }) // new int[4]
| ai2=array_initializer -> array_construct(type = { $type.st }, inits = { $ai2.st })
)
| rank_specifier // [,]
(array_initializer // var a = new[] { 1, 10, 100, 1000 }; // int[]
| rank_specifier array_initializer // var a = new[] { 1, 10, 100, 1000 }; // int[]
)
)) { $precedence = precedence[NEW]; };
) { $precedence = precedence[NEW]; };
array_initializer:
'{' variable_initializer_list? ','? '}' -> array_initializer(init = { $variable_initializer_list.st });
variable_initializer_list:

View File

@ -854,18 +854,12 @@ primary_or_array_creation_expression returns [TypeRepTemplate dotNetType, string
// new Type[2] { }
array_creation_expression returns [TypeRepTemplate dotNetType]:
^(NEW_ARRAY
(type ('[' expression_list ']'
( rank_specifiers[$type.dotNetType]? array_initializer? // new int[4]
// | invocation_part*
| ( ((arguments ('['|'.'|'->')) => arguments invocation_part)// new object[2].GetEnumerator()
| invocation_part)* arguments
) // new int[4]()
(type ('[' expression_list ']' rank_specifiers[$type.dotNetType]? array_initializer? // new int[4]
| array_initializer { $dotNetType = $type.dotNetType; }
)
| rank_specifier[null] // [,]
(array_initializer // var a = new[] { 1, 10, 100, 1000 }; // int[]
)
)) ;
| rank_specifier[null] array_initializer // var a = new[] { 1, 10, 100, 1000 }; // int[]
)
) ;
array_initializer:
'{' variable_initializer_list? ','? '}' ;
variable_initializer_list:

View File

@ -315,6 +315,10 @@ array_creation_expression:
| rank_specifier // [,]
(array_initializer // var a = new[] { 1, 10, 100, 1000 }; // int[]
)
( // optionally invoke methods/index array
( ((arguments ('['|'.'|'->')) => arguments invocation_part)// new object[2].GetEnumerator()
| invocation_part)* arguments
)?
) ;
array_initializer:
'{' variable_initializer_list? ','? '}' ;

View File

@ -361,6 +361,10 @@ public array_creation_expression:
| rank_specifier // [,]
(array_initializer // var a = new[] { 1, 10, 100, 1000 }; // int[]
)
( // optionally invoke methods/index array
( ((arguments ('['|'.'|'->')) => arguments invocation_part)// new object[2].GetEnumerator()
| invocation_part)* arguments
)?
) ;
public new_array:
n='new' -> NEW_ARRAY[$n, "newarray"];