From a9c0e5acc64bd018019031e618cb8e748864b8f5 Mon Sep 17 00:00:00 2001 From: Kevin Glynn Date: Fri, 17 Dec 2010 13:48:09 +0100 Subject: [PATCH] translate new T[] {e,e,e} don't emit 'new' modifier, comment 'extern' --- .../antlr3/src/cs2j/CSharp/JavaMaker.g | 4 ++-- .../antlr3/src/cs2j/CSharp/JavaPrettyPrint.g | 15 +++++++++------ .../antlr3/src/cs2j/bin/Debug/templates/java.stg | 3 ++- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaMaker.g b/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaMaker.g index 4693c95..e7790fb 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaMaker.g +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaMaker.g @@ -201,8 +201,8 @@ modifiers returns [List modList] }: (modifier { if ($modifier.tree != null) $modList.Add( $modifier.tree.Text); })+ ; modifier: - 'new' | 'public' | 'protected' | 'private' | 'internal' -> /* translate to package-private */| 'unsafe' -> | 'abstract' | 'sealed' -> FINAL["final"] | 'static' - | 'readonly' -> /* no equivalent in C# (this is like a const that can be initialized separately in the constructor) */ | 'volatile' | 'extern' | 'virtual' -> | 'override' -> /* not in Java,maybe convert to override annotation */; + 'new' -> /* No new in Java*/ | 'public' | 'protected' | 'private' | 'internal' -> /* translate to package-private */| 'unsafe' -> | 'abstract' | 'sealed' -> FINAL["final"] | 'static' + | 'readonly' -> /* no equivalent in C# (this is like a const that can be initialized separately in the constructor) */ | 'volatile' | e='extern' { Warning($e.line, "[UNSUPPORTED] 'extern' modifier"); } | 'virtual' -> | 'override' -> /* not in Java, maybe convert to override annotation */; class_member_declaration: a=attributes? diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaPrettyPrint.g b/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaPrettyPrint.g index 5e70bab..a6f99f9 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaPrettyPrint.g +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaPrettyPrint.g @@ -244,10 +244,13 @@ namespace_name modifiers: ms+=modifier+ -> modifiers(mods={$ms}); modifier +@init { + String thetext = null; +} : (m='new' | m='public' | m='protected' | m='private' | m='abstract' | m='sealed' | m='static' - | m='readonly' | m='volatile' | m='extern' | m='virtual' | m='override' | m=FINAL) - -> string(payload={$m.text}); + | m='readonly' | m='volatile' | m='extern' { thetext = "/* [UNSUPPORTED] 'extern' modifier not supported */"; } | m='virtual' | m='override' | m=FINAL) + -> string(payload={ (thetext == null ? $m.text : thetext) }); class_member_declaration returns [List preComments]: ^(CONST attributes? modifiers? type { $preComments = CollectedComments; } constant_declarators) @@ -431,21 +434,21 @@ primary_or_array_creation_expression returns [int precedence]: array_creation_expression returns [int precedence]: ^('new' (type ('[' expression_list ']' - ( rank_specifiers? array_initializer? -> array_construct(type = { $type.st }, args = { $expression_list.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]() - | array_initializer + | ai2=array_initializer -> array_construct(type = { $type.st }, inits = { $ai2.st }) ) | rank_specifier // [,] (array_initializer // var a = new[] { 1, 10, 100, 1000 }; // int[] ) )) { $precedence = precedence[NEW]; }; array_initializer: - '{' variable_initializer_list? ','? '}' ; + '{' variable_initializer_list? ','? '}' -> array_initializer(init = { $variable_initializer_list.st }); variable_initializer_list: - variable_initializer (',' variable_initializer)* ; + vs+=variable_initializer (',' vs+=variable_initializer)* -> seplist(items = { $vs }, sep = {", "}); variable_initializer: expression -> { $expression.st } | array_initializer -> { $array_initializer.st }; sizeof_expression: diff --git a/CSharpTranslator/antlr3/src/cs2j/bin/Debug/templates/java.stg b/CSharpTranslator/antlr3/src/cs2j/bin/Debug/templates/java.stg index 3d3d04b..3a2f8ae 100644 --- a/CSharpTranslator/antlr3/src/cs2j/bin/Debug/templates/java.stg +++ b/CSharpTranslator/antlr3/src/cs2j/bin/Debug/templates/java.stg @@ -225,7 +225,8 @@ block(statements,issemi,isbraces) ::= << cast_expr(type, exp) ::= "()" construct(type, args, inits) ::= "new () /* [UNIMPLEMENTED] */" -array_construct(type, args, inits) ::= "new [] /* [UNIMPLEMENTED] */" +array_construct(type, args, inits) ::= "new []" +array_initializer(init) ::= "{ }" application(func, funcparens, args) ::= "()" index(func, funcparens, args) ::= "[]" stackalloc(type, exp) ::= "stackalloc []"