'+=' etc for ArrayAccess
This commit is contained in:
@@ -186,26 +186,24 @@ public class JetControlFlowProcessor {
|
|||||||
}
|
}
|
||||||
else if (left instanceof JetArrayAccessExpression) {
|
else if (left instanceof JetArrayAccessExpression) {
|
||||||
JetArrayAccessExpression arrayAccessExpression = (JetArrayAccessExpression) left;
|
JetArrayAccessExpression arrayAccessExpression = (JetArrayAccessExpression) left;
|
||||||
for (JetExpression index : arrayAccessExpression.getIndexExpressions()) {
|
visitAssignToArrayAccess(expression, arrayAccessExpression);
|
||||||
value(index, false, false);
|
|
||||||
}
|
|
||||||
value(arrayAccessExpression.getArrayExpression(), false, false);
|
|
||||||
value(expression.getOperationReference(), false, false);
|
|
||||||
builder.write(expression, left); // TODO : ???
|
|
||||||
} else {
|
} else {
|
||||||
builder.unsupported(expression); // TODO
|
builder.unsupported(expression); // TODO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (JetTypeInferrer.assignmentOperationNames.containsKey(operationType)) {
|
else if (JetTypeInferrer.assignmentOperationNames.containsKey(operationType)) {
|
||||||
JetExpression left = expression.getLeft();
|
JetExpression left = JetPsiUtil.deparenthesize(expression.getLeft());
|
||||||
value(left, false, false);
|
if (left != null) {
|
||||||
|
value(left, false, false);
|
||||||
|
}
|
||||||
if (right != null) {
|
if (right != null) {
|
||||||
value(right, false, false);
|
value(right, false, false);
|
||||||
}
|
}
|
||||||
if (left instanceof JetSimpleNameExpression) {
|
if (left instanceof JetSimpleNameExpression || left instanceof JetArrayAccessExpression) {
|
||||||
|
value(expression.getOperationReference(), false, false);
|
||||||
builder.write(expression, left);
|
builder.write(expression, left);
|
||||||
}
|
}
|
||||||
else {
|
else if (left != null) {
|
||||||
builder.unsupported(expression); // TODO
|
builder.unsupported(expression); // TODO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -219,6 +217,15 @@ public class JetControlFlowProcessor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void visitAssignToArrayAccess(JetBinaryExpression expression, JetArrayAccessExpression arrayAccessExpression) {
|
||||||
|
for (JetExpression index : arrayAccessExpression.getIndexExpressions()) {
|
||||||
|
value(index, false, false);
|
||||||
|
}
|
||||||
|
value(arrayAccessExpression.getArrayExpression(), false, false);
|
||||||
|
value(expression.getOperationReference(), false, false);
|
||||||
|
builder.write(expression, arrayAccessExpression); // TODO : ???
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitUnaryExpression(JetUnaryExpression expression) {
|
public void visitUnaryExpression(JetUnaryExpression expression) {
|
||||||
JetSimpleNameExpression operationSign = expression.getOperationSign();
|
JetSimpleNameExpression operationSign = expression.getOperationSign();
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ fun foo() {
|
|||||||
a[10] = 4
|
a[10] = 4
|
||||||
2
|
2
|
||||||
a[10]
|
a[10]
|
||||||
|
100
|
||||||
|
a[10] += 1
|
||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
@@ -21,6 +23,13 @@ l0:
|
|||||||
r(10)
|
r(10)
|
||||||
r(a)
|
r(a)
|
||||||
r(a[10])
|
r(a[10])
|
||||||
|
r(100)
|
||||||
|
r(10)
|
||||||
|
r(a)
|
||||||
|
r(a[10])
|
||||||
|
r(1)
|
||||||
|
r(+=)
|
||||||
|
w(a[10])
|
||||||
l1:
|
l1:
|
||||||
<END>
|
<END>
|
||||||
error:
|
error:
|
||||||
|
|||||||
@@ -4,4 +4,6 @@ fun foo() {
|
|||||||
a[10] = 4
|
a[10] = 4
|
||||||
2
|
2
|
||||||
a[10]
|
a[10]
|
||||||
|
100
|
||||||
|
a[10] += 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ l0:
|
|||||||
w(x)
|
w(x)
|
||||||
r(x)
|
r(x)
|
||||||
r(2)
|
r(2)
|
||||||
|
r(+=)
|
||||||
w(x)
|
w(x)
|
||||||
r(true)
|
r(true)
|
||||||
jf(l2)
|
jf(l2)
|
||||||
|
|||||||
Reference in New Issue
Block a user