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.BitString; import org.jerlang.type.List; import org.jerlang.type.Term; /** * Arguments: * 1. Fail * 2. Size * 3. Extra * 4. Live * 5. Unit * 6. Bin * 7. Flags * 8. Dst * * Example: * {bs_append,{f,0},8,0,0,8,{x,0},0,{x,1}} */ public class BsAppend { public static Term execute(Process proc, Module m, Instruction i, List params) { // TODO: This covers only the basic case, create more unit tests to expand functionality int bits = i.arg(1).toInteger().toInt(); BitString bs = i.arg(5).toArg(proc).toBitString().append(bits); Term dst = i.arg(7); if (dst.isXRegister()) { proc.setBitString(bs); proc.setX(dst.toRegisterIndex(), bs); return null; } else { throw new Error("Not implemented: " + i); } } }