From 710d887c7b16e606d403360167eb6f7ac1526ce8 Mon Sep 17 00:00:00 2001 From: Kevin Glynn Date: Mon, 20 Dec 2010 10:00:43 +0100 Subject: [PATCH] varargs support --- .../antlr3/src/cs2j/CSharp/CommonWalker.cs | 10 ++++++++++ .../antlr3/src/cs2j/CSharp/JavaMaker.g | 18 +++++++++++++++++- .../antlr3/src/cs2j/CSharp/JavaPrettyPrint.g | 4 ++-- .../antlr3/src/cs2j/CSharp/NetMaker.g | 2 +- .../src/cs2j/bin/Debug/templates/java.stg | 4 ++++ 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/CommonWalker.cs b/CSharpTranslator/antlr3/src/cs2j/CSharp/CommonWalker.cs index a80300b..d593048 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/CommonWalker.cs +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/CommonWalker.cs @@ -16,6 +16,16 @@ namespace RusticiSoftware.Translator.CSharp : base(input, state) { } + protected void Error(int line, String s) + { + Console.Error.WriteLine("{0}({1}) error: {2}", Filename, line, s); + } + + protected void Error(String s) + { + Console.Error.WriteLine("{0} error: {1}", Filename, s); + } + protected void Warning(int line, String s) { if (Cfg.Warnings) diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaMaker.g b/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaMaker.g index 774e1b3..d345f38 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaMaker.g +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaMaker.g @@ -1001,7 +1001,23 @@ default_argument: parameter_modifier: 'ref' | 'out' | 'this' ; parameter_array: - 'params' type identifier ; + p='params'^ t=type identifier + { + // type will be an array, need to strip the final [] for java + int numComponents = adaptor.GetChildCount($t.tree); + // sanity check + if (numComponents >= 3 && + adaptor.GetType(adaptor.GetChild($t.tree, numComponents-2)) == OPEN_BRACKET && + adaptor.GetType(adaptor.GetChild($t.tree, numComponents-1)) == CLOSE_BRACKET) + { + adaptor.DeleteChild($t.tree, numComponents-1); + adaptor.DeleteChild($t.tree, numComponents-2); + } + else { + Error($p.line, "[SOURCE ERROR] params type must be an array"); + } + } + ; /////////////////////////////////////////////////////// interface_declaration returns [string name] diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaPrettyPrint.g b/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaPrettyPrint.g index f802c1f..1e171ca 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaPrettyPrint.g +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/JavaPrettyPrint.g @@ -987,7 +987,7 @@ return_type: formal_parameter_list: ^(PARAMS fps+=formal_parameter+) -> list(items= {$fps}, sep={", "}); formal_parameter: - attributes? (fixed_parameter -> { $fixed_parameter.st }| parameter_array) + attributes? (fixed_parameter -> { $fixed_parameter.st }| parameter_array -> { $parameter_array.st }) | '__arglist'; // __arglist is undocumented, see google //fixed_parameters: // fps+=fixed_parameter (',' fps+=fixed_parameter)* -> { $fps }; @@ -1000,7 +1000,7 @@ default_argument: parameter_modifier: (m='ref' | m='out' | m='this') -> inline_comment(payload={ $m.text }, explanation={ "parameter modifiers are not yet supported" }) ; parameter_array: - 'params' type identifier ; + ^('params' type identifier) -> varargs(type={ $type.st }, name = { $identifier.st }) ; /////////////////////////////////////////////////////// interface_declaration[StringTemplate modifiersST] diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/NetMaker.g b/CSharpTranslator/antlr3/src/cs2j/CSharp/NetMaker.g index 14474ae..a89e01d 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/NetMaker.g +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/NetMaker.g @@ -703,7 +703,7 @@ default_argument: parameter_modifier: 'ref' | 'out' | 'this' ; parameter_array: - 'params' type identifier ; + ^('params' type identifier) ; /////////////////////////////////////////////////////// interface_declaration: diff --git a/CSharpTranslator/antlr3/src/cs2j/bin/Debug/templates/java.stg b/CSharpTranslator/antlr3/src/cs2j/bin/Debug/templates/java.stg index 9c485db..5d003f4 100644 --- a/CSharpTranslator/antlr3/src/cs2j/bin/Debug/templates/java.stg +++ b/CSharpTranslator/antlr3/src/cs2j/bin/Debug/templates/java.stg @@ -80,6 +80,10 @@ fixed_parameter(mod,type,name,def) ::= << = >> +varargs(type,name) ::= << +... +>> + identifier(id, id2) ::= "::" statement_list(statements) ::= <<