public static DogeILScript Parse(byte[] code) { List <DogeILOPCall> opCodes = new List <DogeILOPCall>(); for (int i = 0; i < code.Length; i++) { DogeILOPCode opCode = (DogeILOPCode)code[i]; int parameterCount = DogeILConstants.GetParameterCount(opCode); long[] parameters = new long[parameterCount]; for (int j = 0; j < parameterCount; j++) { parameters[j] = BitConverter.ToInt64(code[(i + (j * 4))..(i + (j * 4) + 4)]);
public static int GetParameterCount(DogeILOPCode code) { switch (code) { case DogeILOPCode.Add: case DogeILOPCode.Subtract: case DogeILOPCode.Multiply: case DogeILOPCode.Divide: case DogeILOPCode.LogicalAnd: case DogeILOPCode.LogicalOr: case DogeILOPCode.BinaryAnd: case DogeILOPCode.BinaryOr: case DogeILOPCode.Xor: case DogeILOPCode.LessThan: case DogeILOPCode.GreaterThan: case DogeILOPCode.LessOrEqualThan: case DogeILOPCode.GreaterOrEqualThan: case DogeILOPCode.Equal: case DogeILOPCode.NotEqual: return(3); case DogeILOPCode.PutInRegister: case DogeILOPCode.PutInMemory: case DogeILOPCode.SetRegister: case DogeILOPCode.SetMemory: return(2); case DogeILOPCode.Goto: return(1); case DogeILOPCode.If: return(2); default: throw new ArgumentOutOfRangeException($"DogeILOPCode {code} is not known"); } }
public DogeILOPCall(DogeILOPCode opCode, long[] parameters) { OPCode = opCode; Parameters = parameters; }