void Executor::ExecArrayWrite(MethodFrame *frame, Insn *insn) { int index = frame->reg_values_[insn->src_regs_[0]->id_].num_.int_part; if (insn->obj_reg_) { Object *array_obj = frame->reg_values_[insn->obj_reg_->id_].object_; CHECK(array_obj); CHECK(ArrayWrapper::IsIntArray(array_obj)); IntArray *array = ArrayWrapper::GetIntArray(array_obj); array->Write(index, frame->reg_values_[insn->src_regs_[1]->id_].num_); } else { // local array. CHECK(insn->src_regs_.size() == 3); Value &array = frame->reg_values_[insn->src_regs_[2]->id_]; array.local_int_array_->Write(index, frame->reg_values_[insn->src_regs_[1]->id_].num_); } }
void Executor::MemoryWrite(int addr, const numeric::Number &data) { IntArray *mem = thr_->GetVM()->GetDefaultMemory(); mem->Write(addr, data); }