use fast move

Update safestl.h
This commit is contained in:
blueloveTH 2023-02-18 16:54:20 +08:00
parent d6bacab50f
commit a9726205ff
2 changed files with 7 additions and 5 deletions

View File

@ -186,7 +186,7 @@ PyVar VM::run_frame(Frame* frame){
case OP_RE_RAISE: _raise(); break;
case OP_BUILD_LIST:
frame->push(PyList(
frame->pop_n_values_reversed(this, byte.arg).to_list()));
frame->pop_n_values_reversed(this, byte.arg).move_to_list()));
break;
case OP_BUILD_MAP:
{
@ -200,7 +200,7 @@ PyVar VM::run_frame(Frame* frame){
case OP_BUILD_SET:
{
PyVar list = PyList(
frame->pop_n_values_reversed(this, byte.arg).to_list()
frame->pop_n_values_reversed(this, byte.arg).move_to_list()
);
PyVar obj = call(builtins->attr("set"), pkpy::one_arg(list));
frame->push(obj);

View File

@ -94,7 +94,8 @@ namespace pkpy {
Args(pkpy::List&& other) noexcept {
_alloc(other.size());
for(int i=0; i<_size; i++) _args[i] = std::move(other[i]);
memcpy((void*)_args, (void*)other.data(), sizeof(PyVar)*_size);
memset((void*)other.data(), 0, sizeof(PyVar)*_size);
other.clear();
}
@ -112,9 +113,10 @@ namespace pkpy {
inline int size() const { return _size; }
pkpy::List to_list() const {
pkpy::List move_to_list() noexcept {
pkpy::List ret(_size);
for(int i=0; i<_size; i++) ret[i] = _args[i];
memcpy((void*)ret.data(), (void*)_args, sizeof(PyVar)*_size);
memset((void*)_args, 0, sizeof(PyVar)*_size);
return ret;
}