package org.jerlang.erts.emulator.op;
import org.jerlang.Module;
import org.jerlang.Process;
import org.jerlang.erts.emulator.Instruction;
import org.jerlang.erts.erlang.Error;
import org.jerlang.type.List;
import org.jerlang.type.Term;
import org.jerlang.type.stack.BinMatchState;
/**
* Convert the object in SrcDst to a Binary and store it in SrcDst.
* Usually, SrcDst is a BinMatchState object and this opcode
* is invoked before a badmatch instruction.
*
* Example:
* {bs_context_to_binary,{x,0}}
*
* Arguments:
* 1. SrcDst
*/
public class BsContextToBinary {
public static Term execute(Process proc, Module m, Instruction i, List params) {
Term src = i.arg(0).toArg(proc);
Term dst = i.arg(0);
if (src instanceof BinMatchState && dst.isXRegister()) {
BinMatchState bms = src.toBinMatchState();
proc.setX(dst.toRegisterIndex(), bms.toBitString());
return null;
} else {
throw new Error("Not implemented: " + i);
}
}
}