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

abstract properties

This commit is contained in:
Kevin Glynn 2011-06-14 09:36:49 +02:00
parent b3de6b13a0
commit 2363e9da5e

View File

@ -696,7 +696,7 @@ class_member_declaration:
| i=interface_declaration[$a.tree, $m.tree, null] -> $i | i=interface_declaration[$a.tree, $m.tree, null] -> $i
| v2=void_type m1=method_declaration[$a.tree, $m.tree, $m.modList, $v2.tree, $v2.text, false /* isPartial */] -> $m1 | v2=void_type m1=method_declaration[$a.tree, $m.tree, $m.modList, $v2.tree, $v2.text, false /* isPartial */] -> $m1
| t=type ( (member_name type_parameter_list? '(') => m2=method_declaration[$a.tree, $m.tree, $m.modList, $t.tree, $t.text, false /* isPartial */] -> $m2 | t=type ( (member_name type_parameter_list? '(') => m2=method_declaration[$a.tree, $m.tree, $m.modList, $t.tree, $t.text, false /* isPartial */] -> $m2
| (member_name '{') => pd=property_declaration[$a.tree, $m.tree, $t.tree] -> $pd | (member_name '{') => pd=property_declaration[$a.tree, $m.tree, $m.modList.Contains("abstract"), $t.tree] -> $pd
| (type_name '.' 'this') => tn=type_name '.' ix1=indexer_declaration[$a.tree, $m.tree, $t.tree, $tn.tree] -> $ix1 | (type_name '.' 'this') => tn=type_name '.' ix1=indexer_declaration[$a.tree, $m.tree, $t.tree, $tn.tree] -> $ix1
| ix2=indexer_declaration[$a.tree, $m.tree, $t.tree, null] -> $ix2 //this | ix2=indexer_declaration[$a.tree, $m.tree, $t.tree, null] -> $ix2 //this
| field_declaration -> ^(FIELD[$t.start.Token, "FIELD"] $a? $m? $t field_declaration) // qid | field_declaration -> ^(FIELD[$t.start.Token, "FIELD"] $a? $m? $t field_declaration) // qid
@ -1388,33 +1388,36 @@ member_name_orig returns [string name, List<string> tyargs]:
qid { $name = $qid.name; $tyargs = $qid.tyargs; } ; // IInterface<int>.Method logic added. qid { $name = $qid.name; $tyargs = $qid.tyargs; } ; // IInterface<int>.Method logic added.
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////
property_declaration [CommonTree atts, CommonTree mods, CommonTree type] property_declaration [CommonTree atts, CommonTree mods, bool isAbstract, CommonTree type]
scope { bool emptyGetterSetter; } scope { bool emptyGetterSetter; }
@init { @init {
$property_declaration::emptyGetterSetter = false; $property_declaration::emptyGetterSetter = false;
CommonTree privateVar = null; CommonTree privateVar = null;
} }
: :
i=member_name '{' ads=accessor_declarations[atts, mods, type, $i.text, $i.rawId] '}' i=member_name '{' ads=accessor_declarations[atts, mods, isAbstract, type, $i.text, $i.rawId] '}'
v=magicMkPropertyVar[mkPrivateMod($mods, $i.tree.Token), type, "__" + $i.tree.Text] { privateVar = $property_declaration::emptyGetterSetter ? $v.tree : null; }-> { privateVar } $ads ; v=magicMkPropertyVar[mkPrivateMod($mods, $i.tree.Token), type, "__" + $i.tree.Text] { privateVar = !isAbstract && $property_declaration::emptyGetterSetter ? $v.tree : null; }-> { privateVar } $ads ;
accessor_declarations [CommonTree atts, CommonTree mods, CommonTree type, string propName, string rawVarName]: accessor_declarations [CommonTree atts, CommonTree mods, bool isAbstract, CommonTree type, string propName, string rawVarName]:
accessor_declaration[atts, mods, type, propName, rawVarName]+; accessor_declaration[atts, mods, isAbstract, type, propName, rawVarName]+;
accessor_declaration [CommonTree atts, CommonTree mods, CommonTree type, string propName, string rawVarName] accessor_declaration [CommonTree atts, CommonTree mods, bool isAbstract, CommonTree type, string propName, string rawVarName]
@init { @init {
CommonTree propBlock = null; CommonTree propBlock = null;
bool mkBody = false; bool mkBody = false;
}: }:
la=attributes? lm=accessor_modifier? la=attributes? lm=accessor_modifier?
(g='get' ((';')=> gbe=';' { $property_declaration::emptyGetterSetter = true; propBlock = $gbe.tree; mkBody = true; rawVarName = "__" + rawVarName; } (g='get' ((';')=> gbe=semi { $property_declaration::emptyGetterSetter = true; propBlock = $gbe.tree; mkBody = !isAbstract; rawVarName = "__" + rawVarName; }
| gb=block { propBlock = $gb.tree; } ) getm=magicPropGetter[atts, $la.tree, mods, $lm.tree, type, $g.token, propBlock, propName, mkBody, rawVarName] -> $getm | gb=block { propBlock = $gb.tree; } ) getm=magicPropGetter[atts, $la.tree, mods, $lm.tree, type, $g.token, propBlock, propName, mkBody, rawVarName] -> $getm
| s='set' ((';')=> sbe=';' { $property_declaration::emptyGetterSetter = true; propBlock = $sbe.tree; mkBody = true; rawVarName = "__" + rawVarName; } | s='set' ((';')=> sbe=semi { $property_declaration::emptyGetterSetter = true; propBlock = $sbe.tree; mkBody = !isAbstract; rawVarName = "__" + rawVarName; }
| sb=block { propBlock = $sb.tree; } ) setm=magicPropSetter[atts, $la.tree, mods, $lm.tree, type, $s.token, propBlock, propName, mkBody, rawVarName] -> $setm) | sb=block { propBlock = $sb.tree; } ) setm=magicPropSetter[atts, $la.tree, mods, $lm.tree, type, $s.token, propBlock, propName, mkBody, rawVarName] -> $setm)
; ;
accessor_modifier: accessor_modifier:
'protected' 'internal'? | 'private' | 'internal' 'protected'?; 'protected' 'internal'? | 'private' | 'internal' 'protected'?;
semi:
';' ;
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////
event_declaration[CommonTree atts, CommonTree mods]: event_declaration[CommonTree atts, CommonTree mods]:
e='event' type e='event' type
@ -1655,8 +1658,8 @@ interface_accessor_declarations [CommonTree atts, CommonTree mods, CommonTree ty
interface_accessor_declaration[atts, mods, type, propName]+ interface_accessor_declaration[atts, mods, type, propName]+
; ;
interface_accessor_declaration [CommonTree atts, CommonTree mods, CommonTree type, string propName]: interface_accessor_declaration [CommonTree atts, CommonTree mods, CommonTree type, string propName]:
la=attributes? (g='get' semi=';' magicPropGetter[atts, $la.tree, mods, null, type, $g.token, $semi.tree, propName, false, ""] -> magicPropGetter la=attributes? (g='get' gbe=semi magicPropGetter[atts, $la.tree, mods, null, type, $g.token, $gbe.tree, propName, false, ""] -> magicPropGetter
| s='set' semi=';' magicPropSetter[atts, $la.tree, mods, null, type, $s.token, $semi.tree, propName, false, ""] -> magicPropSetter) | s='set' sbe=semi magicPropSetter[atts, $la.tree, mods, null, type, $s.token, $sbe.tree, propName, false, ""] -> magicPropSetter)
; ;
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////