public LuaVM(Stream fs) { reader = new BinaryReader(fs); byte[] signature = reader.ReadBytes(LUA_SIGNATURE.Length); for (int i = 0; i < signature.Length; i++) { if (signature[i] != LUA_SIGNATURE[i]) { throw new Exception("lua magic mismatch"); } } byte version = reader.ReadByte(); if (version != 0x50) { throw new Exception("lua version mismatch"); } config = ReadLuaVMConfig(); //todo: validate remote vm config against local config if (ReadLuaNumber() != LUA_TEST_NUM) { throw new Exception("lua number mismatch"); } LoadFunction(); }
private LuaVMConfig ReadLuaVMConfig() { LuaVMConfig config = new LuaVMConfig() { littleEndian = ReadByte(), intSz = ReadByte(), sizeTSz = ReadByte(), instrSz = ReadByte(), opSz = ReadByte(), //register sizes for A,B,C opASz = ReadByte(), opBSz = ReadByte(), opCSz = ReadByte(), luaNumSz = ReadByte(), }; return(config); }