/src/org/ooc/frontend/model/Dereference.java
http://github.com/nddrylliog/ooc · Java · 81 lines · 65 code · 16 blank · 0 comment · 13 complexity · b285985a1e86cbf9dce4cc17960bcc37 MD5 · raw file
- package org.ooc.frontend.model;
- import java.io.IOException;
- import org.ooc.frontend.Visitor;
- import org.ooc.frontend.model.tokens.Token;
- public class Dereference extends Access {
- Type type;
- Expression expression;
-
- public Dereference(Expression expression, Token startToken) {
- super(startToken);
- setExpression(expression);
- }
-
- @Override
- public Expression getGenericOperand() {
- if(expression.getType().isGeneric() && expression.getType().getPointerLevel() > 0) {
- return expression;
- }
- return super.getGenericOperand();
- }
- @Override
- public boolean replace(Node oldie, Node kiddo) {
- if(expression == oldie) {
- expression = (Expression) kiddo;
- return true;
- }
-
- return false;
- }
- public Type getType() {
- if(type == null) {
- Type exprType = expression.getType();
- if(exprType != null) {
- type = exprType.clone();
- type.setPointerLevel(type.getPointerLevel() - 1);
- if(type.getPointerLevel() < 0) {
- if(type.getRef() instanceof CoverDecl) {
- CoverDecl cover = (CoverDecl) type.getRef();
- if(cover.getFromType() != null && !cover.getFromType().isFlat()) {
- type = cover.getFromType().clone();
- type.setPointerLevel(type.getPointerLevel() - 1);
- }
- }
- }
- }
- }
- return type;
- }
-
- public Expression getExpression() {
- return expression;
- }
-
- public void setExpression(Expression expression) {
- this.expression = expression;
- }
- public void accept(Visitor visitor) throws IOException {
- visitor.visit(this);
- }
- public void acceptChildren(Visitor visitor) throws IOException {
- expression.accept(visitor);
- }
- public boolean hasChildren() {
- return true;
- }
-
- @Override
- public boolean canBeReferenced() {
- return true;
- }
- }