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

various so that we can chomp through monodevelop. mostly it seems to be workarounds for antlr :(

This commit is contained in:
Kevin Glynn 2011-05-20 19:54:47 +02:00
parent c457c5c6f8
commit ac2417a6c6
4 changed files with 27 additions and 24 deletions

View File

@ -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<string> resourceNames]
@ -1785,8 +1787,8 @@ resource_acquisition returns [List<string> 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

View File

@ -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<string> 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 } )
;
///////////////////////////////////////////////////////

View File

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

View File

@ -32,6 +32,9 @@ tokens {
PARAMS;
PARAMS_TYPELESS;
SWITCH_SECTION;
YIELD_RETURN;
YIELD_BREAK;
UNCHECKED;
MONOPLUS;
MONOMINUS;