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]() ) // new int[4]()
| array_initializer -> ^($n type array_initializer) | array_initializer -> ^($n type array_initializer)
) )
| rank_specifier // [,] | (rank_specifier // [,]
(array_initializer // var a = new[] { 1, 10, 100, 1000 }; // int[] (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: array_initializer:
'{' variable_initializer_list? ','? '}' ; '{' variable_initializer_list? ','? '}' ;

View File

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

View File

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

View File

@ -315,6 +315,10 @@ array_creation_expression:
| rank_specifier // [,] | rank_specifier // [,]
(array_initializer // var a = new[] { 1, 10, 100, 1000 }; // int[] (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: array_initializer:
'{' variable_initializer_list? ','? '}' ; '{' variable_initializer_list? ','? '}' ;

View File

@ -361,6 +361,10 @@ public array_creation_expression:
| rank_specifier // [,] | rank_specifier // [,]
(array_initializer // var a = new[] { 1, 10, 100, 1000 }; // int[] (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: public new_array:
n='new' -> NEW_ARRAY[$n, "newarray"]; n='new' -> NEW_ARRAY[$n, "newarray"];