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

method headers, elide virtual and override keywords

This commit is contained in:
Kevin Glynn 2010-12-06 10:18:23 +01:00
parent cdecbce4c0
commit 4b761a4410
5 changed files with 57 additions and 19 deletions

View File

@ -177,7 +177,7 @@ modifiers:
modifier+ ;
modifier:
'new' | 'public' | 'protected' | 'private' | 'internal' -> /* translate to package-private */| 'unsafe' -> | 'abstract' | 'sealed' -> FINAL["final"] | 'static'
| 'readonly' -> /* no equivalent in C# (this is like a const that can be initialized separately in the constructor) */ | 'volatile' | 'extern' | 'virtual' | 'override';
| 'readonly' -> /* no equivalent in C# (this is like a const that can be initialized separately in the constructor) */ | 'volatile' | 'extern' | 'virtual' -> | 'override' -> /* not in Java,maybe convert to override annotation */;
class_member_declaration:
a=attributes?
@ -734,10 +734,16 @@ variable_declarator:
method_declaration:
method_header method_body ;
method_header:
member_name '(' formal_parameter_list? ')' type_parameter_constraints_clauses? ;
member_name type_parameter_list? '(' formal_parameter_list? ')' type_parameter_constraints_clauses?
-> ^(METHOD_HEADER member_name type_parameter_constraints_clauses? type_parameter_list? formal_parameter_list?);
method_body:
block ;
member_name returns [string name, List<String> tyargs]:
member_name :
type_or_generic ('.' type_or_generic)*
// keving [interface_type.identifier] | type_name '.' identifier
;
member_name_orig returns [string name, List<String> tyargs]:
qid { $name = $qid.name; $tyargs = $qid.tyargs; } ; // IInterface<int>.Method logic added.
///////////////////////////////////////////////////////
@ -876,7 +882,7 @@ return_type:
type
| v='void' -> ^(TYPE[$v.token, "TYPE"] $v);
formal_parameter_list:
formal_parameter (',' formal_parameter)* ;
formal_parameter (',' formal_parameter)* -> ^(PARAMS formal_parameter+);
formal_parameter:
attributes? (fixed_parameter | parameter_array)
| '__arglist'; // __arglist is undocumented, see google

View File

@ -144,7 +144,7 @@ modifier
class_member_declaration:
^(CONST attributes? modifiers? type constant_declarators)
| ^(EVENT attributes? modifiers? event_declaration)
| ^(METHOD attributes? modifiers? type method_declaration)
| ^(METHOD attributes? modifiers? type method_declaration) -> method(modifiers={$modifiers.st}, type={$type.st}, method={$method_declaration.st})
| ^(INTERFACE attributes? modifiers? interface_declaration[$modifiers.st])
| ^(CLASS attributes? modifiers? class_declaration[$modifiers.st])
| ^(PROPERTY attributes? modifiers? type property_declaration)
@ -421,12 +421,12 @@ qid: // qualified_identifier v2
| qid_start -> { $qid_start.st }
;
qid_start:
predefined_type
| (identifier generic_argument_list) => identifier generic_argument_list
predefined_type -> { $predefined_type.st }
| (identifier generic_argument_list) => identifier generic_argument_list -> template(id={ $identifier.st }, args={ $generic_argument_list.st }) "<id><args>"
// | 'this'
// | 'base'
| identifier ('::' identifier)?
| literal
| i1=identifier ('::' i2=identifier)? -> identifier(id={ $i1.st }, id2={ $i2.st })
| literal -> { $literal.st }
; // 0.ToString() is legal
@ -715,13 +715,19 @@ variable_declarator:
///////////////////////////////////////////////////////
method_declaration:
method_header method_body ;
method_header method_body -> method_declaration(header={$method_header.st}, body={$method_body.st}) ;
method_header:
member_name '(' formal_parameter_list? ')' type_parameter_constraints_clauses? ;
^(METHOD_HEADER member_name type_parameter_constraints_clauses? type_parameter_list[$type_parameter_constraints_clauses.tpConstraints]? formal_parameter_list?)
-> method_header(name={ $member_name.st }, typeparams = { $type_parameter_constraints_clauses.st }, params={ $formal_parameter_list.st });
method_body:
block ;
block -> { $block.st };
member_name:
qid ; // IInterface<int>.Method logic added.
t+=type_or_generic ('.' t+=type_or_generic)* -> template(items = { $t }) "<items; separator=\".\">"
;
// keving: missing interface_type.identifier
// identifier -> { $identifier.st }; // IInterface<int>.Method logic added.
//member_name:
// qid -> { $qid.st }; // IInterface<int>.Method logic added.
///////////////////////////////////////////////////////
property_declaration:
@ -811,7 +817,7 @@ type_variable_name:
return_type:
type -> { $type.st } ;
formal_parameter_list:
formal_parameter (',' formal_parameter)* ;
^(PARAMS formal_parameter+) ;
formal_parameter:
attributes? (fixed_parameter | parameter_array)
| '__arglist'; // __arglist is undocumented, see google

View File

@ -597,11 +597,14 @@ variable_declarator:
method_declaration:
method_header method_body ;
method_header:
member_name '(' formal_parameter_list? ')' type_parameter_constraints_clauses? ;
^(METHOD_HEADER member_name type_parameter_constraints_clauses? type_parameter_list? formal_parameter_list?);
method_body:
block ;
member_name:
qid ; // IInterface<int>.Method logic added.
type_or_generic ('.' type_or_generic)*
;
// keving: missing interface_type.identifier
//identifier ; // IInterface<int>.Method logic added.
///////////////////////////////////////////////////////
property_declaration:
@ -682,7 +685,7 @@ constructor_constraint:
return_type:
type ;
formal_parameter_list:
formal_parameter (',' formal_parameter)* ;
^(PARAMS formal_parameter+) ;
formal_parameter:
attributes? (fixed_parameter | parameter_array)
| '__arglist'; // __arglist is undocumented, see google

View File

@ -27,6 +27,8 @@ tokens {
CONVERSION_OPERATOR;
CONSTRUCTOR;
DESTRUCTOR;
METHOD_HEADER;
PARAMS;
MONOPLUS;
MONOMINUS;

View File

@ -53,7 +53,26 @@ class_member(comments, member) ::= <<
<member>
>>
field(modifiers, type, field, comments, init) ::= "<comments><modifiers(modifiers)><type> <field><if(init)> = <init><endif>;"
method(modifiers, type, field, comments) ::= "<comments><modifiers(modifiers)><type> <method>"
method_header(name, typeparams, params, exception="Throwable") ::= <<
<name><typeparams>(<params; separator=", ">) throws <exception>
>>
method_declaration(header, body) ::= <<
<header><if(body)> {<else>;<endif>
<body>
<if(body)>}<endif>
>>
method_body(body) ::= <<
{
<body>
}
>>
field(modifiers, type, field, comments, init) ::= "<comments><modifiers(modifiers)><type> <field>;"
variable_declarators(varinits) ::= "<varinits; separator=\", \">"
variable_declarator(typename,init) ::= "<typename><if(init)> = <init><endif>"
@ -61,6 +80,8 @@ primary_expression_start_parts(start,follows) ::= "<start><follows>"
type_param_constraint(param, constraints) ::= "<param> extends <constraints; separator=\" & \">"
identifier(id, id2) ::= "<id><if(id2)>::<id2><endif>"
// ******* ENUMS ***********
enum(modifiers,comments, attributes, name, body) ::= <<
@ -95,4 +116,4 @@ string(payload) ::= "<payload>"
verbatim_string(payload) ::= <<
"<payload; separator="\" + \n\"">"
>>
>>