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:
parent
69643b72ee
commit
f96c756dca
@ -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? ','? '}' ;
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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? ','? '}' ;
|
||||
|
@ -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"];
|
||||
|
Loading…
x
Reference in New Issue
Block a user