mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30: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_RE_RAISE: _raise(); break;
|
||||||
case OP_BUILD_LIST:
|
case OP_BUILD_LIST:
|
||||||
frame->push(PyList(
|
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;
|
break;
|
||||||
case OP_BUILD_MAP:
|
case OP_BUILD_MAP:
|
||||||
{
|
{
|
||||||
@ -200,7 +200,7 @@ PyVar VM::run_frame(Frame* frame){
|
|||||||
case OP_BUILD_SET:
|
case OP_BUILD_SET:
|
||||||
{
|
{
|
||||||
PyVar list = PyList(
|
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));
|
PyVar obj = call(builtins->attr("set"), pkpy::one_arg(list));
|
||||||
frame->push(obj);
|
frame->push(obj);
|
||||||
|
@ -94,7 +94,8 @@ namespace pkpy {
|
|||||||
|
|
||||||
Args(pkpy::List&& other) noexcept {
|
Args(pkpy::List&& other) noexcept {
|
||||||
_alloc(other.size());
|
_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();
|
other.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,9 +113,10 @@ namespace pkpy {
|
|||||||
|
|
||||||
inline int size() const { return _size; }
|
inline int size() const { return _size; }
|
||||||
|
|
||||||
pkpy::List to_list() const {
|
pkpy::List move_to_list() noexcept {
|
||||||
pkpy::List ret(_size);
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user