'+=' 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) {
JetArrayAccessExpression arrayAccessExpression = (JetArrayAccessExpression) left;
for (JetExpression index : arrayAccessExpression.getIndexExpressions()) {
value(index, false, false);
}
value(arrayAccessExpression.getArrayExpression(), false, false);
value(expression.getOperationReference(), false, false);
builder.write(expression, left); // TODO : ???
visitAssignToArrayAccess(expression, arrayAccessExpression);
} else {
builder.unsupported(expression); // TODO
}
}
else if (JetTypeInferrer.assignmentOperationNames.containsKey(operationType)) {
JetExpression left = expression.getLeft();
value(left, false, false);
JetExpression left = JetPsiUtil.deparenthesize(expression.getLeft());
if (left != null) {
value(left, false, false);
}
if (right != null) {
value(right, false, false);
}
if (left instanceof JetSimpleNameExpression) {
if (left instanceof JetSimpleNameExpression || left instanceof JetArrayAccessExpression) {
value(expression.getOperationReference(), false, false);
builder.write(expression, left);
}
else {
else if (left != null) {
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
public void visitUnaryExpression(JetUnaryExpression expression) {
JetSimpleNameExpression operationSign = expression.getOperationSign();
@@ -5,6 +5,8 @@ fun foo() {
a[10] = 4
2
a[10]
100
a[10] += 1
}
---------------------
l0:
@@ -21,6 +23,13 @@ l0:
r(10)
r(a)
r(a[10])
r(100)
r(10)
r(a)
r(a[10])
r(1)
r(+=)
w(a[10])
l1:
<END>
error:
+2
View File
@@ -4,4 +4,6 @@ fun foo() {
a[10] = 4
2
a[10]
100
a[10] += 1
}
@@ -18,6 +18,7 @@ l0:
w(x)
r(x)
r(2)
r(+=)
w(x)
r(true)
jf(l2)