From 8ab08fe52b713923336f4ad7d0200f7874661e4e Mon Sep 17 00:00:00 2001 From: Kevin Glynn Date: Wed, 26 Jan 2011 13:18:30 +0100 Subject: [PATCH] strip unnecessary extra braces around foreach block, add missing semi --- .../antlr3/src/cs2j/CSharp/NetMaker.g | 20 ++++++++++++++++--- CSharpTranslator/antlr3/testSE | 1 + CSharpTranslator/antlr3/testTester | 1 + 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 CSharpTranslator/antlr3/testSE create mode 100644 CSharpTranslator/antlr3/testTester diff --git a/CSharpTranslator/antlr3/src/cs2j/CSharp/NetMaker.g b/CSharpTranslator/antlr3/src/cs2j/CSharp/NetMaker.g index 255f6b8..20b8a96 100644 --- a/CSharpTranslator/antlr3/src/cs2j/CSharp/NetMaker.g +++ b/CSharpTranslator/antlr3/src/cs2j/CSharp/NetMaker.g @@ -257,6 +257,19 @@ scope SymTab { return ret; } + // if slist is a list of statements surrounded by braces, then strip them out. + protected CommonTree stripPossibleBraces(CommonTree slist) { + CommonTree ret = slist; + if (ret.IsNil && adaptor.GetChildCount(ret) >= 2) { + if (adaptor.GetType(adaptor.GetChild(ret,0)) == OPEN_BRACE && + adaptor.GetType(adaptor.GetChild(ret,adaptor.GetChildCount(ret)-1)) == CLOSE_BRACE) { + adaptor.DeleteChild(ret,adaptor.GetChildCount(ret)-1); + adaptor.DeleteChild(ret,0); + } + } + return ret; + } + // embeddedStatement is either ";", "{ .... }", or a single statement protected CommonTree prefixCast(CommonTree ty, CommonTree id, CommonTree foreachVar, CommonTree embeddedStatement, IToken tok) { CommonTree root = embeddedStatement; @@ -274,13 +287,14 @@ scope SymTab { adaptor.AddChild(vardec, (CommonTree)adaptor.DupTree(id)); adaptor.AddChild(vardec, (CommonTree)adaptor.Create(ASSIGN, tok, "=")); adaptor.AddChild(vardec, (CommonTree)adaptor.DupTree(kast)); + adaptor.AddChild(vardec, (CommonTree)adaptor.Create(SEMI, tok, ";")); root = (CommonTree)adaptor.Nil; // Make a { statement } adaptor.AddChild(root, (CommonTree)adaptor.Create(OPEN_BRACE, tok, "{")); adaptor.AddChild(root, vardec); // todo: strip "{ }" - adaptor.AddChild(root, (CommonTree)adaptor.DupTree(embeddedStatement)); - adaptor.AddChild(root, (CommonTree)adaptor.Create(OPEN_BRACE, tok, "{")); + adaptor.AddChild(root, stripPossibleBraces((CommonTree)adaptor.DupTree(embeddedStatement))); + adaptor.AddChild(root, (CommonTree)adaptor.Create(CLOSE_BRACE, tok, "}")); } return (CommonTree)adaptor.RulePostProcessing(root); } @@ -1655,7 +1669,7 @@ magicForeachVar [IToken tok] returns [String thetext] -> IDENTIFIER[tok,$thetext]; magicObjectType [IToken tok]: - -> ^(TYPE[tok, "TYPE"] OBJECT[tok, "System.Object"]); + -> ^(TYPE[tok, "TYPE"] OBJECT[tok, "Object"]); magicCastOperator[CommonTree mods, String methodName, CommonTree header, CommonTree body] @init { diff --git a/CSharpTranslator/antlr3/testSE b/CSharpTranslator/antlr3/testSE new file mode 100644 index 0000000..36a15ec --- /dev/null +++ b/CSharpTranslator/antlr3/testSE @@ -0,0 +1 @@ +time mono src/cs2j/bin/Debug/cs2j.exe -translator-timestamp-files=false -translator-keep-parens=false -netdir=/Users/keving/gitrepos/cs2j/CS2JLibrary/NetFramework/ -dumpxmls -xmldir=/Users/keving/tmp/xml/se -odir=/Users/keving/tmp/java/se/src -appdir=/Users/keving/svnrepos/ScormEngineNet/src/app/ScormEngine.Core /Users/keving/svnrepos/ScormEngineNet/src/app/ScormEngine.Core diff --git a/CSharpTranslator/antlr3/testTester b/CSharpTranslator/antlr3/testTester new file mode 100644 index 0000000..31818f8 --- /dev/null +++ b/CSharpTranslator/antlr3/testTester @@ -0,0 +1 @@ +time mono src/cs2j/bin/Debug/cs2j.exe -dumpjava -translator-timestamp-files=false -translator-keep-parens=false -netdir=/Users/keving/gitrepos/cs2j/CS2JLibrary/NetFramework/ -dumpxmls -xmldir=/Users/keving/tmp/xml/cs2jtest -odir=/Users/keving/tmp/java/cs2jtest/src /Users/keving/gitrepos/cs2j/CSharpTranslator/antlr3/CS2JTesterProject/