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.OpParameterGet;
import org.reldb.rel.v0.vm.instructions.core.OpParameterSet;
import org.reldb.rel.v0.vm.instructions.core.OpVariableInitialise;
public class Parameter extends SlotScoped {
private static CellMutableFactory variableFactory = new CellMutableFactory();
public Parameter(int depth, int offset, Type type) {
super(depth, offset, type);
}
@Override
public void compileGet(Generator generator) {
// Compile retrieval of parameter value
generator.compileInstruction(new OpParameterGet(getDepth(), getOffset()));
}
@Override
public void compileSet(Generator generator) {
// compile assignment
generator.compileInstruction(new OpParameterSet(getDepth(), getOffset()));
}
@Override
public void compileInitialise(Generator generator) {
generator.compileInstruction(new OpVariableInitialise(getDepth(), getOffset(), variableFactory));
}
@Override
public boolean isParameter() {
return true;
}
}