mirror of
https://github.com/twiglet/cs2j.git
synced 2025-01-18 13:15:17 +01:00
support for <exp>[ff] <op>= <rhs>
This commit is contained in:
parent
839a67bf19
commit
dd23453b72
@ -910,37 +910,73 @@ assignment
|
|||||||
if (seType != null) {
|
if (seType != null) {
|
||||||
ResolveResult fieldResult = seType.Resolve($i.thetext, AppEnv);
|
ResolveResult fieldResult = seType.Resolve($i.thetext, AppEnv);
|
||||||
if (fieldResult != null && fieldResult.Result is PropRepTemplate) {
|
if (fieldResult != null && fieldResult.Result is PropRepTemplate) {
|
||||||
Debug($i.tree.Token.Line + ": Found '" + $i.thetext + "'");
|
PropRepTemplate propRep = fieldResult.Result as PropRepTemplate;
|
||||||
CommonTree newRhsExp = $rhs.tree;
|
if (!String.IsNullOrEmpty(propRep.JavaSet)) {
|
||||||
if ($a.tree.Token.Type != ASSIGN) {
|
CommonTree newRhsExp = $rhs.tree;
|
||||||
// we have prop <op>= rhs
|
// if assignment operator is a short cut operator then only translate if we also have JavaGet
|
||||||
// need to translate to setProp(getProp <op> rhs)
|
bool goodTx = true;
|
||||||
Dictionary<string,CommonTree> rhsMap = new Dictionary<string,CommonTree>();
|
if ($a.tree.Token.Type != ASSIGN) {
|
||||||
|
if (!String.IsNullOrEmpty(propRep.JavaGet)) {
|
||||||
|
// we have prop <op>= rhs
|
||||||
|
// need to translate to setProp(getProp <op> rhs)
|
||||||
|
Dictionary<string,CommonTree> rhsMap = new Dictionary<string,CommonTree>();
|
||||||
|
if (!isThis)
|
||||||
|
rhsMap["this"] = wrapExpression($se.tree, $i.tree.Token);
|
||||||
|
CommonTree rhsPropTree = mkJavaWrapper(propRep.JavaGet, rhsMap, $a.tree.Token);
|
||||||
|
newRhsExp = mkOpExp(mkOpExp($a.tree), rhsPropTree, $rhs.tree);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
goodTx = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Dictionary<string,CommonTree> valMap = new Dictionary<string,CommonTree>();
|
||||||
if (!isThis)
|
if (!isThis)
|
||||||
rhsMap["this"] = wrapExpression($se.tree, $i.tree.Token);
|
valMap["this"] = wrapExpression($se.tree, $i.tree.Token);
|
||||||
CommonTree rhsPropTree = mkJavaWrapper(((PropRepTemplate)fieldResult.Result).JavaGet, rhsMap, $a.tree.Token);
|
valMap["value"] = wrapExpression(newRhsExp, $i.tree.Token);
|
||||||
newRhsExp = mkOpExp(mkOpExp($a.tree), rhsPropTree, $rhs.tree);
|
if (goodTx) {
|
||||||
|
ret = mkJavaWrapper(propRep.JavaSet, valMap, $a.tree.Token);
|
||||||
|
Imports.Add(propRep.Imports);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Dictionary<string,CommonTree> valMap = new Dictionary<string,CommonTree>();
|
|
||||||
if (!isThis)
|
|
||||||
valMap["this"] = wrapExpression($se.tree, $i.tree.Token);
|
|
||||||
valMap["value"] = wrapExpression(newRhsExp, $i.tree.Token);
|
|
||||||
ret = mkJavaWrapper(((PropRepTemplate)fieldResult.Result).JavaSet, valMap, $a.tree.Token);
|
|
||||||
Imports.Add(fieldResult.Result.Imports);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
| (^(INDEX expression expression_list?) '=') =>
|
| (^(INDEX expression expression_list?) assignment_operator) =>
|
||||||
^(INDEX ie=expression expression_list?) ia='=' irhs=expression
|
^(INDEX ie=expression expression_list?) ia=assignment_operator irhs=expression
|
||||||
{
|
{
|
||||||
if ($ie.dotNetType != null) {
|
if ($ie.dotNetType != null) {
|
||||||
ResolveResult indexerResult = $ie.dotNetType.ResolveIndexer($expression_list.expTypes ?? new List<TypeRepTemplate>(), AppEnv);
|
ResolveResult indexerResult = $ie.dotNetType.ResolveIndexer($expression_list.expTypes ?? new List<TypeRepTemplate>(), AppEnv);
|
||||||
if (indexerResult != null) {
|
if (indexerResult != null) {
|
||||||
IndexerRepTemplate indexerRep = indexerResult.Result as IndexerRepTemplate;
|
IndexerRepTemplate indexerRep = indexerResult.Result as IndexerRepTemplate;
|
||||||
if (!String.IsNullOrEmpty(indexerRep.JavaSet)) {
|
if (!String.IsNullOrEmpty(indexerRep.JavaSet)) {
|
||||||
|
CommonTree newRhsExp = $irhs.tree;
|
||||||
|
// if assignment operator is a short cut operator then only translate if we also have JavaGet
|
||||||
|
bool goodTx = true;
|
||||||
|
if ($ia.tree.Token.Type != ASSIGN) {
|
||||||
|
if (!String.IsNullOrEmpty(indexerRep.JavaGet)) {
|
||||||
|
// we have indexable[args] <op>= rhs
|
||||||
|
// need to translate to set___idx(args, get___idx(args) <op> rhs)
|
||||||
|
Dictionary<string,CommonTree> rhsMap = new Dictionary<string,CommonTree>();
|
||||||
|
rhsMap["this"] = wrapExpression($ie.tree, $ie.tree.Token);
|
||||||
|
for (int idx = 0; idx < indexerRep.Params.Count; idx++) {
|
||||||
|
rhsMap[indexerRep.Params[idx].Name] = wrapArgument($expression_list.expTrees[idx], $ie.tree.Token);
|
||||||
|
if (indexerRep.Params[idx].Name.StartsWith("TYPEOF") && $expression_list.expTreeTypeofTypes[idx] != null) {
|
||||||
|
// if this argument is a typeof expression then add a TYPEOF_TYPEOF-> typeof's type mapping
|
||||||
|
rhsMap[indexerRep.Params[idx].Name + "_TYPE"] = wrapTypeOfType($expression_list.expTreeTypeofTypes[idx], $ie.tree.Token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CommonTree rhsIdxTree = mkJavaWrapper(indexerRep.JavaGet, rhsMap, $ia.tree.Token);
|
||||||
|
newRhsExp = mkOpExp(mkOpExp($ia.tree), rhsIdxTree, $irhs.tree);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
goodTx = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Dictionary<string,CommonTree> myMap = new Dictionary<string,CommonTree>();
|
Dictionary<string,CommonTree> myMap = new Dictionary<string,CommonTree>();
|
||||||
myMap["this"] = wrapExpression($ie.tree, $ie.tree.Token);
|
myMap["this"] = wrapExpression($ie.tree, $ie.tree.Token);
|
||||||
myMap["value"] = wrapExpression($irhs.tree, $irhs.tree.Token);
|
myMap["value"] = wrapExpression(newRhsExp, newRhsExp.Token);
|
||||||
for (int idx = 0; idx < indexerRep.Params.Count; idx++) {
|
for (int idx = 0; idx < indexerRep.Params.Count; idx++) {
|
||||||
myMap[indexerRep.Params[idx].Name] = wrapArgument($expression_list.expTrees[idx], $ie.tree.Token);
|
myMap[indexerRep.Params[idx].Name] = wrapArgument($expression_list.expTrees[idx], $ie.tree.Token);
|
||||||
if (indexerRep.Params[idx].Name.StartsWith("TYPEOF") && $expression_list.expTreeTypeofTypes[idx] != null) {
|
if (indexerRep.Params[idx].Name.StartsWith("TYPEOF") && $expression_list.expTreeTypeofTypes[idx] != null) {
|
||||||
@ -948,8 +984,10 @@ assignment
|
|||||||
myMap[indexerRep.Params[idx].Name + "_TYPE"] = wrapTypeOfType($expression_list.expTreeTypeofTypes[idx], $ie.tree.Token);
|
myMap[indexerRep.Params[idx].Name + "_TYPE"] = wrapTypeOfType($expression_list.expTreeTypeofTypes[idx], $ie.tree.Token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ret = mkJavaWrapper(indexerRep.JavaSet, myMap, $ie.tree.Token);
|
if (goodTx) {
|
||||||
Imports.Add(indexerRep.Imports);
|
ret = mkJavaWrapper(indexerRep.JavaSet, myMap, $ie.tree.Token);
|
||||||
|
Imports.Add(indexerRep.Imports);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user