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

support for setting properties

This commit is contained in:
Kevin Glynn 2011-01-13 16:47:03 +01:00
parent 769b37bb67
commit f6d63e1b7d

View File

@ -576,8 +576,29 @@ scope {
}
@init {
$assignment::parentIsSetter = true;
CommonTree ret = null;
bool isThis = false;
}
@after {
if (ret != null)
$assignment.tree = ret;
}:
(^('.' expression identifier generic_argument_list?) | identifier) => (^('.' expression identifier generic_argument_list?) | identifier) assignment_operator {$assignment::parentIsSetter = false; } expression
((^('.' expression identifier generic_argument_list?) | identifier) '=') =>
(^('.' se=expression i=identifier generic_argument_list?) | i=identifier { isThis = true;}) a='=' {$assignment::parentIsSetter = false; } rhs=expression
{
InterfaceRepTemplate seType = (isThis ? SymTabLookup("this") : $se.dotNetType) as InterfaceRepTemplate;
if (seType != null) {
ResolveResult fieldResult = seType.Resolve($i.thetext, AppEnv);
if (fieldResult != null && fieldResult.Result is PropRepTemplate) {
Debug($i.tree.Token.Line + ": Found '" + $i.thetext + "'");
Dictionary<string,CommonTree> valMap = new Dictionary<string,CommonTree>();
if (!isThis)
valMap["this"] = $se.tree;
valMap["value"] = $rhs.tree;
ret = mkJavaWrapper(((PropRepTemplate)fieldResult.Result).JavaSet, valMap, $a.token);
}
}
}
| unary_expression assignment_operator {$assignment::parentIsSetter = false; } expression ;