1
0
mirror of https://github.com/twiglet/cs2j.git synced 2025-01-18 13:15:17 +01:00

strip unnecessary extra braces around foreach block, add missing semi

This commit is contained in:
Kevin Glynn 2011-01-26 13:18:30 +01:00
parent 98cf331db2
commit 8ab08fe52b
3 changed files with 19 additions and 3 deletions

View File

@ -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 { <cast> 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 {

View File

@ -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

View File

@ -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/