mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 19:40:18 +00:00
use fast move
Update safestl.h
This commit is contained in:
parent
d6bacab50f
commit
a9726205ff
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user