From ac2417a6c625e1418d92832382ebc6f9923c7fb4 Mon Sep 17 00:00:00 2001 From: Kevin Glynn Date: Fri, 20 May 2011 19:54:47 +0200 Subject: [PATCH] various so that we can chomp through monodevelop. mostly it seems to be workarounds for antlr :( --- .../CS2JTranslator/CS2JTransform/JavaMaker.g | 20 ++++++++++--------- .../CS2JTransform/JavaPrettyPrint.g | 15 ++++++-------- .../CS2JTranslator/CS2JTransform/NetMaker.g | 13 ++++++------ CSharpTranslator/antlr3/src/CSharpParser/cs.g | 3 +++ 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g index 2ddc177..97638c7 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g @@ -236,11 +236,13 @@ scope TypeContext { protected CommonTree mkArgsFromParams(IToken tok, CommonTree pars) { CommonTree root = (CommonTree)adaptor.Nil; - root = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ARGS, tok, "ARGS"), root); + if (adaptor.GetChildCount(pars) > 0) { + root = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ARGS, tok, "ARGS"), root); - // take every second child - for (int i = 1; i < adaptor.GetChildCount(pars); i+=2) { - adaptor.AddChild(root, dupTree((CommonTree)adaptor.GetChild(pars, i))); + // take every second child + for (int i = 1; i < adaptor.GetChildCount(pars); i+=2) { + adaptor.AddChild(root, dupTree((CommonTree)adaptor.GetChild(pars, i))); + } } root = (CommonTree)adaptor.RulePostProcessing(root); return root; @@ -1635,7 +1637,7 @@ fixed_pointer_initializer: unsafe_statement: 'unsafe'^ block; labeled_statement[bool isStatementListCtxt]: - identifier ':'^ statement[isStatementListCtxt] ; + identifier ':' statement[isStatementListCtxt] ; declaration_statement: (local_variable_declaration | local_constant_declaration) ';' ; @@ -1759,7 +1761,7 @@ finally_clause: checked_statement: 'checked' block ; unchecked_statement: - 'unchecked' block ; + 'unchecked' block -> ^(UNCHECKED block); lock_statement: 'lock' '(' expression ')' embedded_statement[/* isStatementListCtxt */ false] ; // TODO: Can we avoid surrounding this with braces if not needed? @@ -1773,7 +1775,7 @@ using_statement[bool isStatementListCtxt] AddToImports("CS2JNet.System.Disposable"); } f=magicFinally[$c.token, disposers] magicTry[$u.token, state.backtracking == 0 ? embeddedStatementToBlock($u.token, $embedded_statement.tree) : null, null, $f.tree] - -> {isStatementListCtxt}? OPEN_BRACE[$u.token, "{"] resource_acquisition SEMI[$c.token, ";"] magicTry CLOSE_BRACE[$u.token, "}"] + -> {!isStatementListCtxt}? OPEN_BRACE[$u.token, "{"] resource_acquisition SEMI[$c.token, ";"] magicTry CLOSE_BRACE[$u.token, "}"] -> resource_acquisition SEMI[$c.token, ";"] magicTry ; resource_acquisition returns [List resourceNames] @@ -1785,8 +1787,8 @@ resource_acquisition returns [List resourceNames] IDENTIFIER[$expression.tree.Token, "__newVar"+newVarCtr++] ASSIGN[$expression.tree.Token, "="] expression //SEMI[$expression.tree.Token, ";"] ; yield_statement: - 'yield'^ ('return' expression ';'! - | 'break' ';'!) ; + 'yield' ('return' expression ';' -> ^(YIELD_RETURN expression) + | 'break' ';' -> YIELD_BREAK) ; /////////////////////////////////////////////////////// // Lexar Section diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g index 27acf8e..3ff9241 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g @@ -1215,7 +1215,7 @@ fixed_pointer_initializer: //'&' variable_reference // unary_expression covers this expression; labeled_statement: - ^(':' identifier statement) -> op(pre={ $identifier.st }, op= { ":" }, post = { $statement.st}); + identifier ':' statement -> op(pre={ $identifier.st }, op= { ":" }, post = { $statement.st}); declaration_statement @init { List preComments = null; @@ -1310,7 +1310,7 @@ unchecked_statement @init { StringTemplate someText = null; }: - 'unchecked' block + ^(UNCHECKED block) { someText = %keyword_block(); %{someText}.keyword = "unchecked"; %{someText}.block = $block.st; @@ -1329,14 +1329,11 @@ lock_statement yield_statement @init { StringTemplate someText = null; + someText = %yield(); }: - ^('yield' ('return' expression - | 'break' - | ) - ) - { someText = %yield(); - %{someText}.exp = $expression.st; - } -> unsupported(reason = {"yield statements are not supported"}, text = { someText } ) + ^(YIELD_RETURN expression { %{someText}.exp = $expression.st; }) + | YIELD_BREAK {%{someText}.exp = "break"; } + -> unsupported(reason = {"yield statements are not supported"}, text = { someText } ) ; /////////////////////////////////////////////////////// diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g index 68c6820..2e1902c 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g @@ -1026,7 +1026,7 @@ scope { | predefined_type { $dotNetType = $predefined_type.dotNetType; } | 'this' { $dotNetType = SymTabLookup("this"); } | SUPER { $dotNetType = SymTabLookup("super"); } - | (^(d1='.' e1=expression[ObjectType] {expType = $e1.dotNetType; implicitThis = false;} i=identifier)|i=identifier) generic_argument_list? magicInputPeId[$d1.tree,$i.tree,$generic_argument_list.tree] + | (^(d1='.' e1=expression[ObjectType] {expType = $e1.dotNetType; implicitThis = false;} i=identifier dgal=generic_argument_list?)|i=identifier dgal=generic_argument_list?) magicInputPeId[$d1.tree,$i.tree,$dgal.tree] { // TODO: generic_argument_list is ignored .... @@ -2607,7 +2607,7 @@ embedded_statement[bool isStatementListCtxt] | checked_statement | unchecked_statement | lock_statement - | yield_statement + | yield_statement | ^('unsafe' block) | fixed_statement | expression_statement { emitPrePost = adaptor.GetChildCount($statement::preStatements) > 0 || adaptor.GetChildCount($statement::postStatements) > 0; } @@ -2662,7 +2662,7 @@ fixed_pointer_initializer: //'&' variable_reference // unary_expression covers this expression[ObjectType]; labeled_statement[bool isStatementListCtxt]: - ^(':' identifier statement[isStatementListCtxt]) ; + identifier ':' statement[isStatementListCtxt] ; declaration_statement: (local_variable_declaration | local_constant_declaration) ';' ; @@ -2861,12 +2861,13 @@ finally_clause: checked_statement: 'checked' block ; unchecked_statement: - 'unchecked' block ; + ^(UNCHECKED block) ; lock_statement: 'lock' '(' expression[ObjectType] ')' embedded_statement[/* isStatementListCtxt */ false] ; + yield_statement: - 'yield' ('return' expression[ObjectType] ';' - | 'break' ';') ; + ^(YIELD_RETURN expression[ObjectType]) + | YIELD_BREAK ; /////////////////////////////////////////////////////// // Lexar Section diff --git a/CSharpTranslator/antlr3/src/CSharpParser/cs.g b/CSharpTranslator/antlr3/src/CSharpParser/cs.g index f32469b..e032d96 100644 --- a/CSharpTranslator/antlr3/src/CSharpParser/cs.g +++ b/CSharpTranslator/antlr3/src/CSharpParser/cs.g @@ -32,6 +32,9 @@ tokens { PARAMS; PARAMS_TYPELESS; SWITCH_SECTION; + YIELD_RETURN; + YIELD_BREAK; + UNCHECKED; MONOPLUS; MONOMINUS;