Skip to content

Commit e91ae50

Browse files
committed
Implemented ArrayAccess
1 parent 50dd14b commit e91ae50

File tree

3 files changed

+12
-7
lines changed

3 files changed

+12
-7
lines changed

src/main/java/de/dercompiler/ast/expression/AddExpression.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ public OperatorToken getOperator() {
3434
@Override
3535
public Node createNode(TransformationState state) {
3636
createChildNodes(state);
37-
// TODO: rhs or res?
3837
Node res = state.construction.newAdd(state.lhs, state.rhs);
3938
clearChildNodes(state);
4039
return res;

src/main/java/de/dercompiler/ast/expression/ArrayAccess.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22

33
import de.dercompiler.ast.ASTNode;
44
import de.dercompiler.ast.visitor.ASTExpressionVisitor;
5+
import de.dercompiler.io.OutputMessageHandler;
6+
import de.dercompiler.io.message.MessageOrigin;
57
import de.dercompiler.lexer.SourcePosition;
68
import de.dercompiler.transformation.TransformationHelper;
79
import de.dercompiler.transformation.TransformationState;
10+
import firm.ArrayType;
811
import firm.Mode;
912
import firm.nodes.Node;
1013

@@ -40,12 +43,16 @@ public void accept(ASTExpressionVisitor astExpressionVisitor) {
4043
@Override
4144
public Node createNode(TransformationState state) {
4245
Node base_ptr = getEncapsulated().createNode(state);
43-
//TODO getTypeSize
44-
Node type_size = state.construction.newConst(0, Mode.getIu());
46+
if (!(encapsulated.getType() instanceof ArrayType aa)) {
47+
new OutputMessageHandler(MessageOrigin.TRANSFORM).internalError("we make a ArrayAccess on: " + encapsulated + " this should have been found by semantic!");
48+
return null;
49+
}
50+
int type_size_const = aa.getElementType().getSize();
51+
Node type_size = state.construction.newConst(type_size_const, Mode.getIu());
4552
Node elements = index.createNode(state);
46-
Node index = TransformationHelper.calculateOffset(state, type_size, elements);
47-
Node elem_ptr = TransformationHelper.addOffsetToPointer(state, base_ptr, index);
48-
Mode mode = null; //TODO: how to get mode?
53+
Node offset = TransformationHelper.calculateOffset(state, type_size, elements);
54+
Node elem_ptr = TransformationHelper.addOffsetToPointer(state, base_ptr, offset);
55+
Mode mode = aa.getElementType().getMode();
4956
return TransformationHelper.genLoad(state, elem_ptr, mode);
5057
}
5158
}

src/main/java/de/dercompiler/transformation/TransformationState.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ public void markReturn() {
6969
}
7070

7171
public boolean noReturnYet() {
72-
//TODO add !
7372
return !hasReturn;
7473
}
7574

0 commit comments

Comments
 (0)