diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g index 7ac419f..97c9bd6 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g @@ -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? ','? '}' ; diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g index 0992645..23edab3 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g @@ -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: diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g index 6d30ed9..de146ce 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g @@ -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: diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/TemplateExtracter.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/TemplateExtracter.g index 165f2fc..445180f 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/TemplateExtracter.g +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/TemplateExtracter.g @@ -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? ','? '}' ; diff --git a/CSharpTranslator/antlr3/src/CSharpParser/cs.g b/CSharpTranslator/antlr3/src/CSharpParser/cs.g index 94d536e..0c43762 100644 --- a/CSharpTranslator/antlr3/src/CSharpParser/cs.g +++ b/CSharpTranslator/antlr3/src/CSharpParser/cs.g @@ -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"];