package de.bse.prgm.cmd;
import de.bse.prgm.err.runtime.CannotChangeAConstantValueRuntimeError;
import de.bse.prgm.err.runtime.InvalidAllocationRuntimeError;
import de.bse.prgm.parse.arithmetical.ArithmeticalParser;
import de.bse.run.app.IConsole;
import de.bse.util.ParserException;
import de.bse.vm.Machine;
import de.bse.vm.var.IVariable;
/**
* Allocates the value of an expression to a variable.
* @author Elias Groll
* @version 2.15
*/
public class Allocation extends HotspotCompiledCommand {
public Allocation(String varString, String calcString) {
this.calcString = calcString;
this.varString = varString;
}
private String varString;
private String calcString;
private IVariable var;
private IVariable calc;
private ArithmeticalParser parser = new ArithmeticalParser();
public void execute(Machine machine, IConsole console) {
super.execute(machine,console);
if (var != null && calc != null) {
try {
var.setValue(calc.getValue());
} catch (ParserException e) {
machine.getProgram().addError(new CannotChangeAConstantValueRuntimeError(
varString));
}
}
}
public String getVarAsString() {
return varString;
}
public String infoMsg() {
return "[Info]Allocating \"" + calcString + "\" to \"" + varString + "\"";
}
public String toString() {
return "ALLOCATION";
}
public IVariable getVar() {
return var;
}
protected void init(Machine machine) {
try {
var = machine.parseIVariable(varString);
calc = parser.parseArithmeticalOperation(calcString, machine);
} catch (ParserException e) {
machine.getProgram().addError(new InvalidAllocationRuntimeError(varString
+ " = " + calcString));
}
}
}