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:
parent
c457c5c6f8
commit
ac2417a6c6
@ -236,11 +236,13 @@ scope TypeContext {
|
|||||||
|
|
||||||
protected CommonTree mkArgsFromParams(IToken tok, CommonTree pars) {
|
protected CommonTree mkArgsFromParams(IToken tok, CommonTree pars) {
|
||||||
CommonTree root = (CommonTree)adaptor.Nil;
|
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
|
// take every second child
|
||||||
for (int i = 1; i < adaptor.GetChildCount(pars); i+=2) {
|
for (int i = 1; i < adaptor.GetChildCount(pars); i+=2) {
|
||||||
adaptor.AddChild(root, dupTree((CommonTree)adaptor.GetChild(pars, i)));
|
adaptor.AddChild(root, dupTree((CommonTree)adaptor.GetChild(pars, i)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
root = (CommonTree)adaptor.RulePostProcessing(root);
|
root = (CommonTree)adaptor.RulePostProcessing(root);
|
||||||
return root;
|
return root;
|
||||||
@ -1635,7 +1637,7 @@ fixed_pointer_initializer:
|
|||||||
unsafe_statement:
|
unsafe_statement:
|
||||||
'unsafe'^ block;
|
'unsafe'^ block;
|
||||||
labeled_statement[bool isStatementListCtxt]:
|
labeled_statement[bool isStatementListCtxt]:
|
||||||
identifier ':'^ statement[isStatementListCtxt] ;
|
identifier ':' statement[isStatementListCtxt] ;
|
||||||
declaration_statement:
|
declaration_statement:
|
||||||
(local_variable_declaration
|
(local_variable_declaration
|
||||||
| local_constant_declaration) ';' ;
|
| local_constant_declaration) ';' ;
|
||||||
@ -1759,7 +1761,7 @@ finally_clause:
|
|||||||
checked_statement:
|
checked_statement:
|
||||||
'checked' block ;
|
'checked' block ;
|
||||||
unchecked_statement:
|
unchecked_statement:
|
||||||
'unchecked' block ;
|
'unchecked' block -> ^(UNCHECKED block);
|
||||||
lock_statement:
|
lock_statement:
|
||||||
'lock' '(' expression ')' embedded_statement[/* isStatementListCtxt */ false] ;
|
'lock' '(' expression ')' embedded_statement[/* isStatementListCtxt */ false] ;
|
||||||
// TODO: Can we avoid surrounding this with braces if not needed?
|
// TODO: Can we avoid surrounding this with braces if not needed?
|
||||||
@ -1773,7 +1775,7 @@ using_statement[bool isStatementListCtxt]
|
|||||||
AddToImports("CS2JNet.System.Disposable"); }
|
AddToImports("CS2JNet.System.Disposable"); }
|
||||||
f=magicFinally[$c.token, disposers]
|
f=magicFinally[$c.token, disposers]
|
||||||
magicTry[$u.token, state.backtracking == 0 ? embeddedStatementToBlock($u.token, $embedded_statement.tree) : null, null, $f.tree]
|
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 SEMI[$c.token, ";"] magicTry
|
||||||
;
|
;
|
||||||
resource_acquisition returns [List<string> resourceNames]
|
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, ";"]
|
IDENTIFIER[$expression.tree.Token, "__newVar"+newVarCtr++] ASSIGN[$expression.tree.Token, "="] expression //SEMI[$expression.tree.Token, ";"]
|
||||||
;
|
;
|
||||||
yield_statement:
|
yield_statement:
|
||||||
'yield'^ ('return' expression ';'!
|
'yield' ('return' expression ';' -> ^(YIELD_RETURN expression)
|
||||||
| 'break' ';'!) ;
|
| 'break' ';' -> YIELD_BREAK) ;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////
|
||||||
// Lexar Section
|
// Lexar Section
|
||||||
|
@ -1215,7 +1215,7 @@ fixed_pointer_initializer:
|
|||||||
//'&' variable_reference // unary_expression covers this
|
//'&' variable_reference // unary_expression covers this
|
||||||
expression;
|
expression;
|
||||||
labeled_statement:
|
labeled_statement:
|
||||||
^(':' identifier statement) -> op(pre={ $identifier.st }, op= { ":" }, post = { $statement.st});
|
identifier ':' statement -> op(pre={ $identifier.st }, op= { ":" }, post = { $statement.st});
|
||||||
declaration_statement
|
declaration_statement
|
||||||
@init {
|
@init {
|
||||||
List<string> preComments = null;
|
List<string> preComments = null;
|
||||||
@ -1310,7 +1310,7 @@ unchecked_statement
|
|||||||
@init {
|
@init {
|
||||||
StringTemplate someText = null;
|
StringTemplate someText = null;
|
||||||
}:
|
}:
|
||||||
'unchecked' block
|
^(UNCHECKED block)
|
||||||
{ someText = %keyword_block();
|
{ someText = %keyword_block();
|
||||||
%{someText}.keyword = "unchecked";
|
%{someText}.keyword = "unchecked";
|
||||||
%{someText}.block = $block.st;
|
%{someText}.block = $block.st;
|
||||||
@ -1329,14 +1329,11 @@ lock_statement
|
|||||||
yield_statement
|
yield_statement
|
||||||
@init {
|
@init {
|
||||||
StringTemplate someText = null;
|
StringTemplate someText = null;
|
||||||
|
someText = %yield();
|
||||||
}:
|
}:
|
||||||
^('yield' ('return' expression
|
^(YIELD_RETURN expression { %{someText}.exp = $expression.st; })
|
||||||
| 'break'
|
| YIELD_BREAK {%{someText}.exp = "break"; }
|
||||||
| )
|
-> unsupported(reason = {"yield statements are not supported"}, text = { someText } )
|
||||||
)
|
|
||||||
{ someText = %yield();
|
|
||||||
%{someText}.exp = $expression.st;
|
|
||||||
} -> unsupported(reason = {"yield statements are not supported"}, text = { someText } )
|
|
||||||
;
|
;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////
|
||||||
|
@ -1026,7 +1026,7 @@ scope {
|
|||||||
| predefined_type { $dotNetType = $predefined_type.dotNetType; }
|
| predefined_type { $dotNetType = $predefined_type.dotNetType; }
|
||||||
| 'this' { $dotNetType = SymTabLookup("this"); }
|
| 'this' { $dotNetType = SymTabLookup("this"); }
|
||||||
| SUPER { $dotNetType = SymTabLookup("super"); }
|
| 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 ....
|
// TODO: generic_argument_list is ignored ....
|
||||||
|
|
||||||
@ -2607,7 +2607,7 @@ embedded_statement[bool isStatementListCtxt]
|
|||||||
| checked_statement
|
| checked_statement
|
||||||
| unchecked_statement
|
| unchecked_statement
|
||||||
| lock_statement
|
| lock_statement
|
||||||
| yield_statement
|
| yield_statement
|
||||||
| ^('unsafe' block)
|
| ^('unsafe' block)
|
||||||
| fixed_statement
|
| fixed_statement
|
||||||
| expression_statement { emitPrePost = adaptor.GetChildCount($statement::preStatements) > 0 || adaptor.GetChildCount($statement::postStatements) > 0; }
|
| 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
|
//'&' variable_reference // unary_expression covers this
|
||||||
expression[ObjectType];
|
expression[ObjectType];
|
||||||
labeled_statement[bool isStatementListCtxt]:
|
labeled_statement[bool isStatementListCtxt]:
|
||||||
^(':' identifier statement[isStatementListCtxt]) ;
|
identifier ':' statement[isStatementListCtxt] ;
|
||||||
declaration_statement:
|
declaration_statement:
|
||||||
(local_variable_declaration
|
(local_variable_declaration
|
||||||
| local_constant_declaration) ';' ;
|
| local_constant_declaration) ';' ;
|
||||||
@ -2861,12 +2861,13 @@ finally_clause:
|
|||||||
checked_statement:
|
checked_statement:
|
||||||
'checked' block ;
|
'checked' block ;
|
||||||
unchecked_statement:
|
unchecked_statement:
|
||||||
'unchecked' block ;
|
^(UNCHECKED block) ;
|
||||||
lock_statement:
|
lock_statement:
|
||||||
'lock' '(' expression[ObjectType] ')' embedded_statement[/* isStatementListCtxt */ false] ;
|
'lock' '(' expression[ObjectType] ')' embedded_statement[/* isStatementListCtxt */ false] ;
|
||||||
|
|
||||||
yield_statement:
|
yield_statement:
|
||||||
'yield' ('return' expression[ObjectType] ';'
|
^(YIELD_RETURN expression[ObjectType])
|
||||||
| 'break' ';') ;
|
| YIELD_BREAK ;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////
|
||||||
// Lexar Section
|
// Lexar Section
|
||||||
|
@ -32,6 +32,9 @@ tokens {
|
|||||||
PARAMS;
|
PARAMS;
|
||||||
PARAMS_TYPELESS;
|
PARAMS_TYPELESS;
|
||||||
SWITCH_SECTION;
|
SWITCH_SECTION;
|
||||||
|
YIELD_RETURN;
|
||||||
|
YIELD_BREAK;
|
||||||
|
UNCHECKED;
|
||||||
|
|
||||||
MONOPLUS;
|
MONOPLUS;
|
||||||
MONOMINUS;
|
MONOMINUS;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user