From f0c66340c08b23438541564d0dd2b83c63892d15 Mon Sep 17 00:00:00 2001 From: Kevin Glynn Date: Mon, 1 Nov 2010 09:11:59 +0100 Subject: [PATCH] fields <-> events. translate type names in namespace_or_typename --- .../src/cs2j/CSharp/TemplateExtracter.g | 27 ++++++++++++++----- CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g | 3 +-- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/TemplateExtracter.g b/CSharpTranslator/antlr3/src/cs2j/CSharp/TemplateExtracter.g index 458a3fb..64510fb 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/TemplateExtracter.g +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/TemplateExtracter.g @@ -68,6 +68,21 @@ scope NSContext { return ((NSContext_scope)$NSContext.ToArray()[$NSContext.Count-2]).currentNS; } } + + protected string formatTyargs(List tyargs) { + + if (tyargs.Count == 0) { + return ""; + } + StringBuilder buf = new StringBuilder(); + buf.Append("<"); + foreach (string t in tyargs) { + buf.Append(t + ","); + } + buf.Remove(buf.Length-1,1); + buf.Append(">"); + return buf.ToString(); + } } /******************************************************************************************** @@ -379,9 +394,9 @@ commas: /////////////////////////////////////////////////////// type_name returns [string thetext]: - namespace_or_type_name { $thetext = $namespace_or_type_name.text; }; -namespace_or_type_name: - ^(NS_OR_TN type_or_generic ^(CC type_or_generic?) type_or_generic*) ; + namespace_or_type_name { $thetext = $namespace_or_type_name.thetext; }; +namespace_or_type_name returns [string thetext]: + t1=type_or_generic { $thetext=t1.type+formatTyargs($t1.generic_arguments); } ('::' tc=type_or_generic { $thetext+="::"+tc.type+formatTyargs($tc.generic_arguments); })? ('.' tn=type_or_generic { $thetext+="."+tn.type+formatTyargs($tn.generic_arguments); } )* ; type_or_generic returns [string type, List generic_arguments] @init { $generic_arguments = new List(); @@ -420,7 +435,7 @@ type_arguments returns [List tyargs] $tyargs = new List(); } : - t1=type { Debug("type arg: " + $t1.text); $tyargs.Add($t1.text); } (',' tn=type { Debug("type arg: " + $tn.text); $tyargs.Add($tn.text); })* ; + t1=type { $tyargs.Add($t1.thetext); } (',' tn=type { $tyargs.Add($tn.thetext); })* ; type returns [string thetext]: ((predefined_type | type_name) rank_specifiers) => (p1=predefined_type { $thetext = $p1.thetext; } | tn1=type_name { $thetext = $tn1.thetext; }) rs=rank_specifiers { $thetext += $rs.text; } ('*' { $thetext += "*"; })* @@ -712,10 +727,10 @@ variable_declarator [string type, bool isEvent]: type_name { FieldRepTemplate f = new FieldRepTemplate($type, $type_name.text); if (isEvent) { - ((ClassRepTemplate)$NSContext::currentTypeRep).Fields.Add(f); + ((ClassRepTemplate)$NSContext::currentTypeRep).Events.Add(f); } else { - ((ClassRepTemplate)$NSContext::currentTypeRep).Events.Add(f); + ((ClassRepTemplate)$NSContext::currentTypeRep).Fields.Add(f); }; } ('=' variable_initializer)? ; // eg. event EventHandler IInterface.VariableName = Foo; /////////////////////////////////////////////////////// diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g b/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g index 8517a4b..f43f428 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/cs.g @@ -9,7 +9,6 @@ options { tokens { QID; - NS_OR_TN; CC; } @namespace { RusticiSoftware.Translator.CSharp } @@ -311,7 +310,7 @@ commas: type_name: namespace_or_type_name ; namespace_or_type_name: - t1=type_or_generic ('::' t2=type_or_generic)? ('.' t3+=type_or_generic)* -> ^(NS_OR_TN $t1 ^(CC $t2?) $t3*); + type_or_generic ('::' type_or_generic)? ('.' type_or_generic)* ; type_or_generic: (identifier '<') => identifier generic_argument_list | identifier ;