'+=' etc for ArrayAccess

This commit is contained in:
Andrey Breslav
2011-04-14 21:31:31 +04:00
parent c900545815
commit e9f9236303
4 changed files with 29 additions and 10 deletions
@@ -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:
+2
View File
@@ -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)