cbc/net/loveruby/cflat/ast/DefinedVariable.java

61 lines
1.4 KiB
Java

package net.loveruby.cflat.ast;
import net.loveruby.cflat.type.*;
import net.loveruby.cflat.asm.*;
public class DefinedVariable extends Variable {
protected ExprNode initializer;
protected MemoryReference memref;
public DefinedVariable(boolean priv, TypeNode type,
String name, ExprNode init) {
super(priv, type, name);
initializer = init;
sequence = -1;
}
public boolean isDefined() {
return true;
}
public boolean hasInitializer() {
return (initializer != null);
}
public boolean isInitialized() {
return hasInitializer();
}
public ExprNode initializer() {
return initializer;
}
public void setInitializer(ExprNode expr) {
this.initializer = expr;
}
public void setMemref(MemoryReference mem) {
this.memref = mem;
}
public MemoryReference memref() {
if (memref == null)
throw new Error("unresolved variable address");
return memref;
}
public AsmEntity address() {
return null;
}
protected void _dump(Dumper d) {
d.printMember("name", name);
d.printMember("isPrivate", isPrivate);
d.printMember("typeNode", typeNode);
d.printMember("initializer", initializer);
}
public void accept(ASTVisitor visitor) {
visitor.visit(this);
}
}