| 169 | } |
| 170 | |
| 171 | Expect<void> |
| 172 | Executor::runArrayNewDataOp(Runtime::StackManager &StackMgr, |
| 173 | const uint32_t TypeIdx, const uint32_t DataIdx, |
| 174 | const AST::Instruction &Instr) const noexcept { |
| 175 | const uint32_t Length = StackMgr.pop().get<uint32_t>(); |
| 176 | const uint32_t Start = StackMgr.getTop().get<uint32_t>(); |
| 177 | EXPECTED_TRY( |
| 178 | auto InstRef, |
| 179 | arrayNewData(StackMgr, TypeIdx, DataIdx, Start, Length) |
| 180 | .map_error([&](auto E) { |
| 181 | auto *DataInst = getDataInstByIdx(StackMgr, DataIdx); |
| 182 | const uint32_t BSize = |
| 183 | getArrayStorageTypeByIdx(StackMgr, TypeIdx).getBitWidth() / 8; |
| 184 | return logError(E, Instr, [&]() { |
| 185 | return logMemoryOOB(E, *DataInst, Start, BSize * Length); |
| 186 | }); |
| 187 | })); |
| 188 | StackMgr.getTop().emplace<RefVariant>(InstRef); |
| 189 | return {}; |
| 190 | } |
| 191 | |
| 192 | Expect<void> |
| 193 | Executor::runArrayNewElemOp(Runtime::StackManager &StackMgr, |