package org.reldb.rel.v0.generator; import org.reldb.rel.v0.types.Type; import org.reldb.rel.v0.vm.CellMutableFactory; import org.reldb.rel.v0.vm.instructions.core.OpVariableGet; import org.reldb.rel.v0.vm.instructions.core.OpVariableInitialise; import org.reldb.rel.v0.vm.instructions.core.OpVariableSet; public class Variable extends SlotScoped { private static CellMutableFactory variableFactory = new CellMutableFactory(); public Variable(int depth, int offset, Type type) { super(depth, offset, type); } public Variable(int depth, int offset) { super(depth, offset); } @Override public void compileGet(Generator generator) { // Compile retrieval of variable value generator.compileInstruction(new OpVariableGet(getDepth(), getOffset())); } @Override public void compileSet(Generator generator) { // compile assignment generator.compileInstruction(new OpVariableSet(getDepth(), getOffset())); } @Override public void compileInitialise(Generator generator) { generator.compileInstruction(new OpVariableInitialise(getDepth(), getOffset(), variableFactory)); } @Override public boolean isParameter() { return false; } }